|
1 |
| -$(document).on("click", ".open-modal-button", function () { |
2 |
| - var parts = $(this).data("url").split("_"); |
3 |
| - var type = parts[0]; |
4 |
| - var id = parts[1]; |
| 1 | +var openModalButtons = document.querySelectorAll(".open-modal-button"); |
5 | 2 |
|
6 |
| - $.ajax({ |
7 |
| - type: "GET", |
8 |
| - url: "/edit/", |
9 |
| - data: { media_type: type, media_id: id }, |
10 |
| - success: function (data) { |
11 |
| - var output = data.title; |
12 |
| - if (data.year) { |
13 |
| - output += " (" + data.year + ")"; |
14 |
| - } |
| 3 | +openModalButtons.forEach(function (button) { |
| 4 | + button.addEventListener("click", function () { |
| 5 | + // get the data-url attribute from the clicked element |
| 6 | + var urlParts = this.getAttribute("data-url").split("_"); |
| 7 | + var type = urlParts[0]; |
| 8 | + var id = urlParts[1]; |
15 | 9 |
|
16 |
| - if (data.original_type) { |
17 |
| - // capitalize first letter |
18 |
| - output += " [" |
19 |
| - + data.original_type.charAt(0).toUpperCase() |
20 |
| - + data.original_type.slice(1) |
21 |
| - + "]"; |
22 |
| - } else if (data.media_type) { |
23 |
| - // capitalize first letter |
24 |
| - output += " [" |
25 |
| - + data.media_type.charAt(0).toUpperCase() |
26 |
| - + data.media_type.slice(1) |
27 |
| - + "]"; |
28 |
| - } |
| 10 | + var xhr = new XMLHttpRequest(); |
| 11 | + var url = "/edit/?media_type=" + type + "&media_id=" + id; |
29 | 12 |
|
30 |
| - $("#modal-title-" + type + "_" + id).html(output); |
31 |
| - $("#modal-body-" + type + "_" + id).html(data.html); |
32 |
| - if (data.seasons) { |
33 |
| - var select = $("#season-select-" + type + "_" + id); |
| 13 | + xhr.onload = function () { |
| 14 | + if (xhr.status === 200) { |
| 15 | + // parse the JSON response |
| 16 | + var data = JSON.parse(xhr.responseText); |
| 17 | + var output = data.title; |
| 18 | + if (data.year) { |
| 19 | + output += " (" + data.year + ")"; |
| 20 | + } |
34 | 21 |
|
35 |
| - new bootstrap.Tooltip( |
36 |
| - document |
37 |
| - .getElementById("season-descriptor-" + type + "_" + id) |
38 |
| - .querySelector('[data-bs-toggle="tooltip"]') |
39 |
| - ); |
| 22 | + if (data.original_type) { |
| 23 | + // capitalize first letter |
| 24 | + output += " [" |
| 25 | + + data.original_type.charAt(0).toUpperCase() |
| 26 | + + data.original_type.slice(1) |
| 27 | + + "]"; |
| 28 | + } else if (data.media_type) { |
| 29 | + // capitalize first letter |
| 30 | + output += " [" |
| 31 | + + data.media_type.charAt(0).toUpperCase() |
| 32 | + + data.media_type.slice(1) |
| 33 | + + "]"; |
| 34 | + } |
40 | 35 |
|
41 |
| - var score = $("#score-input-" + type + "_" + id); |
42 |
| - var status = $("#season-status-" + type + "_" + id); |
43 |
| - var progress = $("#progress-input-" + type + "_" + id); |
44 |
| - var start = $("#start-input-" + type + "_" + id); |
45 |
| - var end = $("#end-input-" + type + "_" + id); |
| 36 | + // update the modal title and body with the response data |
| 37 | + document.getElementById("modal-title-" + type + "_" + id).innerHTML = |
| 38 | + output; |
| 39 | + document.getElementById("modal-body-" + type + "_" + id).innerHTML = |
| 40 | + data.html; |
46 | 41 |
|
47 |
| - select.change(function () { |
48 |
| - var selectedValue = $(this).val(); |
| 42 | + if (data.seasons) { |
| 43 | + var select = document.getElementById( |
| 44 | + "season-select-" + type + "_" + id |
| 45 | + ); |
49 | 46 |
|
50 |
| - if (selectedValue == "general") { |
51 |
| - score.val(data.score); |
52 |
| - status.val(data.status); |
53 |
| - progress.val(data.progress); |
54 |
| - start.val(data.start_date); |
55 |
| - end.val(data.end_date); |
56 |
| - } else { |
57 |
| - let exists = false; |
| 47 | + new bootstrap.Tooltip( |
| 48 | + document |
| 49 | + .getElementById("season-descriptor-" + type + "_" + id) |
| 50 | + .querySelector('[data-bs-toggle="tooltip"]') |
| 51 | + ); |
| 52 | + |
| 53 | + var score = document.getElementById("score-input-" + type + "_" + id); |
| 54 | + var status = document.getElementById( |
| 55 | + "season-status-" + type + "_" + id |
| 56 | + ); |
| 57 | + var progress = document.getElementById( |
| 58 | + "progress-input-" + type + "_" + id |
| 59 | + ); |
| 60 | + var start = document.getElementById("start-input-" + type + "_" + id); |
| 61 | + var end = document.getElementById("end-input-" + type + "_" + id); |
58 | 62 |
|
59 |
| - // check if season exists in database |
60 |
| - for (let i = 0; i < data["media_seasons"].length && !exists; i++) { |
61 |
| - let media_season = data["media_seasons"][i]; |
62 |
| - if (media_season.number == selectedValue) { |
63 |
| - score.val(media_season.score); |
64 |
| - status.val(media_season.status); |
65 |
| - progress.val(media_season.progress); |
66 |
| - start.val(media_season.start_date); |
67 |
| - end.val(media_season.end_date); |
68 |
| - exists = true; |
| 63 | + select.addEventListener("change", function () { |
| 64 | + var selectedValue = select.value; |
| 65 | + |
| 66 | + if (selectedValue == "general") { |
| 67 | + score.value = data.score; |
| 68 | + status.value = data.status; |
| 69 | + progress.value = data.progress; |
| 70 | + start.value = data.start_date; |
| 71 | + end.value = data.end_date; |
| 72 | + } else { |
| 73 | + let exists = false; |
| 74 | + |
| 75 | + // check if season exists in database |
| 76 | + for ( |
| 77 | + let i = 0; |
| 78 | + i < data["media_seasons"].length && !exists; |
| 79 | + i++ |
| 80 | + ) { |
| 81 | + let media_season = data["media_seasons"][i]; |
| 82 | + if (media_season.number == selectedValue) { |
| 83 | + score.value = media_season.score; |
| 84 | + status.value = media_season.status; |
| 85 | + progress.value = media_season.progress; |
| 86 | + start.value = media_season.start_date; |
| 87 | + end.value = media_season.end_date; |
| 88 | + exists = true; |
| 89 | + } |
69 | 90 | }
|
70 |
| - } |
71 | 91 |
|
72 |
| - if (!exists) { |
73 |
| - score.val(""); |
74 |
| - status.val("Completed"); |
75 |
| - progress.val(""); |
76 |
| - start.val(""); |
77 |
| - end.val(""); |
| 92 | + if (!exists) { |
| 93 | + score.value = ""; |
| 94 | + status.value = "Completed"; |
| 95 | + progress.value = ""; |
| 96 | + start.value = ""; |
| 97 | + end.value = ""; |
| 98 | + } |
78 | 99 | }
|
| 100 | + }); |
| 101 | + } |
| 102 | + |
| 103 | + if (data.in_db) { |
| 104 | + // Add delete button if it doesn't exist |
| 105 | + if ( |
| 106 | + document.querySelectorAll( |
| 107 | + "#modal-footer-" + type + "_" + id + " .delete-btn" |
| 108 | + ).length == 0 |
| 109 | + ) { |
| 110 | + var deleteBtn = document.createElement("button"); |
| 111 | + deleteBtn.className = "btn btn-danger delete-btn"; |
| 112 | + deleteBtn.type = "submit"; |
| 113 | + deleteBtn.name = "delete"; |
| 114 | + deleteBtn.innerHTML = "Delete"; |
| 115 | + var form = document.querySelector( |
| 116 | + "#modal-footer-" + type + "_" + id + " form" |
| 117 | + ); |
| 118 | + form.appendChild(deleteBtn); |
79 | 119 | }
|
80 |
| - }); |
81 |
| - } |
82 |
| - if (data.in_db) { |
83 |
| - // Add delete button if it doesn't exist |
84 |
| - if ( |
85 |
| - $("#modal-footer-" + type + "_" + id + " .delete-btn").length == 0 |
86 |
| - ) { |
87 |
| - var deleteButton = $( |
88 |
| - '<button class="btn btn-danger delete-btn" type="submit" name="delete">Delete</button>' |
89 |
| - ); |
90 |
| - $("#modal-footer-" + type + "_" + id + " form").append(deleteButton); |
91 | 120 | }
|
| 121 | + } else { |
| 122 | + console.error("Request failed. Returned status of " + xhr.status); |
92 | 123 | }
|
93 |
| - }, |
| 124 | + }; |
| 125 | + xhr.open("GET", url); |
| 126 | + xhr.send(); |
94 | 127 | });
|
95 | 128 | });
|
0 commit comments