var feedbackData;
function getSpotifyInfo(title, cb, artist) {
var q = "";
q = title;
if (artist !== undefined) {
q += " artist:" + artist;
}
$.ajax({
type: "GET",
url: 'https://api.spotify.com/v1/search?q=' + encodeURIComponent(q) + '&type=track',
applicationType: "application/json",
contentType: "json",
success: function (data) {
cb(data);
}
});
}
function executeCommand(command, params){
if (command === "help" || command === "commands") {
$('#helpModal').modal('show');
return true;
} else if (command === "volume") {
if (params.length === 1) {
var volume = Number(params[0]);
if (volume >= 0 || volume <= 100) {
if (volume === 0) {
$("#volume-icon").removeClass("fa-volume-down").addClass("fa-volume-off")
} else {
$("#volume-icon").removeClass("fa-volume-off").addClass("fa-volume-down")
}
$("#volume-slider").slider("setValue", volume);
if (YTPlayer !== undefined) {
YTPlayer.setVolume(volume);
localStorage.setItem("volume", volume);
}
return true;
}
}
} else if(command === "mute"){
$("#volume-slider").slider("setValue", 0);
$("#volume-icon").removeClass("fa-volume-down").addClass("fa-volume-off");
if (YTPlayer !== undefined) {
YTPlayer.setVolume(0);
localStorage.setItem("volume", 0);
}
} else if(command === "ban"){
var user = params[0];
var time = params[1];
var reason = params[2];
Meteor.call("banUser", user, time, reason, function(err, res){
if(err){
console.log(err);
}
});
} else if(command === "silence"){
var user = params[0];
var time = params[1];
Meteor.call("muteUser", user, time, function(err, res){
if(err){
console.log(err);
}
});
} else if(command === "unban"){
var user = params[0];
Meteor.call("unbanUser", user, function(err, res){
if(err){
console.log(err);
}
});
} else if(command === "unsilence"){
var user = params[0];
Meteor.call("unsilenceUser", user, function(err, res){
if(err){
console.log(err);
}
});
} else if(command === "pause"){
Meteor.call("pauseRoom", Session.get("type"), function(err, res){
if(err){
console.log(err);
}
});
} else if(command === "resume"){
Meteor.call("resumeRoom", Session.get("type"), function(err, res){
if(err){
console.log(err);
}
});
} else if(command === "shuffle"){
Meteor.call("shufflePlaylist", Session.get("type"), function(err, res){
if(err){
console.log(err);
}
});
} else if(command === "skip"){
Meteor.call("skipSong", Session.get("type"), function(err, res){
if(err){
console.log(err);
}
});
}
}
function sendMessage() {
var message = $("#chat-input").val();
if (!$("#chat-input").hasClass("disabled")) {
if (message.length > 0 && message[0] !== " ") {
if (message[0] === "/") {
message = message.split("");
message.shift();
message = message.join("");
var params = message.split(" ");
params = params.map(function(param) {
return param.replace(/\r?\n|\r/g, "");
});
var command = params.shift();
command = command.replace(/\r?\n|\r/g, "");
if (executeCommand(command, params)) {
$("#chat-input").val("");
} else {
$("#chat-input").val("");
}
} else {
$("#chat-input").addClass("disabled");
$("#chat-input").attr("disabled", "");
Meteor.call("sendMessage", Session.get("type"), message, function (err, res) {
if(err){
$("#chat-input").val("");
$("#chat-input").removeAttr("disabled");
$("#chat-input").removeClass("disabled");
}
if (res) {
$("#chat-input").val("");
$("#chat-input").removeAttr("disabled");
$("#chat-input").removeClass("disabled");
}
});
}
}
}
}
function sendMessageGlobal() {
var message = $("#global-chat-input").val();
if (!$("#global-chat-input").hasClass("disabled")) {
if (message.length > 0 && message[0] !== " ") {
if (message[0] === "/") {
message = message.split("");
message.shift();
message = message.join("");
var params = message.split(" ");
var command = params.shift();
command = command.replace(/\r?\n|\r/g, "");
if (executeCommand(command, params)) {
$("#global-chat-input").val("");
} else {
$("#global-chat-input").val("");
}
} else {
$("#global-chat-input").addClass("disabled");
$("#global-chat-input").attr("disabled", "");
Meteor.call("sendMessage", "global", message, function (err, res) {
if (res) {
$("#global-chat-input").val("");
}
$("#global-chat-input").removeClass("disabled");
$("#global-chat-input").removeAttr("disabled");
});
}
}
}
}
Template.admin.events({
"click #croom_create": function() {
Meteor.call("createRoom", $("#croom_display").val(), $("#croom_tag").val(), function (err, res) {
if (err) {
alert("Error " + err.error + ": " + err.reason);
} else {
window.location = "/" + $("#croom_tag").val();
}
});
},
"click a": function(e){
var id = e.currentTarget.id;
console.log(id.toLowerCase());
Session.set("playlistToEdit", id);
},
"click #croom_create": function() {
Meteor.call("createRoom", $("#croom_display").val(), $("#croom_tag").val(), $("#two").prop("checked"), function (err, res) {
if (err) {
alert("Error " + err.error + ": " + err.reason);
} else {
window.location = "/" + $("#croom_tag").val();
}
});
},
"click #rreset_confirm": function(){
$('#confirmModal').modal('hide');
Meteor.call("resetRating");
},
"click #edit_desc": function(){
console.log($(this));
console.log($(this)[0].type);
Session.set("roomDesc", $(this)[0].type);
$("#desc_text").val(Rooms.findOne({type: Session.get("roomDesc")}).roomDesc);
},
"click #submit_desc": function(){
var description = $("#desc_text").val();
Meteor.call("editRoomDesc", Session.get("roomDesc"), description);
$("#desc-modal").closeModal();
}
});
Template.alertsDashboard.events({
"click #calart-create": function() {
Meteor.call("addAlert", $("#calert-description").val(), $("#calert-priority").val().toLowerCase(), function (err, res) {
if (err) {
alert("Error " + err.error + ": " + err.reason);
} else {
$("#calert-description").val("");
}
});
},
"click #ralert-button": function() {
Meteor.call("removeAlerts");
}
});
Template.feedback.events({
"click #feedback_submit": function(){
if($("#feedback_message").val().length !== 0){
Meteor.call("sendFeedback", $("#feedback_message").val());
$("#feedback_message").val("");
$("#modal1").closeModal()
}
},
"click .upvote": function(){
var message = $(this).parent("card").prevObject[0].message;
Meteor.call("upvoteFeedback", message);
},
"click #delete": function(){
var message = $(this).parent("card").prevObject[0].message;
Meteor.call("deleteFeedback", message);
},
"click #edit": function(){
$("#editModal").click()
var data = Feedback.findOne({"message": $(this).parent("card").prevObject[0].message});
feedbackData = data.message;
$("#edit_feedback_message").val(data.message);
},
"click #edit_feedback_submit": function(){
var oldMessage = feedbackData;
var newMessage = $("#edit_feedback_message").val()
$("#edit_feedback_message").val("")
Meteor.call("updateFeedback", oldMessage, newMessage);
$("#editFeedback").closeModal();
}
});
Template.header.events({
"click .logout": function(e){
e.preventDefault();
Meteor.logout();
if (hpSound !== undefined) {
hpSound.stop();
}
},
"click #profile": function(){
window.location = "/u/" + Meteor.user().profile.username;
}
});
Template.login.events({
"submit form": function(e){
e.preventDefault();
Session.set("github", false);
var username = $("#username").val()
var password = $("#password").val();
Meteor.loginWithPassword(username, password, function(err) {
if (err) {
var errAlert = $('
Oh Snap! ' + err.reason + '
');
$(".landing").before(errAlert);
Meteor.setTimeout(function() {
errAlert.fadeOut(5000, function() {
errAlert.remove();
});
}, 5000);
} else {
window.location.href = "/";
}
});
},
"click #github-login": function(){
Meteor.loginWithGithub({loginStyle: "redirect"}, function(err, res) {
console.log(err, res);
});
}
});
Template.playlist.events({
"keyup #search-playlist": function(){
if($("#search-playlist").val().length === 0){
$(".pl-item").show();
} else {
$(".pl-item").hide();
var input = $("#search-playlist").val().toLowerCase();
$(".pl-item strong").each(function(i, el){
if($(el).text().toLowerCase().indexOf(input) !== -1){
$(el).parent(".pl-item").show();
}
})
$(".pl-item #pl-artist").each(function(i, el){
if($(el).text().toLowerCase().indexOf(input) !== -1){
$(el).parent(".pl-item").show();
}
})
}
},
"click #pl-item": function(){
console.log($(this).text());
}
});
Template.profile.events({
//Edit real name
"click #edit-name": function(){
$("#name").hide();
$("#name-div").show();
$("#edit-name").hide();
$("#cancel-edit").show();
},
"click #submit-name": function(){
var user = Meteor.user();
$("#name").show();
$("#name-div").hide();
$("#edit-name").show();
$("#cancel-edit").hide();
var realname = $("#input-name").val();
var username = user.profile.username;
$("#name").text("Name: " + realname);
$("#input-name").val("")
Meteor.call("updateRealName", realname);
},
"click #cancel-edit": function(){
$("#name").show();
$("#name-div").hide();
$("#edit-name").show();
$("#cancel-edit").hide();
$("#input-name").val("");
},
//Edit username
"click #edit-username": function(){
$("#username").hide();
$("#username-div").show();
$("#edit-username").hide();
$("#cancel-username").show();
},
"click #submit-username": function(){
var user = Meteor.user()
$("#username").show();
$("#username-div").hide();
$("#edit-username").show();
$("#cancel-username").hide();
var username = user.username;
var newUserName = $("#input-username").val();
$("#profile-name").text(newUserName)
$("#username").text("Username: " + newUserName);
$("#input-username").val("")
Meteor.call("updateUserName", newUserName);
window.location = "/u/" + newUserName;
},
"click #cancel-username": function(){
$("#username").show();
$("#username-div").hide();
$("#edit-username").show();
$("#cancel-username").hide();
$("#input-username").val("");
},
// Admins only Edit Rank
"click #edit-rank": function() {
$("#rank").hide();
$("#rank-div").show();
$("#edit-rank").hide();
$("#cancel-rank").show();
},
"click #submit-rank": function() {
$("#rank").show();
$("#rank-div").hide();
$("#edit-rank").show();
$("#cancel-rank").hide();
var newRank = $("#select-rank option:selected").val();
var username = Session.get("username");
console.log(username, newRank);
},
"click #cancel-rank": function() {
$("#rank").show();
$("#rank-div").hide();
$("#edit-rank").show();
$("#cancel-rank").hide();
}
});
var seekerBarInterval = undefined;
Template.queues.events({
/* TODO Add undo delete button */
"input #id": function() {
console.log("Change!");
$("#previewPlayerContainer").addClass("hide-preview");
},
"input #img": function() {
var url = $("#img").val();
console.log(url);
Session.set("image_url", url);
},
"click .preview-button": function(e){
Session.set("song", this);
$("#previewModal").openModal();
},
"click #previewImageButton": function() {
$("#preview-image").attr("src", Session.get("song").img);
},
"click .edit-queue-button": function(e){
Session.set("song", this);
Session.set("genre", $(e.target).data("genre"));
Session.set("type", "queue");
$("#mid").val(this.mid).change();
$("#artist").val(this.artist).change();
$("#title").val(this.title).change();
$("#img").val(this.img).change();
$("#id").val(this.id).change();
$("#likes").val(this.likes).change();
$("#dislikes").val(this.dislikes).change();
$("#duration").val(this.duration).change();
$("#skip-duration").val(this.skipDuration).change();
$("#previewPlayerContainer").addClass("hide-preview");
Session.set("image_url", this.img);
Session.set("editing", true);
$("#editModal").openModal({
complete : function() {
Session.set("editing", false);
if (YTPlayer !== undefined && YTPlayer.stopVideo !== undefined) {
YTPlayer.stopVideo();
}
}
});
},
"click .add-song-button": function(e){
var genre = $(e.target).data("genre") || $(e.target).parent().data("genre");
Meteor.call("addSongToPlaylist", genre, this, function(err) {
console.log(err);
if (err) {
var $toastContent = $('Song not added. ' + err.reason + '');
Materialize.toast($toastContent, 8000);
}
});
},
"click .deny-song-button": function(e){
var genre = $(e.target).data("genre") || $(e.target).parent().data("genre");
Meteor.call("removeSongFromQueue", genre, this.mid);
},
"click #play": function() {
var duration = Session.get("song").duration;
var d = moment.duration(parseInt(duration), 'seconds');
$("#time-total").text(d.minutes() + ":" + ("0" + d.seconds()).slice(-2));
$("#previewPlayerContainer").removeClass("hide-preview");
var song = Session.get("song");
var id = song.id;
var volume = localStorage.getItem("volume") || 20;
if (song.duration !== 0) {
$("#play").attr("disabled", true);
$("#stop").attr("disabled", false);
$("#pause").attr("disabled", false);
$("#forward").attr("disabled", false);
if (YTPlayer === undefined) {
YTPlayer = new YT.Player("previewPlayer", {
height: 540,
width: 568,
videoId: id,
playerVars: {autoplay: 1, controls: 0, iv_load_policy: 3, showinfo: 0, fs: 0},
events: {
'onReady': function(event) {
event.target.seekTo(Number(song.skipDuration));
event.target.playVideo();
event.target.setVolume(volume);
},
'onStateChange': function(event){
if (event.data == YT.PlayerState.PAUSED) {
if (seekerBarInterval !== undefined) {
Meteor.clearInterval(seekerBarInterval);
seekerBarInterval = undefined;
}
}
if (event.data == YT.PlayerState.UNSTARTED) {
if (seekerBarInterval !== undefined) {
Meteor.clearInterval(seekerBarInterval);
seekerBarInterval = undefined;
}
$(".seeker-bar").css({width: "0"});
$("#time-elapsed").text("0:00");
$("#previewPlayerContainer").addClass("hide-preview");
}
if (event.data == YT.PlayerState.PLAYING) {
seekerBarInterval = Meteor.setInterval(function() {
var duration = Session.get("song").duration;
var timeElapsed = YTPlayer.getCurrentTime();
var skipDuration = Session.get("song").skipDuration;
if (duration <= (timeElapsed - skipDuration)) {
YTPlayer.stopVideo();
$("#play").attr("disabled", false);
$("#stop").attr("disabled", true);
$("#pause").attr("disabled", true);
$("#forward").attr("disabled", true);
$("#previewPlayerContainer").addClass("hide-preview");
$(".seeker-bar").css({width: "0"});
$("#time-elapsed").text("0:00");
Meteor.clearInterval(seekerBarInterval);
} else {
var percentComplete = (timeElapsed - skipDuration) / duration * 100;
$(".seeker-bar").css({width: percentComplete + "%"});
var d = moment.duration(timeElapsed - skipDuration, 'seconds');
$("#time-elapsed").text(d.minutes() + ":" + ("0" + d.seconds()).slice(-2));
}
}, 100);
$("#play").attr("disabled", true);
$("#stop").attr("disabled", false);
$("#pause").attr("disabled", false);
$("#forward").attr("disabled", false);
} else {
$("#play").attr("disabled", false);
$("#stop").attr("disabled", true);
$("#pause").attr("disabled", true);
$("#forward").attr("disabled", true);
}
}
}
});
} else {
if (YTPlayer.getPlayerState() === 2) {
YTPlayer.playVideo();
} else {
console.log(id, song.skipDuration, song.duration);
YTPlayer.loadVideoById(id);
YTPlayer.seekTo(Number(song.skipDuration));
}
}
$("#previewPlayerContainer").removeClass("hide-preview");
}
},
"click #stop": function() {
$("#play").attr("disabled", false);
$("#stop").attr("disabled", true);
$("#pause").attr("disabled", true);
$("#forward").attr("disabled", true);
if (previewEndSongTimeout !== undefined) {
Meteor.clearTimeout(previewEndSongTimeout);
}
if (YTPlayer !== undefined && YTPlayer.stopVideo !== undefined) {
YTPlayer.stopVideo();
}
},
"click #pause": function() {
$("#play").attr("disabled", false);
$("#stop").attr("disabled", false);
$("#pause").attr("disabled", true);
$("#forward").attr("disabled", true);
if (previewEndSongTimeout !== undefined) {
Meteor.clearTimeout(previewEndSongTimeout);
}
if (YTPlayer !== undefined && YTPlayer.pauseVideo !== undefined) {
YTPlayer.pauseVideo();
}
},
"click #forward": function() {
var error = false;
if (YTPlayer !== undefined) {
var duration = Number(Session.get("song").duration) | 0;
var skipDuration = Number(Session.get("song").skipDuration) | 0;
if (YTPlayer.getDuration() < duration + skipDuration) {
var $toastContent = $('Error. The song duration is longer than the length of the video.');
Materialize.toast($toastContent, 8000);
error = true;
} else {
YTPlayer.seekTo(skipDuration + duration - 10);
}
}
if (!error) {
if (previewEndSongTimeout !== undefined) {
Meteor.clearTimeout(previewEndSongTimeout);
}
previewEndSongTimeout = Meteor.setTimeout(function() {
if (YTPlayer !== undefined) {
YTPlayer.stopVideo();
}
$("#play").attr("disabled", false);
$("#stop").attr("disabled", true);
$("#pause").attr("disabled", true);
$("#forward").attr("disabled", true);
$("#previewPlayerContainer").addClass("hide-preview");
}, 10000);
}
},
"click #get-spotify-info": function() {
var search = $("#title").val();
var artistName = $("#artist").val();
getSpotifyInfo(search, function(data) {
for(var i in data){
for(var j in data[i].items){
if(search.indexOf(data[i].items[j].name) !== -1 && artistName.indexOf(data[i].items[j].artists[0].name) !== -1){
$("#img").val(data[i].items[j].album.images[2].url).change();
$("#duration").val(data[i].items[j].duration_ms / 1000).change();
return;
}
}
}
}, artistName);
},
"click #save-song-button": function() {
var newSong = {};
newSong.mid = $("#mid").val();
newSong.id = $("#id").val();
newSong.likes = Number($("#likes").val());
newSong.dislikes = Number($("#dislikes").val());
newSong.title = $("#title").val();
newSong.artist = $("#artist").val();
newSong.img = $("#img").val();
newSong.duration = Number($("#duration").val());
newSong.skipDuration = $("#skip-duration").val();
newSong.requestedBy = Session.get("song").requestedBy;
if(newSong.skipDuration === undefined){
newSong.skipDuration = 0;
}
Meteor.call("updateQueueSong", Session.get("genre"), Session.get("song"), newSong, function(err, res) {
console.log(err, res);
if (err) {
var $toastContent = $('Song not saved. ' + err.reason + '');
Materialize.toast($toastContent, 8000);
} else {
Session.set("song", newSong);
}
});
}
});
Template.manageStation.events({
/* TODO Add undo delete button */
"input #id": function() {
$("#previewPlayerContainer").addClass("hide-preview");
},
"input #img": function() {
var url = $("#img").val();
Session.set("image_url", url);
},
"click .preview-button": function(e){
Session.set("song", this);
$("#previewModal").openModal();
},
"click #previewImageButton": function() {
$("#preview-image").attr("src", Session.get("song").img);
},
"click .edit-song-button": function(e){
Session.set("song", this);
Session.set("genre", $(e.target).data("genre"));
$("#mid").val(this.mid).change();
$("#artist").val(this.artist).change();
$("#title").val(this.title).change();
$("#img").val(this.img).change();
$("#id").val(this.id).change();
$("#likes").val(this.likes).change();
$("#dislikes").val(this.dislikes).change();
$("#duration").val(this.duration).change();
$("#skip-duration").val(this.skipDuration).change();
$("#previewPlayerContainer").addClass("hide-preview");
Session.set("image_url", this.img);
Session.set("editing", true);
$("#editModal").openModal({
complete : function() {
Session.set("editing", false);
if (YTPlayer !== undefined && YTPlayer.stopVideo !== undefined) {
YTPlayer.stopVideo();
}
}
});
},
"click .remove-song-button": function(e){
var genre = $(e.target).data("genre") || $(e.target).parent().data("genre");
Meteor.call("removeSongFromPlaylist", genre, this.mid);
},
"click #play": function() {
var duration = Session.get("song").duration;
var d = moment.duration(parseInt(duration), 'seconds');
$("#time-total").text(d.minutes() + ":" + ("0" + d.seconds()).slice(-2));
$("#previewPlayerContainer").removeClass("hide-preview");
var song = Session.get("song");
var id = song.id;
var volume = localStorage.getItem("volume") || 20;
if (song.duration !== 0) {
$("#play").attr("disabled", true);
$("#stop").attr("disabled", false);
$("#pause").attr("disabled", false);
$("#forward").attr("disabled", false);
if (YTPlayer === undefined) {
YTPlayer = new YT.Player("previewPlayer", {
height: 540,
width: 568,
videoId: id,
playerVars: {autoplay: 1, controls: 0, iv_load_policy: 3, showinfo: 0, fs: 0},
events: {
'onReady': function(event) {
event.target.seekTo(Number(song.skipDuration));
event.target.playVideo();
event.target.setVolume(volume);
},
'onStateChange': function(event){
if (event.data == YT.PlayerState.PAUSED) {
if (seekerBarInterval !== undefined) {
Meteor.clearInterval(seekerBarInterval);
seekerBarInterval = undefined;
}
}
if (event.data == YT.PlayerState.UNSTARTED) {
if (seekerBarInterval !== undefined) {
Meteor.clearInterval(seekerBarInterval);
seekerBarInterval = undefined;
}
$(".seeker-bar").css({width: "0"});
$("#time-elapsed").text("0:00");
$("#previewPlayerContainer").addClass("hide-preview");
}
if (event.data == YT.PlayerState.PLAYING) {
seekerBarInterval = Meteor.setInterval(function() {
var duration = Session.get("song").duration;
var timeElapsed = YTPlayer.getCurrentTime();
var skipDuration = Session.get("song").skipDuration;
if (duration <= (timeElapsed - skipDuration)) {
YTPlayer.stopVideo();
$("#play").attr("disabled", false);
$("#stop").attr("disabled", true);
$("#pause").attr("disabled", true);
$("#forward").attr("disabled", true);
$("#previewPlayerContainer").addClass("hide-preview");
$(".seeker-bar").css({width: "0"});
$("#time-elapsed").text("0:00");
Meteor.clearInterval(seekerBarInterval);
} else {
var percentComplete = (timeElapsed - skipDuration) / duration * 100;
$(".seeker-bar").css({width: percentComplete + "%"});
var d = moment.duration(timeElapsed - skipDuration, 'seconds');
$("#time-elapsed").text(d.minutes() + ":" + ("0" + d.seconds()).slice(-2));
}
}, 100);
$("#play").attr("disabled", true);
$("#stop").attr("disabled", false);
$("#pause").attr("disabled", false);
$("#forward").attr("disabled", false);
} else {
$("#play").attr("disabled", false);
$("#stop").attr("disabled", true);
$("#pause").attr("disabled", true);
$("#forward").attr("disabled", true);
}
}
}
});
} else {
if (YTPlayer.getPlayerState() === 2) {
YTPlayer.playVideo();
} else {
console.log(id, song.skipDuration, song.duration);
YTPlayer.loadVideoById(id);
YTPlayer.seekTo(Number(song.skipDuration));
}
}
$("#previewPlayerContainer").removeClass("hide-preview");
}
},
"click #stop": function() {
$("#play").attr("disabled", false);
$("#stop").attr("disabled", true);
$("#pause").attr("disabled", true);
$("#forward").attr("disabled", true);
if (previewEndSongTimeout !== undefined) {
Meteor.clearTimeout(previewEndSongTimeout);
}
if (YTPlayer !== undefined && YTPlayer.stopVideo !== undefined) {
YTPlayer.stopVideo();
}
},
"click #pause": function() {
$("#play").attr("disabled", false);
$("#stop").attr("disabled", false);
$("#pause").attr("disabled", true);
$("#forward").attr("disabled", true);
if (previewEndSongTimeout !== undefined) {
Meteor.clearTimeout(previewEndSongTimeout);
}
if (YTPlayer !== undefined && YTPlayer.pauseVideo !== undefined) {
YTPlayer.pauseVideo();
}
},
"click #forward": function() {
var error = false;
if (YTPlayer !== undefined) {
var duration = Number(Session.get("song").duration) | 0;
var skipDuration = Number(Session.get("song").skipDuration) | 0;
if (YTPlayer.getDuration() < duration + skipDuration) {
var $toastContent = $('Error. The song duration is longer than the length of the video.');
Materialize.toast($toastContent, 8000);
error = true;
} else {
YTPlayer.seekTo(skipDuration + duration - 10);
}
}
if (!error) {
if (previewEndSongTimeout !== undefined) {
Meteor.clearTimeout(previewEndSongTimeout);
}
previewEndSongTimeout = Meteor.setTimeout(function() {
if (YTPlayer !== undefined) {
YTPlayer.stopVideo();
}
$("#play").attr("disabled", false);
$("#stop").attr("disabled", true);
$("#pause").attr("disabled", true);
$("#forward").attr("disabled", true);
$("#previewPlayerContainer").addClass("hide-preview");
}, 10000);
}
},
"click #get-spotify-info": function() {
var search = $("#title").val();
var artistName = $("#artist").val();
getSpotifyInfo(search, function(data) {
for(var i in data){
for(var j in data[i].items){
if(search.indexOf(data[i].items[j].name) !== -1 && artistName.indexOf(data[i].items[j].artists[0].name) !== -1){
$("#img").val(data[i].items[j].album.images[2].url).change();
$("#duration").val(data[i].items[j].duration_ms / 1000).change();
return;
}
}
}
}, artistName);
},
"click #save-song-button": function() {
var newSong = {};
newSong.mid = $("#mid").val();
newSong.id = $("#id").val();
newSong.likes = Number($("#likes").val());
newSong.dislikes = Number($("#dislikes").val());
newSong.title = $("#title").val();
newSong.artist = $("#artist").val();
newSong.img = $("#img").val();
newSong.duration = Number($("#duration").val());
newSong.skipDuration = $("#skip-duration").val();
newSong.requestedBy = Session.get("song").requestedBy;
Meteor.call("updatePlaylistSong", Session.get("genre"), Session.get("song"), newSong, function(err, res) {
console.log(err, res);
if (err) {
var $toastContent = $('Song not saved. ' + err.reason + '');
Materialize.toast($toastContent, 8000);
} else {
Session.set("song", newSong);
}
});
}
});
Template.register.events({
"submit form": function(e){
e.preventDefault();
var username = $("#username").val()
var email = $("#email").val()
var password = $("#password").val();
var captchaData = grecaptcha.getResponse();
console.log(captchaData)
Meteor.call("createUserMethod", {username: username, email: email, password: password}, captchaData, function(err, res) {
grecaptcha.reset();
if (err) {
console.log(err);
var errAlert = $('Oh Snap! ' + err.reason + '
');
$(".landing").before(errAlert);
Meteor.setTimeout(function() {
errAlert.fadeOut(5000, function() {
errAlert.remove();
});
}, 5000);
} else {
Meteor.loginWithPassword(username, password);
Accounts.onLogin(function(){
window.location.href = "/";
})
}
});
},
"click #github-login": function(){
Meteor.loginWithGithub({loginStyle: "redirect"}, function(err, res) {
console.log(err, res);
});
}
});
Template.room.events({
"click #youtube-playlist-button": function () {
if (!Session.get("importingPlaylist")) {
var playlist_link = $("#youtube-playlist-input").val();
var playlist_id = gup("list", playlist_link);
var ytImportQueue = [];
var totalVideos = 0;
var videosInvalid = 0;
var videosInQueue = 0;
var videosInPlaylist = 0;
var ranOnce = false;
Session.set("importingPlaylist", true);
$("#youtube-playlist-button").attr("disabled", "");
$("#youtube-playlist-button").addClass("disabled");
$("#youtube-playlist-input").attr("disabled", "");
$("#youtube-playlist-input").addClass("disabled");
$("#playlist-import-queue").empty();
$("#playlist-import-queue").hide();
$("#add-youtube-playlist").addClass("hidden-2");
$("#import-progress").attr("aria-valuenow", 0);
$("#import-progress").css({width: "0%"});
$("#import-progress").text("0%");
function makeAPICall(playlist_id, nextPageToken) {
if (nextPageToken !== undefined) {
nextPageToken = "&pageToken=" + nextPageToken;
} else {
nextPageToken = "";
}
$.ajax({
type: "GET",
url: "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=50&playlistId=" + playlist_id + nextPageToken + "&key=AIzaSyAgBdacEWrHCHVPPM4k-AFM7uXg-Q__YXY",
applicationType: "application/json",
contentType: "json",
success: function (data) {
if (!ranOnce) {
ranOnce = true;
totalVideos = data.pageInfo.totalResults;
}
var nextToken = data.nextPageToken;
for (var i in data.items) {
var item = data.items[i];
if (item.snippet.thumbnails !== undefined) {
var genre = Session.get("type");
if (Playlists.find({
type: genre,
"songs.id": item.snippet.resourceId.videoId
}, {songs: {$elemMatch: {id: item.snippet.resourceId.videoId}}}).count() !== 0) {
videosInPlaylist++;
} else if (Queues.find({
type: genre,
"songs.id": item.snippet.resourceId.videoId
}, {songs: {$elemMatch: {id: item.snippet.resourceId.videoId}}}).count() !== 0) {
videosInQueue++;
} else {
$("#playlist-import-queue").append(
"" +
"

" +
"
" +
"" + item.snippet.title + "" +
"" + item.snippet.channelTitle + "" +
"
" +
"
" +
"
"
);
var percentage = ytImportQueue.length / (totalVideos - videosInvalid) * 100;
$("#import-progress").attr("aria-valuenow", percentage.toFixed(2));
$("#import-progress").css({width: percentage + "%"});
$("#import-progress").text(percentage.toFixed(1) + "%");
ytImportQueue.push({
title: item.snippet.title,
id: item.snippet.resourceId.videoId
});
}
} else {
videosInvalid++;
}
}
if (nextToken !== undefined) {
makeAPICall(playlist_id, nextToken);
} else {
$("#playlist-import-queue > div > i").click(function () {
var title = $(this).parent().find("div > .song-result-title").text();
for (var i in ytImportQueue) {
if (ytImportQueue[i].title === title) {
ytImportQueue.splice(i, 1);
}
}
$(this).parent().remove();
Session.set("YTImportQueue", ytImportQueue);
});
Session.set("importingPlaylist", false);
$("#import-progress").attr("aria-valuenow", 100);
$("#import-progress").css({width: "100%"});
$("#import-progress").text("100%");
$("#youtube-playlist-button").removeAttr("disabled");
$("#youtube-playlist-button").removeClass("disabled");
$("#youtube-playlist-input").removeAttr("disabled");
$("#youtube-playlist-input").removeClass("disabled");
$("#playlist-import-queue").show();
$("#add-youtube-playlist").removeClass("hidden-2");
Session.set("YTImportQueue", ytImportQueue);
}
}
})
}
makeAPICall(playlist_id);
}
},
"click #add-youtube-playlist": function () {
var YTImportQueue = Session.get("YTImportQueue");
$("#youtube-playlist-button").attr("disabled", "");
$("#youtube-playlist-button").addClass("disabled");
$("#youtube-playlist-input").attr("disabled", "");
$("#youtube-playlist-input").addClass("disabled");
$("#import-progress").attr("aria-valuenow", 0);
$("#import-progress").css({width: "0%"});
$("#import-progress").text("0%");
var failed = 0;
var success = 0;
var processed = 0;
var total = YTImportQueue.length;
YTImportQueue.forEach(function (song) {
var songData = {type: "YouTube", id: song.id, title: song.title, artist: "", img: ""};
Meteor.call("addSongToQueue", Session.get("type"), songData, function (err, res) {
if (err) {
console.log(err);
failed++;
} else {
success++;
}
processed++;
var percentage = processed / total * 100;
$("#import-progress").attr("aria-valuenow", percentage.toFixed(2));
$("#import-progress").css({width: percentage + "%"});
$("#import-progress").text(percentage.toFixed(1) + "%");
});
});
},
"click #chat-tab": function () {
$("#chat-tab").removeClass("unread-messages");
},
"click #global-chat-tab": function () {
$("#global-chat-tab").removeClass("unread-messages");
},
"click #sync": function () {
if (Session.get("currentSong") !== undefined) {
var room = Rooms.findOne({type: Session.get("type")});
if (room !== undefined) {
var timeIn = Date.now() - Session.get("currentSong").started - room.timePaused;
var skipDuration = Number(Session.get("currentSong").skipDuration) | 0;
if (YTPlayer !== undefined) {
YTPlayer.seekTo(skipDuration + timeIn / 1000);
}
}
}
},
"click #lock": function () {
Meteor.call("lockRoom", Session.get("type"));
},
"click #unlock": function () {
Meteor.call("unlockRoom", Session.get("type"));
},
"click #chat-tab": function (e) {
Meteor.setTimeout(function () {
$("#chat-ul").scrollTop(100000);
}, 1);
},
"click #global-chat-tab": function (e) {
Meteor.setTimeout(function () {
$("#global-chat-ul").scrollTop(100000);
}, 1);
},
"click #submit": function () {
sendMessage();
Meteor.setTimeout(function () {
$("#chat-ul").scrollTop(100000);
}, 1000)
},
"click #global-submit": function () {
sendMessageGlobal();
Meteor.setTimeout(function () {
$("#global-chat-ul").scrollTop(100000);
}, 1000)
},
"keyup #chat-input": function (e) {
if (e.type === "keyup" && e.which === 13) {
e.preventDefault();
if (!$('#chat-input').data('dropdownshown')) {
sendMessage();
Meteor.setTimeout(function () {
$("#chat-ul").scrollTop(100000);
}, 1000)
}
}
},
"keyup #global-chat-input": function (e) {
if (e.type === "keyup" && e.which === 13) {
e.preventDefault();
if (!$('#global-chat-input').data('dropdownshown')) {
sendMessageGlobal();
Meteor.setTimeout(function () {
$("#global-chat-ul").scrollTop(100000);
}, 1000)
}
}
},
"click #like": function (e) {
$("#like").blur();
Meteor.call("likeSong", Session.get("currentSong").mid);
},
"click #dislike": function (e) {
$("#dislike").blur();
Meteor.call("dislikeSong", Session.get("currentSong").mid);
},
"click #vote-skip": function () {
Meteor.call("voteSkip", type, function (err, res) {
$("#vote-skip").attr("disabled", true);
});
},
"click #report-prev": function (e) {
if (Session.get("previousSong") !== undefined) {
Session.set("reportPrevious", true);
$("#report-prev").prop("disabled", true);
$("#report-curr").prop("disabled", false);
}
},
"click #report-curr": function (e) {
Session.set("reportPrevious", false);
$("#report-prev").prop("disabled", false);
$("#report-curr").prop("disabled", true);
},
"click #report-modal": function () {
Session.set("currentSongR", Session.get("currentSong"));
Session.set("previousSongR", Session.get("previousSong"));
},
"click #add-song-button": function (e) {
e.preventDefault();
parts = location.href.split('/');
var roomType = parts.pop();
var genre = roomType.toLowerCase();
var type = $("#type").val();
id = $("#id").val();
var title = $("#title").val();
var artist = $("#artist").val();
var img = $("#img").val();
var songData = {type: type, id: id, title: title, artist: artist, img: img};
if (Playlists.find({
type: genre,
"songs.id": songData.id
}, {songs: {$elemMatch: {id: songData.id}}}).count() !== 0) {
$("Song not added. This song is already in the playlist.
").prependTo($(".landing")).delay(7000).fadeOut(1000, function () {
$(this).remove();
});
} else if (Queues.find({
type: genre,
"songs.id": songData.id
}, {songs: {$elemMatch: {id: songData.id}}}).count() !== 0) {
$("Song not added. This song has already been requested.
").prependTo($(".landing")).delay(7000).fadeOut(1000, function () {
$(this).remove();
});
} else {
Meteor.call("addSongToQueue", genre, songData, function (err, res) {
console.log(err, res);
if (err) {
$("Song not added. Something went wrong.
").prependTo($(".landing")).delay(7000).fadeOut(1000, function () {
$(this).remove();
});
} else {
$("Song added. Your song has been added to the queue.
").prependTo($(".landing")).delay(7000).fadeOut(1000, function () {
$(this).remove();
});
}
});
}
$("#close-modal-a").click();
},
"click #toggle-video": function (e) {
e.preventDefault();
if (Session.get("mediaHidden")) {
$("#media-container").removeClass("hidden");
$("#toggle-video").text("Hide video");
Session.set("mediaHidden", false);
} else {
$("#media-container").addClass("hidden");
$("#toggle-video").text("Show video");
Session.set("mediaHidden", true);
}
},
"click #return": function (e) {
$("#add-info").hide();
$("#search-info").show();
},
"click #search-song": function () {
var songs = [];
$("#song-results").empty();
$.ajax({
type: "GET",
url: "https://www.googleapis.com/youtube/v3/search?part=snippet&q=" + $("#song-input").val() + "&key=AIzaSyAgBdacEWrHCHVPPM4k-AFM7uXg-Q__YXY",
applicationType: "application/json",
contentType: "json",
success: function (data) {
for (var i in data.items) {
var item = data.items[i];
$("#song-results").append(
"" +
"

" +
"
" +
"" + item.snippet.title + "" +
"" + item.snippet.channelTitle + "" +
"
" +
"
"
);
songs.push({title: item.snippet.title, id: item.id.videoId});
}
$("#song-results > div").click(function () {
$("#search-info").hide();
$("#add-info").show();
var title = $(this).find("div > .song-result-title").text();
for (var i in songs) {
if (songs[i].title === title) {
var songObj = {
id: songs[i].id,
title: songs[i].title,
type: "youtube"
};
$("#title").val(songObj.title);
$("#artist").val("");
$("#id").val(songObj.id);
getSpotifyInfo(songObj.title.replace(/\[.*\]/g, ""), function (data) {
if (data.tracks.items.length > 0) {
$("#title").val(data.tracks.items[0].name);
var artists = [];
$("#img").val(data.tracks.items[0].album.images[2].url);
data.tracks.items[0].artists.forEach(function (artist) {
artists.push(artist.name);
});
$("#artist").val(artists.join(", "));
}
});
}
}
})
}
})
},
"click #volume-icon": function () {
var volume = 0;
var slider = $("#volume-slider").slider();
$("#volume-icon").removeClass("fa-volume-down").addClass("fa-volume-off")
if (YTPlayer !== undefined) {
YTPlayer.setVolume(volume);
localStorage.setItem("volume", volume);
$("#volume-slider").slider("setValue", volume);
}
},
"click #play": function () {
Meteor.call("resumeRoom", type);
},
"click #pause": function () {
Meteor.call("pauseRoom", type);
},
"click #skip": function () {
Meteor.call("skipSong", type);
},
"click #shuffle": function () {
Meteor.call("shufflePlaylist", type);
},
"change input": function (e) {
if (e.target && e.target.id) {
var partsOfId = e.target.id.split("-");
partsOfId[1] = partsOfId[1].charAt(0).toUpperCase() + partsOfId[1].slice(1);
var camelCase = partsOfId.join("");
Session.set(camelCase, e.target.checked);
}
},
"click #report-song-button": function () {
var room = Session.get("type");
var reportData = {};
reportData.song = Session.get("currentSong").mid;
reportData.type = [];
reportData.reason = [];
$(".report-layer-1 > .checkbox input:checked").each(function () {
reportData.type.push(this.id);
if (this.id == "report-other") {
var otherText = $(".other-textarea").val();
}
});
$(".report-layer-2 input:checked").each(function () {
reportData.reason.push(this.id);
});
console.log(reportData);
Meteor.call("submitReport", room, reportData, Session.get("id"), function () {
$("#close-modal-r").click();
});
},
"change #si_or_pl": function () {
if ($("#select_playlist").is(':selected')) {
$("#search-info").hide();
$("#playlist-import").show();
}
if ($("#select_single").is(':selected')) {
$("#search-info").show();
$("#playlist-import").hide();
}
},
"click #close-modal-a": function () {
$("#select_single").attr("selected", true);
$("#search-info").show();
$("#playlist-import").hide();
}
});
Template.room.helpers({
singleVideo: function() {
return true;
},
chat: function() {
Meteor.setTimeout(function() {
var elem = document.getElementById('chat');
if (elem !== undefined && elem !== null) {
elem.scrollTop = elem.scrollHeight;
}
}, 100);
return Chat.find({type: Session.get("type")}, {sort: {time: -1}, limit: 50 }).fetch().reverse();
},
globalChat: function() {
Meteor.setTimeout(function() {
var elem = document.getElementById('global-chat');
if (elem !== undefined && elem !== null) {
elem.scrollTop = elem.scrollHeight;
}
}, 100);
return Chat.find({type: "global"}, {sort: {time: -1}, limit: 50 }).fetch().reverse();
},
likes: function() {
var playlist = Playlists.findOne({type: Session.get("type")});
var likes = 0;
playlist.songs.forEach(function(song) {
if (Session.get("currentSong") && song.mid === Session.get("currentSong").mid) {
likes = song.likes;
return;
}
});
return likes;
},
dislikes: function() {
var playlist = Playlists.findOne({type: Session.get("type")});
var dislikes = 0;
playlist.songs.forEach(function(song) {
if (Session.get("currentSong") && song.mid === Session.get("currentSong").mid) {
dislikes = song.dislikes;
return;
}
});
return dislikes;
},
liked: function() {
if (Meteor.userId()) {
var currentSong = Session.get("currentSong");
if (currentSong && Meteor.user().profile.liked.indexOf(currentSong.mid) !== -1) {
return "active";
} else {
return "";
}
} else {
"";
}
},
disliked: function() {
if (Meteor.userId()) {
var currentSong = Session.get("currentSong");
if (currentSong && Meteor.user().profile.disliked.indexOf(currentSong.mid) !== -1) {
return "active";
} else {
return "";
}
} else {
"";
}
},
type: function() {
var parts = location.href.split('/');
var id = parts.pop().toLowerCase();
return Rooms.findOne({type: id}).display;
},
users: function() {
var parts = location.href.split('/');
var id = parts.pop().toLowerCase();
return Rooms.findOne({type: id}).users;
},
title: function(){
return Session.get("title");
},
artist: function(){
return Session.get("artist");
},
loaded: function() {
return Session.get("loaded");
},
paused: function() {
return Session.get("state") === "paused";
},
private: function() {
return Rooms.findOne({type: Session.get("type")}).private === true;
},
report: function() {
return Session.get("reportObj");
},
reportSong: function() {
return Session.get("reportSong");
},
reportTitle: function() {
return Session.get("reportTitle");
},
reportAuthor: function() {
return Session.get("reportAuthor");
},
reportDuration: function() {
return Session.get("reportDuration");
},
reportAudio: function() {
return Session.get("reportAudio");
},
reportAlbumart: function() {
return Session.get("reportAlbumart");
},
reportOther: function() {
return Session.get("reportOther");
},
currentSong: function() {
return Session.get("currentSong");
},
previousSong: function() {
return Session.get("previousSong");
},
currentSongR: function() {
return Session.get("currentSongR");
},
previousSongR: function() {
return Session.get("previousSongR");
},
reportingSong: function() {
if (Session.get("reportPrevious")) {
return Session.get("previousSongR");
} else {
return Session.get("currentSongR");
}
},
votes: function(){
return Rooms.findOne({type: Session.get("type")}).votes;
}
});
Template.room.onCreated(function () {
Chat.after.find(function(userId, selector) {
if (selector.type === "global") {
if (!$("#global-chat-tab").hasClass("active")) {
$("#global-chat-tab").addClass("unread-messages");
}
} else if(selector.type === Session.get("type")) {
if (!$("#chat-tab").hasClass("active")) {
$("#chat-tab").addClass("unread-messages");
}
}
});
Session.set("reportSong", false);
Session.set("reportTitle", false);
Session.set("reportAuthor", false);
Session.set("reportDuration", false);
Session.set("reportAudio", false);
Session.set("reportAlbumart", false);
Session.set("reportOther", false);
if (resizeSeekerbarInterval !== undefined) {
Meteor.clearInterval(resizeSeekerbarInterval);
resizeSeekerbarInterval = undefined;
}
YTPlayer = undefined;
Session.set("videoHidden", false);
var tag = document.createElement("script");
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
Session.set("singleVideo", true);
var currentSong = undefined;
var currentSongR = undefined;
function getTimeElapsed() {
if (currentSong !== undefined) {
var room = Rooms.findOne({type: type});
if (room !== undefined) {
return Date.now() - currentSong.started - room.timePaused;
}
}
return 0;
}
function getSongInfo(songData){
Session.set("title", songData.title);
Session.set("artist", songData.artist);
Session.set("id", songData.id);
$("#song-img").attr("src", songData.img);
Session.set("duration", parseInt(songData.duration));
var d = moment.duration(parseInt(songData.duration), 'seconds');
$("#time-total").text(d.minutes() + ":" + ("0" + d.seconds()).slice(-2));
Session.set("timeFormat", d.minutes() + ":" + ("0" + d.seconds()).slice(-2));
}
function resizeSeekerbar() {
if (Session.get("state") === "playing") {
$("#seeker-bar").width(((getTimeElapsed() / 1000) / Session.get("duration") * 100) + "%");
}
}
function startSong() {
$("#time-elapsed").text("0:00");
$("#vote-skip").attr("disabled", false);
if (currentSong !== undefined) {
if (YTPlayer !== undefined && YTPlayer.stopVideo !== undefined) YTPlayer.stopVideo();
var volume = localStorage.getItem("volume") || 20;
if ($("#player").length !== 1) {
$("#media-container").append('');
}
$("#player").show();
function loadVideo() {
if (!Session.get("YTLoaded")) {
Session.set("loadVideoTimeout", Meteor.setTimeout(function () {
loadVideo();
}, 500));
} else {
if (YTPlayer === undefined) {
YTPlayer = new YT.Player("player", {
height: 540,
width: 960,
videoId: currentSong.id,
playerVars: {controls: 0, iv_load_policy: 3, rel: 0, showinfo: 0},
events: {
'onReady': function (event) {
if (currentSong.skipDuration === undefined) {
currentSong.skipDuration = 0;
}
event.target.seekTo(Number(currentSong.skipDuration) + getTimeElapsed() / 1000);
event.target.playVideo();
event.target.setVolume(volume);
resizeSeekerbar();
},
'onStateChange': function (event) {
if (Session.get("YTLoaded")) {
if (event.data == YT.PlayerState.PAUSED && Session.get("state") === "playing") {
event.target.seekTo(Number(currentSong.skipDuration) + getTimeElapsed() / 1000);
event.target.playVideo();
}
if (event.data == YT.PlayerState.PLAYING && Session.get("state") === "paused") {
event.target.seekTo(Number(currentSong.skipDuration) + getTimeElapsed() / 1000);
event.target.pauseVideo();
}
}
}
}
});
} else {
YTPlayer.loadVideoById(currentSong.id);
if (currentSong.skipDuration === undefined) {
currentSong.skipDuration = 0;
}
YTPlayer.seekTo(Number(currentSong.skipDuration) + getTimeElapsed() / 1000);
}
Session.set("pauseVideo", false);
getSongInfo(currentSong);
}
}
loadVideo();
}
}
Session.set("loaded", false);
Meteor.subscribe("rooms", function() {
var parts = location.href.split('/');
var id = parts.pop();
var type = id.toLowerCase();
Session.set("type", type);
if (Rooms.find({type: type}).count() !== 1) {
window.location = "/";
} else {
StationSubscription = Meteor.subscribe(type);
Session.set("loaded", true);
minterval = Meteor.setInterval(function () {
var room = Rooms.findOne({type: type});
if (room !== undefined) {
if (room.state === "paused" || Session.get("pauseVideo")) {
Session.set("state", "paused");
// TODO Fix issue where sometimes nothing loads with the YT is not defined error. The error points to around this.
if (YTPlayer !== undefined && YTPlayer.getPlayerState !== undefined && YTPlayer.getPlayerState() === 1) {
YTPlayer.pauseVideo();
}
} else {
Session.set("state", "playing");
if (YTPlayer !== undefined && YTPlayer.getPlayerState !== undefined && YTPlayer.getPlayerState() !== 1) {
YTPlayer.playVideo();
}
}
}
if (room.currentSong.song !== undefined && (currentSongR === undefined || room.currentSong.started !== currentSongR.started)) {
Session.set("previousSong", currentSong);
currentSongR = room.currentSong;
currentSong = room.currentSong.song;
currentSong.started = room.currentSong.started;
Session.set("currentSong", currentSong);
Meteor.clearTimeout(Session.get("loadVideoTimeout"));
startSong();
}
if (currentSong !== undefined) {
if (room !== undefined) {
var duration = (Date.now() - currentSong.started - room.timePaused) / 1000;
var song_duration = currentSong.duration;
if (song_duration <= duration) {
Session.set("pauseVideo", true);
}
var d = moment.duration(duration, 'seconds');
if (Session.get("state") === "playing") {
$("#time-elapsed").text(d.minutes() + ":" + ("0" + d.seconds()).slice(-2));
}
}
}
}, 100);
resizeSeekerbarInterval = Meteor.setInterval(function () {
resizeSeekerbar();
}, 500);
}
});
});
// Settings Template
Template.settings.events({
"click #save-settings": function() {
Meteor.call("updateSettings", $("#showRating").is(":checked"));
},
"click #delete-account": function(){
$("#delete-account").text("Click to confirm");
$("#delete-account").click(function(){
var bool = confirm("Are you sure you want to delete your account?");
if(bool) {
Meteor.call("deleteAccount");
} else{
$("#delete-account").text("Delete");
}
})
},
"click #change-password": function(){
var oldPassword = $("#old-password").val();
var newPassword= $("#new-password").val();
var confirmPassword = $("#confirm-password").val();
if(newPassword === confirmPassword){
Accounts.changePassword(oldPassword, newPassword, function(err){
if(err){
$("#old-password").val("");
$("#new-password").val("");
$("#confirm-password").val("");
$("Oh Snap! " + err.reason + "
").prependTo($("#head")).delay(7000).fadeOut(1000, function() { $(this).remove(); });
} else {
$("#old-password").val("");
$("#new-password").val("");
$("#confirm-password").val("");
$("Hooray! You changed your password successfully.
").prependTo($("#head")).delay(7000).fadeOut(1000, function() { $(this).remove(); });
}
});
}
}
});
var previewEndSongTimeout = undefined;