edit-release.js (1175B)
1 // filter out unnecessary data from request 2 const form = document.querySelector("form"); 3 form.addEventListener("htmx:config:request", function(evt) { 4 if ( 5 !evt.detail.ctx.request.action.startsWith("/release") || 6 !evt.detail.ctx.request.action.endsWith("/edit") 7 ) return; 8 evt.detail.ctx.request.body.delete("artist"); 9 }); 10 11 /** 12 * @typedef {Object} EditReleaseSong 13 * @property {number} id 14 * @property {string} title 15 * @property {number} trackNumber 16 */ 17 18 /** 19 * @param {Event} e 20 * @param {EditReleaseSong[]} items 21 * @param {number} a Current track number 22 * @param {string} b Desired track number 23 */ 24 function changeTrackOrder(e, items, a, b) { 25 if (b <= 0) return; 26 if (isNaN(b)) return; 27 28 if (items.length === 1) { 29 items[a].trackNumber = b; 30 return; 31 } 32 33 const swapTo = items.findIndex(item => item.trackNumber == b); 34 35 if (swapTo !== -1) { 36 [items[a].trackNumber, items[swapTo].trackNumber] = [items[swapTo].trackNumber, items[a].trackNumber]; 37 [items[a], items[swapTo]] = [items[swapTo], items[a]]; 38 return; 39 } 40 41 const item = items[a]; 42 item.trackNumber = b; 43 items.push(item); 44 items.splice(a, 1); 45 46 items.sort((a, b) => a.trackNumber - b.trackNumber); 47 }