(item)
| 167 | } |
| 168 | |
| 169 | function buildTrashRow(item) { |
| 170 | const row = document.createElement("div"); |
| 171 | row.className = "restore-row"; |
| 172 | row.setAttribute("role", "option"); |
| 173 | row.setAttribute("tabindex", "0"); |
| 174 | row.dataset.trashName = item.trashName; |
| 175 | |
| 176 | const checkbox = document.createElement("input"); |
| 177 | checkbox.type = "checkbox"; |
| 178 | checkbox.value = item.trashName; |
| 179 | checkbox.className = "restore-checkbox"; |
| 180 | |
| 181 | const textWrap = document.createElement("div"); |
| 182 | textWrap.className = "restore-row-text"; |
| 183 | |
| 184 | const primary = document.createElement("div"); |
| 185 | primary.className = "restore-primary"; |
| 186 | primary.textContent = item.originalName || item.trashName; |
| 187 | |
| 188 | const meta = document.createElement("div"); |
| 189 | meta.className = "restore-meta"; |
| 190 | const deletedBy = item.deletedBy || tr("unknown_user", "Unknown"); |
| 191 | const trashedDate = item.trashedAt ? new Date(item.trashedAt * 1000).toLocaleString() : ""; |
| 192 | meta.textContent = trashedDate ? `${deletedBy} • ${trashedDate}` : deletedBy; |
| 193 | |
| 194 | textWrap.append(primary, meta); |
| 195 | row.append(checkbox, textWrap); |
| 196 | |
| 197 | checkbox.addEventListener("change", () => updateRowSelection(row, checkbox.checked)); |
| 198 | row.addEventListener("click", (e) => { |
| 199 | if (e.target === checkbox) return; |
| 200 | toggleRow(row, checkbox); |
| 201 | }); |
| 202 | row.addEventListener("keydown", (e) => { |
| 203 | if (e.key === " " || e.key === "Enter") { |
| 204 | e.preventDefault(); |
| 205 | toggleRow(row, checkbox); |
| 206 | } |
| 207 | }); |
| 208 | |
| 209 | return row; |
| 210 | } |
| 211 | |
| 212 | function renderTrashList(trashItems) { |
| 213 | const { list } = getModalElements(); |
no test coverage detected