From 04aa87007a2093f665488f00d73ba498097a9994 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Betn=C3=A9r?= Date: Fri, 26 May 2006 22:20:11 +0000 Subject: [PATCH] Wohohoooo, you can add songs to static playlists, thanks to a patch from jordan@snocap! --- admin-root/playlist.js | 158 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) diff --git a/admin-root/playlist.js b/admin-root/playlist.js index 74160fad..44022957 100644 --- a/admin-root/playlist.js +++ b/admin-root/playlist.js @@ -2,6 +2,154 @@ // move stuff to responsehandler // handle source change events (keyPress etc) // If playlist is empty don't confirm delete +var CustomDraggable = Class.create(); +CustomDraggable.removeOnDrop = false; +CustomDraggable.revereNamesOnDrop = true; + +CustomDraggable.prototype = (new Rico.Draggable()).extend( { + + initialize: function( htmlElement, name ) { + this.type = 'Custom'; + this.htmlElement = htmlElement; + this.name = name; + }, + + log: function(str) { +// alert(str); + }, + + select: function() { + this.selected = true; + }, + + deselect: function() { + this.selected = false; + }, + + startDrag: function() { + var el = this.htmlElement; + this.log("startDrag: [" + this.name +"]"); + }, + + cancelDrag: function() { + var el = this.htmlElement; + this.log("cancelDrag: [" + this.name +"]"); + }, + + endDrag: function() { + var el = this.htmlElement; + this.log("endDrag: [" + this.name +"]"); + if ( CustomDraggable.removeOnDrop ) + this.htmlElement.style.display = 'none'; + + }, + + getSingleObjectDragGUI: function() { + var el = this.htmlElement; + + var div = document.createElement("div"); + div.className = 'customDraggable'; + div.style.width = (this.htmlElement.offsetWidth - 10) + "px"; + new Insertion.Top( div, "some songs" ); + return div; + }, + + getMultiObjectDragGUI: function( draggables ) { + var el = this.htmlElement; + + var names = ""; + names = "some song(s)"; + + var div = document.createElement("div"); + div.className = 'customDraggable'; + div.style.width = (this.htmlElement.offsetWidth - 10) + "px"; + new Insertion.Top( div, names ); + return div; + }, + + getDroppedGUI: function() { + var el = this.htmlElement; + + var div = document.createElement("div"); + var names = this.name.split(","); + if ( CustomDraggable.revereNamesOnDrop ) + new Insertion.Top( div, "[" + names[1].substring(1) + " " + names[0]+ "]" ); + else + new Insertion.Top( div, "[" + this.name + "]" ); + return div; + }, + + toString: function() { + return this.name; + } +} ); + + +var CustomDropzone = Class.create(); +CustomDropzone.prototype = (new Rico.Dropzone()).extend( { + initialize: function( htmlElement, header) { + this.htmlElement = htmlElement; + this.header = header; + this.absoluteRect = null; + this.acceptedObjects = []; + + this.offset = navigator.userAgent.toLowerCase().indexOf("msie") >= 0 ? 0 : 1; + }, + + activate: function() { + }, + + deactivate: function() { + }, + + showHover: function() { + if ( this.showingHover ) + return; + this.header.style.color = "#1111bb"; + this.showingHover = true; + }, + + hideHover: function() { + if ( !this.showingHover ) + return; + this.header.style.color = "#000000"; + this.showingHover = false; + }, + + accept: function(draggableObjects) { + var songids = ''; + for (var i = SelectedRows.songId.length - 1; i >= 0; --i) { + if (SelectedRows.songId[i]) { + if (songids != '') { + songids += ","; + } + songids += i; + } + } + + this._insert(songids); + }, + + _insert: function(songids) { + var url = '/databases/1/containers/' + this.htmlElement.value + "/items/add?output=xml&dmap.itemid=" + songids; + new Ajax.Request(url ,{method: 'get',onComplete:this.responseAdd}); + }, + + responseAdd: function(request) { + var status = Element.textContent(request.responseXML.getElementsByTagName('dmap.status')[0]); + if ('200' != status) { + alert("Couldn't add songs to playlist"); + return; + } + alert("Added songs to playlist"); + }, + + canAccept: function(draggableObjects) { + return true; + } +} ); + + Event.observe(window,'load',initPlaylist); var SEARCH_DELAY = 500; // # ms without typing before the search box searches @@ -29,6 +177,10 @@ Ajax.Responders.register({ onCreate: Spinner.incRequestCount, // Firefox remebers the search box value on page reload Field.clear('search'); g_myLiveGrid = new Rico.LiveGrid('songs_data',20,1000,'',{prefetchBuffer: false}); + + for (var i = $('songs_data').rows.length - 1; i >= 0; --i) { + dndMgr.registerDraggable(new CustomDraggable($('songs_data').rows[i], "bob " + i)); + } } var Spinner = { count: 0, @@ -472,6 +624,12 @@ function rsSource(request) { optgroup.appendChild(Builder.node('option',{value: item.id},item.name)); }); sourceSelect.appendChild(optgroup); + + + var options = $('static_playlists').getElementsByTagName("option"); + for (var j = 0; j < options.length; j++) { + dndMgr.registerDropZone(new CustomDropzone(options[j], $('static_playlists'))); + } } // Select Library sourceSelect.value = 1;