lyrics

lyrics
git clone git://brookjeynes.dev/bjeynes/lyrics.git
Log | Files | Refs

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 }