aboutsummaryrefslogtreecommitdiffstats
path: root/frontend/js/app.js
blob: 6f58a0a3c69926e9406b1fad8b7433718739672d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
$(function() {
	//XXX: Support for old zx2c4 music query strings. Replace query string with Backbone.Router hash urls
	function qParam(name) {
		var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
		return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
	}

	var startApp = function() {
		$("#loading").fadeOut();

		var audioPlayer = new AudioPlayer($("#controls"));
		var songList = new SongList([], audioPlayer);
		var songTable = new SongTable({
			el: $(document.body),
			collection: songList
		});
		new DownloadSelector({
			el: $("#basket"),
			collection: new DownloadBasket([], { songList: songList })
		});


		var song = parseInt(qParam("play"));
		if (!isNaN(song) && song > 0) {
			songList.once("sync", function() {
				var loadSong = function() {
					if (song > songList.length)
						return;
					audioPlayer.playSong(songList.models[song - 1]);
					songTable.scrollTo(songList.models[song - 1]);
				};
				if (song > songList.length && songList.hasMore())
					songList.more({ success: loadSong, limit: songList.options.limit * Math.ceil((song - songList.length) / songList.options.limit) });
				else
					loadSong();
			});
		}
		var defaultChoices = [ "Wayne Shorter", "Bill Frisell", "Jimi Hendrix",
				       "Allan Holdsworth", "Miles Davis", "Bill Evans",
				       "Keith Jarret", "Kurt Rosenwinkel", "Gould", "Segovia",
				       "Mike Stern", "John Coltrane", "McCoy Tyner",
				       "BADBADNOTGOOD", "Charles Mingus", "Tribe Called Quest",
				       "Lord of the Rings", "Pat Metheny" ];
		$("#query").val(qParam("query") || defaultChoices[Math.floor(Math.random() * defaultChoices.length)]).change();
	};

	var startAuth = function() {
		var login = $("#login").fadeIn();
		$("#loading").fadeOut();
		login.find("input").first().focus();
		login.find("form").submit(function() {
			var username = $(this.username).val();
			var password = $(this.password).val();
			var button = login.find("button").removeClass("btn-primary");
			login.find("input").val("").removeClass("incorrect-login");
			$.ajax("login", { type: "POST", data: { "username": username, "password": password } }).success(function(response) {
				if (response.loggedin) {
					button.addClass("btn-success");
					login.fadeOut();
					startApp();
				} else {
					login.find("input").first().focus();
					login.find("input").val("").addClass("incorrect-login");
					button.addClass("btn-danger");
				}
			});
			return false;
		});
	};

	var processLogin = function(response) {
		if (response.loggedin)
			startApp();
		else
			startAuth();
	};

	if (qParam("username") && qParam("password"))
		$.ajax("login", { type: "POST", data: { "username": qParam("username"), "password": qParam("password") } }).success(processLogin);
	else
		$.ajax("login").success(processLogin);
		
});