diff --git a/app/assets/javascripts/genreSelector.js b/app/assets/javascripts/genreSelector.js index fd0fb56c7..5adb4a252 100644 --- a/app/assets/javascripts/genreSelector.js +++ b/app/assets/javascripts/genreSelector.js @@ -9,7 +9,7 @@ context.JK = context.JK || {}; context.JK.GenreSelectorHelper = (function() { - var _logger = context.JK.logger; + var logger = context.JK.logger; var _genres = []; // will be list of structs: [ {label:xxx, value:yyy}, {...}, ... ] function loadGenres() { @@ -55,6 +55,17 @@ return selectedGenres; } + function setSelectedGenres(parentSelector, genreList) { + if (!genreList) { + return; + } + var values = []; + $.each(genreList, function(index, value) { + values.push(value.toLowerCase()); + }); + var selectedVal = $('select', parentSelector).val(values); + } + function initialize() { loadGenres(); } @@ -62,6 +73,7 @@ var me = { // This will be our singleton. initialize: initialize, getSelectedGenres: getSelectedGenres, + setSelectedGenres: setSelectedGenres, reset: reset, render: render, loadGenres: loadGenres diff --git a/app/assets/javascripts/jam_rest.js b/app/assets/javascripts/jam_rest.js index e988e7ee0..63beb5566 100644 --- a/app/assets/javascripts/jam_rest.js +++ b/app/assets/javascripts/jam_rest.js @@ -12,6 +12,17 @@ var self = this; var logger = context.JK.logger; + function updateSession(id, newSession, onSuccess) { + logger.debug('Rest.updateSession'); + return $.ajax('/api/sessions/' + id, { + type: "PUT", + data : newSession, + dataType : 'json', + success: onSuccess + }); + } + + function getUserDetail(options) { var id = getId(options); @@ -143,9 +154,10 @@ this.deleteAvatar = deleteAvatar; this.getFilepickerPolicy = getFilepickerPolicy; this.getFriends = getFriends; + this.updateSession = updateSession; return this; }; -})(window,jQuery); +})(window,jQuery); \ No newline at end of file diff --git a/app/assets/javascripts/session.js b/app/assets/javascripts/session.js index 601fea97f..08c0fb7bb 100644 --- a/app/assets/javascripts/session.js +++ b/app/assets/javascripts/session.js @@ -723,8 +723,8 @@ this.tracks = tracks; - this.getCurrentSessionModel = function() { - return sessionModel; + this.getCurrentSession = function() { + return sessionModel.getCurrentSession(); }; context.JK.HandleBridgeCallback = handleBridgeCallback; diff --git a/app/assets/javascripts/sessionModel.js b/app/assets/javascripts/sessionModel.js index 51614288f..8663d920e 100644 --- a/app/assets/javascripts/sessionModel.js +++ b/app/assets/javascripts/sessionModel.js @@ -101,6 +101,8 @@ async: false, success: function(response) { sendClientParticipantChanges(currentSession, response); + logger.debug("Current Sesssion Refreshed:"); + logger.debug(response); currentSession = response; callback(); }, @@ -342,6 +344,9 @@ this.addTrack = addTrack; this.updateTrack = updateTrack; this.deleteTrack = deleteTrack; + this.getCurrentSession = function() { + return currentSession; + }; }; })(window,jQuery); \ No newline at end of file diff --git a/app/assets/javascripts/sessionSettingsDialog.js b/app/assets/javascripts/sessionSettingsDialog.js index 82afd5325..eff0d71a5 100644 --- a/app/assets/javascripts/sessionSettingsDialog.js +++ b/app/assets/javascripts/sessionSettingsDialog.js @@ -1,29 +1,87 @@ -// g is the "global" namespace. Easier to type -// than "context" -(function(g,$) { +/** +* Javascript for the session settings dialog. +*/ +(function(context,$) { - g.JK = g.JK || {}; - g.JK.SessionSettingsDialog = function(app, sessionScreen) { - var logger = g.JK.logger; + context.JK = context.JK || {}; + context.JK.SessionSettingsDialog = function(app, sessionScreen) { + var logger = context.JK.logger; + var $dialog; + var rest = new JK.Rest(app); function beforeShow(data) { - var currentSession = sessionScreen.getCurrentSessionModel(); + context.JK.GenreSelectorHelper.render('#session-settings-genre'); + $dialog = $('[layout-id="session-settings"]'); + var currentSession = sessionScreen.getCurrentSession(); + context.JK.GenreSelectorHelper.setSelectedGenres('#session-settings-genre', currentSession.genres); + // dynamic object binding to form. + // TODO: Generalize, test and bundle with formToObject + var skip = [ + 'participants', // has its own API + 'invitations', // has its own API + 'join_requests', // has its own API + 'genres' // handled specifically + ]; + $.each(_.keys(currentSession), function(index,propName) { + if (context._.contains(skip, propName)) { + logger.debug("Skipping " + propName); + return true; // "continue" + } + var inputSelector = '[name="' + propName + '"]'; + $input = $(inputSelector, $dialog); + logger.debug('Found ' + $input.length + ' inputs for selector, ' + inputSelector); + var desiredValue = null; + if ($.isArray(currentSession[propName])) { + desiredValue = currentSession[propName].join(','); + } else { + desiredValue = currentSession[propName]; + } + logger.debug("setting to " + desiredValue); + $input.val(desiredValue).change(); + }); + + } + + function updateFanChatDisabled(evt) { + logger.debug('updateFanChatDisabled'); + $dialog = $('[layout-id="session-settings"]'); + var hasFanAccess = $('select[name="fan_access"]', $dialog).val(); // string + hasFanAccess = context.JK.stringToBool(hasFanAccess); + logger.debug('hasFanAccess? ' + hasFanAccess); + if (hasFanAccess) { + $('input[name="fan_chat"]', $dialog).removeAttr("disabled"); + } else { + $('input[name="fan_chat"]', $dialog).attr("disabled", "disabled"); + } } function saveSettings(evt) { + var newSessionInfo = $('#session-settings-dialog').formToObject(); + var id = newSessionInfo.id; + delete newSessionInfo.id; + if (typeof newSessionInfo.genres === "string") { + newSessionInfo.genres = [newSessionInfo.genres]; + } + alert("About to try and save: " + JSON.stringify(newSessionInfo)); + rest.updateSession(id, newSessionInfo, settingsSaved); + } + + function settingsSaved(response) { + alert(response); } function events() { + $('#session-settings-dialog-submit').on('click', saveSettings); + $('#session-settings-dialog select[name="fan_access"]').on('change', updateFanChatDisabled); } this.initialize = function() { - logger.debug("SessionSettingsDialog.initialize"); events(); - var screenBindings = { + var dialogBindings = { 'beforeShow': beforeShow }; - app.bindScreen('session-settings', screenBindings); + app.bindDialog('session-settings', dialogBindings); }; }; diff --git a/app/assets/javascripts/utils.js b/app/assets/javascripts/utils.js index 3c81ee985..0236e6d8c 100644 --- a/app/assets/javascripts/utils.js +++ b/app/assets/javascripts/utils.js @@ -8,6 +8,14 @@ context.JK = context.JK || {}; var logger = context.JK.logger; + context.JK.stringToBool = function(s) { + switch(s.toLowerCase()){ + case "true": case "yes": case "1": return true; + case "false": case "no": case "0": case null: return false; + default: return Boolean(s); + } + }; + var instrumentIconMap24 = { "acoustic guitar": '../assets/content/icon_instrument_guitar24.png', "bass guitar": '../assets/content/icon_instrument_guitar24.png', diff --git a/app/views/clients/_genreSelector.html.erb b/app/views/clients/_genreSelector.html.erb index 34ce800c8..d63a04089 100644 --- a/app/views/clients/_genreSelector.html.erb +++ b/app/views/clients/_genreSelector.html.erb @@ -1,3 +1,3 @@ - diff --git a/app/views/clients/_sessionSettings.html.erb b/app/views/clients/_sessionSettings.html.erb index 5428fd6ad..70fbcd93e 100644 --- a/app/views/clients/_sessionSettings.html.erb +++ b/app/views/clients/_sessionSettings.html.erb @@ -10,6 +10,8 @@
+
+
@@ -19,56 +21,28 @@
<%= render "genreSelector" %>
- - -

Musician Access:
- + +
-  Open  
-  By Approval +  Open  
+  By Approval
Fan Access:
- + +
-  Chat  
-  No Fan Chat +  Chat  
+  No Fan Chat
@@ -78,11 +52,12 @@ Description:
- +

@@ -90,6 +65,7 @@
+
diff --git a/app/views/clients/index.html.erb b/app/views/clients/index.html.erb index 3ad215236..8c3080be2 100644 --- a/app/views/clients/index.html.erb +++ b/app/views/clients/index.html.erb @@ -145,10 +145,10 @@ // Let's get things rolling... if (JK.currentUserId) { - JK.JamServer.connect(); // singleton here defined in JamServer.js JK.app = JK.JamKazam(); JK.app.initialize(); + JK.JamServer.connect(); // singleton here defined in JamServer.js // Run a check to see if we're logged in yet. Only after that should // we initialize the other screens.