diff --git a/web/app/assets/javascripts/band_setup.js b/web/app/assets/javascripts/band_setup.js index f1a0249d5..2860c3ed1 100644 --- a/web/app/assets/javascripts/band_setup.js +++ b/web/app/assets/javascripts/band_setup.js @@ -11,7 +11,7 @@ context.JK.BandSetupScreen = function (app) { var logger = context.JK.logger; var rest = context.JK.Rest(); - var friendSelectorDialog = null; + var inviteMusiciansUtil = null; var invitationDialog = null; var autoComplete = null; var userNames = []; @@ -21,6 +21,7 @@ var nilOptionStr = ''; var nilOptionText = 'n/a'; var bandId = ''; + var friendInput=null; function is_new_record() { return bandId.length == 0; @@ -62,7 +63,7 @@ $("#band-setup-step-1").show(); $("#band-setup-step-2").hide(); - $('#band-invitee-input') + $(friendInput) .unbind('blur') .attr("placeholder", "Looking up friends...") .prop('disabled', true) @@ -156,7 +157,7 @@ function createBandInvitations(bandId, onComplete) { var callCount = 0; var totalInvitations = 0; - $('#selected-band-invitees .invitation').each(function (index, invitation) { + $('#selected-friends-band .invitation').each(function (index, invitation) { callCount++; totalInvitations++; var userId = $(invitation).attr('user-id'); @@ -179,16 +180,13 @@ } function beforeShow(data) { - userNames = []; - userIds = []; - userPhotoUrls = []; + inviteMusiciansUtil.clearSelections(); bandId = data.id == 'new' ? '' : data.id; resetForm(); } function afterShow(data) { - friendSelectorDialog.setCallback(friendSelectorCallback); - loadFriends(); + inviteMusiciansUtil.loadFriends(); if (!is_new_record()) { $("#band-setup-title").html("edit band"); @@ -240,38 +238,6 @@ }); } - // TODO: this is repeated in createSession.js.erb - function loadFriends() { - rest.getFriends({ id: context.JK.currentUserId }) - .done(function (friends) { - $.each(friends, function () { - userNames.push(this.name); - userIds.push(this.id); - userPhotoUrls.push(this.photo_url); - }); - - var autoCompleteOptions = { - lookup: { suggestions: userNames, data: userIds }, - onSelect: addInvitation - }; - - $('#band-invitee-input').attr("placeholder", "Type a friend\'s name").prop('disabled', false); - - if (!autoComplete) { - autoComplete = $('#band-invitee-input').autocomplete(autoCompleteOptions); - } - else { - autoComplete.setOptions(autoCompleteOptions); - } - - $(".autocomplete").width("150px"); - }) - .fail(function () { - $('#band-invitee-input').attr("placeholder", "Unable to lookup friends"); - app.ajaxError(arguments) - }); - } - function loadGenres(selectedGenres) { $("#band-genres").empty(); @@ -393,13 +359,6 @@ } } - function friendSelectorCallback(newSelections) { - var keys = Object.keys(newSelections); - for (var i = 0; i < keys.length; i++) { - addInvitation(newSelections[keys[i]].userName, newSelections[keys[i]].userId); - } - } - function addInvitation(value, data) { if ($('#selected-band-invitees div[user-id=' + data + ']').length === 0) { var template = $('#template-band-invitation').html(); @@ -462,10 +421,6 @@ $('#btn-band-setup-save').click(saveBand); - $('#btn-band-choose-friends').click(function () { - friendSelectorDialog.showDialog(selectedFriendIds); - }); - $('#band-country').on('change', function (evt) { evt.stopPropagation(); loadRegions(); @@ -493,10 +448,13 @@ $('div[layout-id="band/setup"] .btn-facebook-invitation').click(function () { invitationDialog.showFacebookDialog(); }); + + $(friendInput).focus(function() { $(this).val(''); }) } - function initialize(invitationDialogInstance, friendSelectorDialogInstance) { - friendSelectorDialog = friendSelectorDialogInstance; + function initialize(invitationDialogInstance, inviteMusiciansUtilInstance) { + inviteMusiciansUtil = inviteMusiciansUtilInstance; + friendInput = inviteMusiciansUtil.inviteBandCreate('#band-setup-invite-musicians', "
If your bandmates are already on JamKazam, start typing their names in the box below, or click the Choose Friends button to select them.
"); invitationDialog = invitationDialogInstance; events(); diff --git a/web/app/assets/javascripts/createSession.js.erb b/web/app/assets/javascripts/createSession.js.erb index fc911550f..494f8f661 100644 --- a/web/app/assets/javascripts/createSession.js.erb +++ b/web/app/assets/javascripts/createSession.js.erb @@ -11,6 +11,7 @@ var inviteMusiciansUtil = null; var MAX_GENRES = 1; var sessionSettings = {}; + var friendInput = null; function beforeShow(data) { inviteMusiciansUtil.clearSelections(); @@ -60,7 +61,7 @@ context.JK.dropdown($('#musician-access', $form)); context.JK.dropdown($('#fan-access', $form)); - $('#friend-input') + $(friendInput) .unbind('blur') .attr("placeholder", "Looking up friends...") .prop('disabled', true) @@ -233,7 +234,7 @@ invitationDialog.showFacebookDialog(e); }); - $('#friend-input').focus(function() { $(this).val(''); }) + $(friendInput).focus(function() { $(this).val(''); }) } function toggleMusicianAccess() { @@ -306,7 +307,7 @@ function initialize(invitationDialogInstance, inviteMusiciansUtilInstance) { invitationDialog = invitationDialogInstance; inviteMusiciansUtil = inviteMusiciansUtilInstance; - inviteMusiciansUtil.inviteSessionCreate('#create-session-invite-musicians'); + friendInput = inviteMusiciansUtil.inviteSessionCreate('#create-session-invite-musicians', "
Start typing friends' names or:
"); //' events(); loadBands(); loadSessionSettings(); diff --git a/web/app/assets/javascripts/inviteMusicians.js b/web/app/assets/javascripts/inviteMusicians.js index 1ea0ccb76..6cfb87e4e 100644 --- a/web/app/assets/javascripts/inviteMusicians.js +++ b/web/app/assets/javascripts/inviteMusicians.js @@ -14,18 +14,34 @@ var autoComplete = null; var rest = context.JK.Rest(); var inviteAction = 'create'; // create/update + var friendInput = null; var updateSessionID = null; + var addInstructions = ''; - this.inviteSessionCreate = function(elemSelector) { - inviteAction = 'create'; + function _initInvite(elemSelector, iAction, instructions) { + addInstructions = instructions; + inviteAction = iAction; + friendInput = '#friend-input-'+inviteAction; _appendFriendSelector($(elemSelector)); + return friendInput; + } + + this.inviteSessionCreate = function(elemSelector, instructions) { + return _initInvite(elemSelector, 'create', instructions) + }; + + this.inviteBandCreate = function(elemSelector, instructions) { + return _initInvite(elemSelector, 'band', instructions) }; this.inviteSessionUpdate = function(elemSelector, sessionId) { this.clearSelections(); updateSessionID = sessionId; friendSelectorDialog.setCallback(friendSelectorCallback); + inviteAction = 'update'; + friendInput = '#friend-input-'+inviteAction; + if (0 == $(elemSelector + ' .friendbox').length) { _appendFriendSelector($(elemSelector)); $('#btn-save-invites').click(function() { @@ -52,6 +68,7 @@ existingInvites = []; updateSessionID = null; $('.selected-friends').empty(); + $(friendInput).val(''); }; this.loadFriends = function() { @@ -64,27 +81,21 @@ userIds.push(this.id); userPhotoUrls.push(this.photo_url); }); - - var autoCompleteOptions = { - lookup: { suggestions: userNames, data: userIds }, - onSelect: addInvitation, - serviceUrl: '/api/search.json?srch_sessinv=1', - minChars: 3, - autoSelectFirst: true - }; - - $('#friend-input').attr("placeholder", "Type a friend\'s name").prop('disabled', false); - - if (!autoComplete) { - autoComplete = $('#friend-input').autocomplete(autoCompleteOptions); - } else { - autoComplete.setOptions(autoCompleteOptions); + if (friendInput) { + var autoCompleteOptions = { + lookup: { suggestions: userNames, data: userIds }, + onSelect: addInvitation, + serviceUrl: '/api/search.json?srch_sessinv=1', + minChars: 3, + autoSelectFirst: true + }; + $(friendInput).attr("placeholder", "Type a friend\'s name").prop('disabled', false) + autoComplete = $(friendInput).autocomplete(autoCompleteOptions); + $(".autocomplete").width("150px"); } - - $(".autocomplete").width("150px"); }) .fail(function() { - $('#friend-input').attr("placeholder", "Unable to lookup friends"); + $(friendInput).attr("placeholder", "Unable to lookup friends"); app.ajaxError(arguments); }); } @@ -114,11 +125,11 @@ userName: value, imageStyle: imgStyle}); $('.selected-friends').append(invitationHtml); - $('#friend-input').select(); + $(friendInput).select(); invitedFriends.push(data); } else { - $('#friend-input').select(); + $(friendInput).select(); context.alert('Invitation already exists for this musician.'); } } @@ -188,9 +199,12 @@ } function _friendSelectorHTML() { + var fInput = friendInput ? friendInput.substring(1,friendInput.length) : ''; return context.JK.fillTemplate($('#template-session-invite-musicians').html(), {choose_friends_id: 'btn-choose-friends-'+inviteAction, - selected_friends_id: 'selected-friends-'+inviteAction}); + selected_friends_id: 'selected-friends-'+inviteAction, + friend_input: fInput, + instructions: addInstructions}); } function _appendFriendSelector(elemSelector) { @@ -201,10 +215,14 @@ invitedFriends.map(function(uid) { obj[uid] = true; }); friendSelectorDialog.showDialog(obj); }); + if ('update' == inviteAction) { + $(friendInput).hide(); + } }; this.initialize = function(friendSelectorDialogInstance) { friendSelectorDialog = friendSelectorDialogInstance; + return this; }; return this; diff --git a/web/app/views/clients/_band_setup.html.erb b/web/app/views/clients/_band_setup.html.erb index e3dd3ae13..c989c27b4 100644 --- a/web/app/views/clients/_band_setup.html.erb +++ b/web/app/views/clients/_band_setup.html.erb @@ -93,20 +93,8 @@