Server/Code: Difference between revisions
Jump to navigation
Jump to search
Created page with '==main.js== <pre> →kJams Project - main.js Description: Main screen functionality. (c) 2007 kJams and David M. Cotter: var timer = null; var al…' |
No edit summary |
||
| Line 1: | Line 1: | ||
__TOC__ | |||
==main.js== | ==main.js== | ||
<pre> | <pre> | ||
Revision as of 18:07, 18 May 2010
main.js
/* kJams Project - main.js
Description: Main screen functionality.
(c) 2007 kJams and David M. Cotter */
var timer = null;
var allowBackspace = false;
var inSearch = {
on: function() {allowBackspace = true;},
off: function() {allowBackspace = false;}
}
function m_populatePlaylists() {
//Remove anything that was already there
divObj = document.getElementById("playlists");
for (var i = 0; i < divObj.childNodes.length; i++) {
divObj.removeChild(divObj.childNodes[i]);
}
list = new KJDropList();
list.create(divObj);
playlistsList = list;
getPlaylists(url_playlists, m_playlistsLoaded);
}
function m_playlistsLoaded(list) {
listCtrl = document.getElementById("playlists").childNodes[0].parent;
for (var i = 0; i < list.length; i++) {
if ((list[i]['name'] == "Library") || (list[i]['name'] == "History"))
dropTarget = false;
else
dropTarget = true;
listCtrl.addItem("p" + list[i]['id'], list[i]['name'], dropTarget, null, false);
//Library and History items are not rearrangeable
if ((list[i]['name'] == "Library") || (list[i]['name'] == "History"))
document.getElementById("p" + list[i]['id']).rearrange = false;
else
document.getElementById("p" + list[i]['id']).rearrange = true;
//Keep track of ids for 'Tonight' and 'Favorites'
if (list[i]['name'] == "Tonight") {
pTonightID = list[i]['id'];
}
if (list[i]['name'] == "Favorites") {
pFavoritesID = list[i]['id'];
}
//Store the playlist name in the DOM object
document.getElementById("p" + list[i]['id']).name = list[i]['name'];
}
listCtrl.color();
listCtrl.evtClick = m_populateSongs;
listCtrl.evtDropInto = m_playlistDrop;
}
function m_populateSongs(playlist) {
playlist = playlist.substring(1);
//Hide
if (songsList) {
songsList.hide();
if (songsList.playlist != "1") {
songsList.destroy();
}
}
//Hide "No Playlist" message, show waiting message
document.getElementById("message").style.display = 'none';
document.getElementById("msg_dosearch").style.display = 'none';
document.getElementById("msg_error").style.display = 'none';
document.getElementById("waiting").style.display = '';
//If the list is already loaded, simply display it
if ((playlist == "1") && (songsLists[playlist] != undefined)) {
songsList = songsLists[playlist];
songsList.show();
document.getElementById("waiting").style.display = 'none';
}
//If it's the library, request that user do a search first
else if (playlist == "1") {
document.getElementById("waiting").style.display = 'none';
document.getElementById("msg_dosearch").style.display = '';
}
else {
//Playlist DOM object
playlistObj = document.getElementById("p" + playlist);
//Which columns are needed?
var columns = Array("#", "Song Name", "Artist", "Album");
if (playlistObj.name == "Tonight") {
columns.push("Pitch");
columns.push("Add to");
}
else if (playlistObj.name == "Favorites") {
columns.push("Add to");
}
else {
columns.push("Add to");
columns.push("Add to");
}
songsList = new KJList();
songsList.rearrange = playlistObj.rearrange;
songsList.playlist = playlist;
songsList.playlistName = playlistObj.name;
songsList.create(document.getElementById("songs"));
songsList.setColumns(columns, 0);
songsList.evtDrop = m_songRearrange;
songsLists[playlist] = songsList;
getSongs(url_songs, m_songsLoaded, "playlist=" + playlist);
if (false) {
songsList.evtColClick = null;
}
else {
songsList.evtColClick = m_sortSongs;
}
}
m_sessionCheckin();
}
function m_songsLoaded(list) {
//Hide waiting message
document.getElementById("waiting").style.display = 'none';
//Rearrangeable?
if (songsList.rearrange)
var rearrange = true;
else
var rearrange = false;
for (var i = 0; i < list.length; i++) {
//Add to favorites
var favsButton = document.createElement("INPUT");
favsButton.type = "button"
favsButton.name = songsList.playlist + "-" + list[i]['itemId'];
favsButton.songId = list[i]['id'];
favsButton.value = "Favorites";
favsButton.onmousedown = m_addToFavorites;
//Add to Tonight
var tonightButton = document.createElement("INPUT");
tonightButton.type = "button";
tonightButton.name = songsList.playlist + "-" + list[i]['itemId'];
tonightButton.songId = list[i]['id'];
tonightButton.value = "Tonight";
tonightButton.onmousedown = m_addToTonight;
//Columns
var columns = Array(i, list[i]['name'], list[i]['artist']);
if (typeof(list[i]['album']) == "object") {
var dropDown = document.createElement("SELECT");
dropDown.name = list[i]['id'];
for (var j = 0; j < list[i]['album']['items'].length; j++) {
var optionObj = document.createElement("OPTION");
optionObj.value = list[i]['album']['items'][j];
optionObj.innerHTML = optionObj.value;
if (list[i]['album']['default'] == j) {
optionObj.selected = true;
}
dropDown.appendChild(optionObj);
}
columns.push(dropDown);
}
else {
columns.push(list[i]['album']);
}
if (songsList.playlistName == "Tonight") {
//Drop-down
var options = {"+6" : 6, "+5" : 5, "+4" : 4, "+3" : 3, "+2" : 2, "+1" : 1, "0" : 0, "-1" : -1, "-2" : -2, "-3" : -3, "-4" : -4, "-5" : -5, "-6" : -6}
var dropDown = document.createElement("SELECT");
dropDown.name = list[i]['itemId'];
dropDown.songId = list[i]['id'];
dropDown.onchange = m_changePitch;
for (option in options) {
var optionObj = document.createElement("OPTION");
optionObj.value = options[option];
optionObj.innerHTML = option;
if(list[i]['pitch'] == options[option]) {
optionObj.selected = true;
}
dropDown.appendChild(optionObj);
}
columns.push(dropDown);
columns.push(favsButton);
}
else if (songsList.playlistName == "Favorites") {
columns.push(tonightButton);
}
else {
columns.push(tonightButton);
columns.push(favsButton);
}
index = songsList.addItem(songsList.playlist + "-" + list[i]['itemId'], columns, rearrange, null, false);
document.getElementById(songsList.getByIndex(index)).songName = list[i]['name'];
document.getElementById(songsList.getByIndex(index)).songId = list[i]['id'];
document.getElementById(songsList.getByIndex(index)).piIx = list[i]['itemId'];
}
songsList.color();
if (songsList.playlistName != "Tonight" && songsList.playlistName != "History") {
songsList.evtColClick = m_sortSongs;
}
else {
songsList.evtColClick = null;
}
}
function m_songRearrange(list, song, index, oldIndex) {
sendData(url_rearrange, "playlist=" + list.playlist + "&index=" + index + "&oldIndex=" + oldIndex);
m_sessionCheckin();
}
function m_playlistDrop(song, index, nodeId) {
playlists = document.getElementById("playlists").childNodes[0].parent;
item = songsList.getByID(song);
if (songsLists[playlists.getByIndex(index).substring(1)]) { songsLists[playlists.getByIndex(index).substring(1)].destroy(); }
songsLists[playlists.getByIndex(index).substring(1)] = null;
sendData(url_drop, "playlist=" + playlists.getByIndex(index).substring(1) + "&song=" + songsList.getByID(song).songId);
m_setStatus("Added \"" + item.songName + "\" to \"" + m_getPlaylistName(playlists.getByIndex(index)) + "\" ...");
m_sessionCheckin();
}
function m_addToTonight(event) {
playlists = document.getElementById("playlists").childNodes[0].parent;
m_playlistDrop(event.target.name, playlists.getIndex("p" + pTonightID), event.target.name);
}
function m_addToFavorites(event) {
playlists = document.getElementById("playlists").childNodes[0].parent
m_playlistDrop(event.target.name, playlists.getIndex("p" + pFavoritesID), event.target.name);
}
function m_sortSongs(list, column) {
list.removeAll();
list.setPrimaryCol(column);
document.getElementById("waiting").style.display = '';
if (document.getElementById("searchfield").value) {
search = "&search=" + document.getElementById("searchfield").value;
}
getSongs(url_sort, m_songsLoaded, "playlist=" + list.playlist + "&orderby=" + column + search);
m_sessionCheckin();
}
function m_changePitch(event) {
sendData(url_pitch, "song=" + event.target.songId + "&pitch=" + event.target.value);
m_sessionCheckin();
}
function m_doSearch() {
//Remove old search list if it's there
if (songsLists["1"]) {
songsLists["1"].parentObj.removeChild(songsLists["1"].container);
songsLists["1"].parentObj.removeChild(songsLists["1"].columnsObj);
}
//Hide currently loaded list
if (songsList) {
songsList.hide();
}
document.getElementById("msg_dosearch").style.display = 'none';
document.getElementById("message").style.display = 'none';
document.getElementById("msg_error").style.display = 'none';
document.getElementById("waiting").style.display = '';
var columns = Array("#", "Song Name", "Artist", "Album", "Add to", "Add to");
songsList = new KJList();
songsList.rearrange = false;
songsList.playlist = "1";
songsList.playlistName = "Library";
songsList.create(document.getElementById("songs"));
songsList.setColumns(columns, 1);
songsLists["1"] = songsList;
getSongs(url_search, m_songsLoaded, "search=" + document.getElementById("searchfield").value);
m_sessionCheckin();
}
function searchKeyPressed(event) {
if (event.keyCode == 13) {
m_doSearch();
}
}
function m_getSongName(id) {
songObj = document.getElementById(id);
return songObj.songName;
}
function m_getPlaylistName(id) {
playlistObj = document.getElementById(id);
return playlistObj.name;
}
function kj_data_error(id, desc) {
songsLists[songsList.id] = null;
songsList.hide();
document.getElementById("waiting").style.display = 'none';
document.getElementById("msg_error").innerHTML = "Error: " + desc
document.getElementById("msg_error").style.display = '';
}
function m_setStatus(status, revert) {
statusObj = document.getElementById("status");
statusObj.innerHTML = status;
}
function trapDelete() {
var keyID = (window.event) ? event.keyCode : e.keyCode;
if (keyID==8 && !allowBackspace){
return false;
}
return true;
}
function m_keyPressed(event) {
//This is not IE-compliant code.
if (event.keyCode == 46 || event.keyCode ==8) {
if (!songsList.selection) {
return;
}
playlistName = songsList.playlistName;
if (playlistName != "Library" && playlistName != "History") {
selection = songsList.selection;
item = songsList.getByID(selection);
songsList.select(null);
sendData(url_remove, "playlist=" + songsList.playlist + "&piIx=" + item.piIx);
m_setStatus("Removed \"" + item.songName + "\" ...");
songsList.removeItem(selection);
}
}
}
function m_sessionCheckin() {
/* A true or false value is set by the server before delivering this script
depending on preference.
if (!{auto_logout}) {
return;
}
if (timer == null) {
timer = setInterval("m_sessionLogout()", {timeout} * 1000);
}
else {
clearInterval(timer);
timer = null;
return m_sessionCheckin();
}
*/
}
function m_sessionLogout() {
// window.location=url_login;
}
mainscreen.html
<html>
<head>
<title>kJams Server</title>
<script src="spry/xpath.js"></script>
<script src="spry/SpryData.js"></script>
<script src="ui.js"></script>
<script src="data.js"></script>
<script src="main.js"></script>
<script src="common.js"></script>
<style type="text/css">
#main {
padding: 10px;
margin-right: 20px;
margin-left: 20px;
border-style: solid;
border-color: #000000;
border-width: 1px;
background: url('metal.jpg');
cursor: default;
}
#title {
padding-right: 30px;
text-align: left;
font-family: Arial Black;
font-size: 24pt;
font-weight: bold;
margin-bottom: 5px;
}
#search {
width: 100%;
text-align: center;
}
#searchfield {
height: 21px;
width: 144px;
background: url('search.png');
border-width: 0px;
padding-left: 7px;
padding-right: 7px;
padding-top: 2px;
}
#left {
float: left;
width: 200px;
margin: 0px;
margin-left: 0px;
}
#status {
text-align: center;
color: #333333;
padding: 0px;
margin: 0px;
}
#playlists .KJList {
overflow: auto;
height: 240px;
padding: 0px;
background-color: #FFFFFF;
border-style: solid;
border-color: #999999;
border-width: 1px;
padding: 0px;
}
#playlists .KJList td {
padding: 0px;
margin: 0px;
}
#playlists .KJList table {
margin: 0px;
padding: 0px;
}
#photo {
padding: 3px;
width: 190px;
height: 143px;
max-height: 150px;
overflow: hidden;
margin-top: 5px;
background-color: #FFFFFF;
border-style: solid;
border-color: #999999;
border-width: 1px;
}
#songs {
/*position: relative;
z-index: 1;*/
border-style: solid/
border-color: #999999;
border-width: 1px;
margin-left: 220px;
background-color: #FFFFFF;
min-height: 400px;
background-image:url(/media/Images/kjams.jpg);
background-repeat: no-repeat;
background-position: center;
/*filter: alpha (opacity=50);
-moz-opacity:0.5;
opacity: 0.5;*/
}
#songsbackground{
positon: absolute;
z-index: 10;
min-height: 400px;
background-image:url(kjams.jpg);
background-repeat: no-repeat;
background-position: center;
filter: alpha (opacity=50);/*for those yet to get with the program*/
-moz-opacity:0.5;
opacity: 0.5;
}
#message, #waiting, #msg_dosearch, #msg_error {
/*position: relative;
z-index: 11
top: 0;
left: 0;*/
text-align: center;
font-size: 14pt;
}
#songs .KJList {
padding: 0px;
height: 400px;
overflow: auto;
<!background-color: #FFFFFF;>
}
.KJListColumn {
padding: 0px;
margin: 0px;
background: url('column-bg.jpg');
cursor: default;
}
.KJListColumn td {
border-style: solid;
border-color: #999999;
border-width: 0px;
border-right-width: 1px;
}
.KJListColumn .primary {
background: url('column-selected-bg.jpg');
}
.KJListItem, .KJListItem_alt, .KJListItem_selected, .KJListItem_drag, .KJListItem_target, .KJListItem_alt_target {
padding: 0px;
padding-top: 0px;
padding-bottom: 0px;
margin: 0px;
cursor: default;
border-style: solid;
border-color: #FFFFFF;
border-width: 0px;
border-bottom-width: 1px;
}
.KJListItem_alt {
background-color: #EEEEFF;
opacity: 0.7;
}
.KJListItem_selected {
background-color: #4444FF;
color: #FFFFFF;
}
.KJListItem_target, .KJListItem_alt_target {
border-style: solid;
border-color: #000000;
border-width: 0px;
border-top-width: 1px;
}
.KJListItem_alt_target {
background-color: #EEEEFF;
}
.KJListItem_drag {
position: absolute;
border-style: solid;
border-color: #000000;
border-width: 1px;
background-color: #DDDDDD;
filter:alpha(opacity=40); /* for IE */
-moz-opacity:0.4;
opacity: 0.4;
}
.KJList input {
padding: 0px;
margin: 0px;
border-style: solid;
border-color: #000000;
border-width: 1px;
}
.KJList input:active {
background-color: #000000;
color: #FFFFFF;
}
#playlists .KJListItem, #playlists .KJListItem_alt, #playlists .KJListItem_selected, #playlists .KJListItem_target, #playlists .KJListItem_alt_target {
background: url('playlist-icon.gif');
background-repeat: no-repeat;
padding: 0px;
padding-left: 20px;
border-style: solid;
border-color: #FFFFFF;
border-width: 3px;
}
#playlists .KJListItem_alt {
background-color: #EEEEFF;
}
#playlists .KJListItem_selected {
background-color: #4444FF;
color: #FFFFFF;
}
#playlists .KJListItem_target, #playlists .KJListItem_alt_target {
border-color: #000000;
background-color: #9999FF;
}
.clear {
clear: both;
}
</style>
</head>
<body>
<div id="main">
<table><tr><td id="title"><nobr>{singer}</nobr></td><td id="search"><nobr>Search Library: <input type="search" id="searchfield" name="search" onkeypress=searchKeyPressed(event) onblur="inSearch.off()" onfocus="inSearch.on()" /> <input type="submit" style="" name="dosearch" value="Go" onclick=m_doSearch() /></nobr></td><td id="help"><nobr>[ <a id="helplink" href="">Help</a> ] [ <a id="logoutlink" href="">Logout</a> ]</nobr></td></tr></table>
<div>
<div id="left">
<div id="playlists"></div>
<div id="photo"><img src="kjams-main.jpg" /></div>
</div>
<div id="songs"><p id="msg_error"></p><p id="msg_dosearch">Please enter a search.</p><p id="message">No Playlist Selected.</p><p id="waiting">Please wait, loading playlist...</p></div>
<div class="clear"> </div>
<div id="status">Welcome to kJams!</div>
</div>
</div>
<script language="javascript">
//Bind key press function
document.onkeyup = m_keyPressed;
//Prevent browser from seeing the Delete key press
document.onkeydown=trapDelete;
//Hide message fields
document.getElementById("waiting").style.display = 'none';
document.getElementById("msg_dosearch").style.display = 'none';
document.getElementById("msg_error").style.display = 'none';
//Plug in help and logout URLs
document.getElementById("helplink").href = url_help;
document.getElementById("logoutlink").href = url_login;
//Playlists
m_populatePlaylists();
if (0) {
//Song list
var songs = new KJList();
songs.create(document.getElementById("songs"));
songs.setColumns(Array("#", "Song Name", "Artist", "Pitch", "Add to", "Add to"), 1);
//Set clipping
songs.setClipping({'right' : songs.getColumnWidth(5) + songs.getColumnWidth(4) + songs.getColumnWidth(3)});
getSongs(url_songs, populateList, 'playlist=1');
function populateList(songList) {
for(var i = 0; i < songList.length; i++) {
songs.addItem(songList[i]['number'], Array(songList[i]['number'], songList[i]['name'], songList[i]['artist'], "<select><option>+6</option><option>+5</option><option>+4</option><option>+3</option><option>+2</option><option>+1</option><option selected>0</option><option>-1</option><option>-2</option><option>-3</option><option>-4</option><option>-5</option></select>", "<input type=\"submit\" value=\"Tonight\" />", "<input type=\"submit\" value=\"Favorites\" />"), null, null, false);
}
songs.color();
}
}
</script>
</body>
</html>