merge feature/musician_profile_enhancements

This commit is contained in:
Jonathan Kolyer 2015-05-27 02:21:25 +00:00
commit caca4165fe
11 changed files with 605 additions and 162 deletions

View File

@ -9,6 +9,8 @@
// accounts_profiles.js
context.JK.BandSetupScreen = function (app) {
var NONE_SPECIFIED = 'None specified'
var ui = new context.JK.UIHelper(JK.app)
var logger = context.JK.logger;
var rest = context.JK.Rest();
var inviteMusiciansUtil = null;
@ -22,12 +24,12 @@
var nilOptionText = 'n/a';
var bandId = '';
var friendInput=null;
// TODO: Use a single variable for a mutually exclusive option:
var step1, step2;
var isSaving = false;
var bandType=null;
var bandStatus=null;
var concertCount=null;
var currentStep = 0;
var STEPS_COUNT=5;
var $selectedInstruments=[]
function navBack() {
if (currentStep>0) {
@ -58,7 +60,7 @@
}
}
function renderCurrentPange() {
function renderCurrentPage() {
$(".band-step").addClass("hidden")
$("#band-setup-step-" + currentStep).removeClass("hidden")
if(currentStep==0) {
@ -71,10 +73,30 @@
$("#btn-band-setup-back").removeClass("hidden")
$("#btn-band-setup-next").removeClass("hidden").html("SAVE & FINISH")
}
renderOptionalControls()
}
function is_new_record() {
return bandId.length == 0;
function renderOptionalControls(e) {
if(e){e.stopPropagation()}
// Is new member selected?
if ($('input[name="add_new_members"]:checked').val()=="yes") {
$(".new-member-dependent").removeClass("hidden")
} else {
$(".new-member-dependent").addClass("hidden")
}
// Is paid gigs selected?
if ($('input[name="paid_gigs"]:checked').val()=="yes") {
$(".paid-gigs-dependent").removeClass("hidden")
} else {
$(".paid-gigs-dependent").addClass("hidden")
}
return false;
}
function isNewBand() {
return bandId==null || typeof(bandId)=='undefined' || bandId.length == 0;
}
function removeErrors() {
@ -107,11 +129,18 @@
// website
$('#band-website').val('');
$("#new-member-no").iCheck('check').attr('checked', 'checked')
$("#paid-gigs-no").iCheck('check').attr('checked', 'checked')
$("#free-gigs-no").iCheck('check').attr('checked', 'checked')
$('#touring-option').val('no')
resetGenres();
$("#band-setup-step-1").show();
$("#band-setup-step-2").hide();
$("#play-commitment").val('1')
$("#hourly-rate").val("0.0")
$("#gig-minimum").val("0.0")
resetGenres();
renderDesiredExperienceLabel([])
$(friendInput)
.unbind('blur')
@ -163,7 +192,8 @@
}
function buildBand() {
var band = {};
var band = {instruments:[]};
band.id = (isNewBand()) ? null : bandId;
band.name = $("#band-name").val();
band.website = $("#band-website").val();
band.biography = $("#band-biography").val();
@ -171,15 +201,48 @@
band.state = $("#band-region").val();
band.country = $("#band-country").val();
if (step2) {
band.band_type = bandType.val();
band.band_status= bandStatus.val();
band.concert_count= concertCount.val();
band.add_new_members = $('input[name="add_new_members"]:checked').val()=="yes"
band.paid_gigs = $('input[name="paid_gigs"]:checked').val()=="yes"
band.free_gigs=$('input[name="free_gigs"]:checked').val()=="yes"
band.touring_option=$('#touring-option').val()=="yes"
band.play_commitment=$("#play-commitment").val()
band.hourly_rate=$("#hourly-rate").val()
band.gig_minimum=$("#gig-minimum").val()
if (currentStep==3) {
band.genres = getSelectedGenres();
band.validate_genres = true
} else {
band.validate_genres = false
}
$.each($selectedInstruments, function(index, instrument) {
var h = {}
h.instrument_id = instrument.id
h.proficiency_level = instrument.level
band.instruments.push(h)
})
return band;
}
function renderDesiredExperienceLabel(selectedInstruments) {
$selectedInstruments=selectedInstruments
var instrumentText=""
$.each($selectedInstruments, function(index, instrument) {
if (instrumentText.length!=0) {instrumentText += ", "}
instrumentText += instrument.name
})
$("#desired-experience-label").html(($selectedInstruments && $selectedInstruments.length > 0) ? instrumentText : NONE_SPECIFIED)
}
function showProfile(band_id) {
context.location = "/client#/bandProfile/" + band_id;
}
@ -196,7 +259,7 @@
unbindNavButtons()
var band = buildBand()
var saveBandFn = (is_new_record()) ? rest.createBand : rest.updateBand
var saveBandFn = (isNewBand()) ? rest.createBand : rest.updateBand
saveBandFn(band)
.done(function (response) {
saveInvitations()
@ -211,8 +274,7 @@
})
.always(function (jqXHR) {
bindNavButtons()
})
}
})
}
function createBandInvitations(bandId, onComplete) {
@ -248,16 +310,16 @@
var stepNum = data['d'].substring(4)
if(stepNum) {
currentStep=stepNum
delete data['d'];
resetForm();
delete data['d'];
}
}
resetForm();
}
function afterShow(data) {
inviteMusiciansUtil.loadFriends();
if (!is_new_record()) {
if (!isNewBand()) {
$("#band-change-photo").html('Upload band photo.');
$('.band-photo').removeClass("hidden")
@ -277,15 +339,48 @@
$('.band-photo').addClass("hidden")
}
renderCurrentPange()
renderCurrentPage()
}
function loadDesiredExperience() {
}
function loadBandDetails() {
rest.getBand(bandId).done(function (band) {
$("#band-name").val(band.name);
$("#band-website").val(band.website);
$("#band-biography").val(band.biography);
bandType.val(band.band_type)
bandStatus.val(band.band_status)
concertCount.val(band.concert_count)
if (band.add_new_members){
$("#new-member-no").iCheck('check').attr('checked', 'checked')
} else {
$("#new-member-yes").iCheck('check').attr('checked', 'checked')
}
if (band.paid_gigs) {
$("#paid-gigs-no").iCheck('check').attr('checked', 'checked')
} else {
$("#paid-gigs-yes").iCheck('check').attr('checked', 'checked')
}
if (band.free_gigs) {
$("#free-gigs-no").iCheck('check').attr('checked', 'checked')
} else {
$("#free-gigs-yes").iCheck('check').attr('checked', 'checked')
}
$('#touring-option').val(band.touring_option ? 'yes' : 'no')
$("#play-commitment").val(band.play_commitment)
$("#hourly-rate").val(band.hourly_rate)
$("#gig-minimum").val(band.gig_minimum)
// Initialize avatar
if (band.photo_url) {
$("#band-avatar").attr('src', band.photo_url);
}
@ -298,7 +393,18 @@
});
});
// TODO: initialize avatar
renderOptionalControls();
$.each(band.instruments, function(index, instrument) {
var h = {}
h.id = instrument.instrument_id
h.level = instrument.proficiency_level
h.approve = true
$selectedInstruments.push(h)
})
renderDesiredExperienceLabel($selectedInstruments)
});
}
@ -438,8 +544,7 @@
$('#selected-band-invitees').append(invitationHtml);
$('#band-invitee-input').select();
selectedFriendIds[data] = true;
}
else {
} else {
$('#band-invitee-input').select();
context.alert('Invitation already exists for this musician.');
}
@ -527,9 +632,23 @@
invitationDialog.showFacebookDialog();
});
$('a#choose-desired-experience').on("click", chooseExperience)
$('#band-setup').on('ifToggled', 'input[type="radio"].dependent-master', renderOptionalControls);
$(friendInput).focus(function() { $(this).val(''); })
}
function chooseExperience(e) {
e.stopPropagation()
ui.launchInstrumentSelectorDialog("new member(s)", $selectedInstruments, function(selectedInstruments) {
$selectedInstruments = selectedInstruments
renderDesiredExperienceLabel($selectedInstruments)
return false
})
return false
}
function initialize(invitationDialogInstance, friendSelectorDialog) {
inviteMusiciansUtil = new JK.InviteMusiciansUtil(app);
inviteMusiciansUtil.initialize(friendSelectorDialog);
@ -542,7 +661,18 @@
'afterShow': afterShow
};
bandType=$("#band-type")
bandStatus=$("#band-status")
concertCount=$("#concert-count")
app.bindScreen('band/setup', screenBindings);
$('input[type=radio]')
.iCheck({
checkboxClass: 'icheckbox_minimal',
radioClass: 'iradio_minimal',
inheritClass: true
});
}
this.initialize = initialize;

View File

@ -0,0 +1,82 @@
(function(context,$) {
"use strict";
context.JK = context.JK || {};
context.JK.InstrumentSelectorDialog = function(app, type, instruments, callback) {
var logger = context.JK.logger;
var rest = context.JK.Rest();
var $dialog = null;
var dialogId = 'instrument-selector-dialog';
var $screen = $('#' + dialogId);
var $btnSelect = $screen.find(".btn-select-instruments");
var $instructions = $screen.find('.instructions');
var $instruments = $screen.find('.instruments');
var $instrumentSelectorContainer = $screen.find('.instrument-selector-container')
var instrumentSelector = new JK.InstrumentSelector(app, $instrumentSelectorContainer);
var $callback = callback
var selectedInstruments = instruments
function beforeShow(data) {
instrumentSelector.initialize(false)
instrumentSelector.render($instrumentSelectorContainer)
instrumentSelector.setSelectedInstruments(selectedInstruments)
}
function afterShow(data) {
// var instrumentList = context.JK.instruments;
// $instruments.empty();
// if (instrumentList) {
// $.each(instrumentList, function(index, val) {
// $instruments.append('<li>');
// var checked = '';
// if (instruments && $.inArray(val.id, selectedInstruments) > -1) {
// checked = 'checked';
// }
// $instruments.append('<input type="checkbox" value="' + val.id + '" ' + checked + ' />' + val.description);
// $instruments.append('</li>');
// });
// }
}
function afterHide() {
$btnSelect.unbind("click")
}
function showDialog() {
return app.layout.showDialog(dialogId);
}
function events() {
$btnSelect.unbind("click").bind("click", function(evt) {
evt.preventDefault();
selectedInstruments = instrumentSelector.getSelectedInstruments()
$callback(selectedInstruments)
app.layout.closeDialog(dialogId);
return false;
});
}
function initialize() {
var dialogBindings = {
'beforeShow' : beforeShow,
'afterShow' : afterShow,
'afterHide': afterHide
};
app.bindDialog(dialogId, dialogBindings);
$instructions.html('Select the instruments and expertise you need for ' + type + ':');
events();
}
this.initialize = initialize;
this.showDialog = showDialog;
}
return this;
})(window,jQuery);

View File

@ -4,18 +4,19 @@
context.JK = context.JK || {};
context.JK.InstrumentSelectorDeferred = null;
context.JK.InstrumentSelector = (function(app) {
context.JK.InstrumentSelector = (function(app, parentSelector) {
var logger = context.JK.logger;
var rest = new context.JK.Rest();
var _instruments = []; // will be list of structs: [ {label:xxx, value:yyy}, {...}, ... ]
var _rsvp = false;
var _parentSelector = null;
if (typeof(_parentSelector)=="undefined") {_parentSelector=null}
var _parentSelector = parentSelector;
var deferredInstruments = null;
var self = this;
function reset() {
$('input[type=checkbox]', _parentSelector).attr('checked', '');
$('input[type="checkbox"]', _parentSelector).attr('checked', '');
if (_rsvp) {
$('select.rsvp_count option', _parentSelector).eq(0).prop('selected', true);
$('select.rsvp_level option', _parentSelector).eq(0).prop('selected', true);
@ -88,7 +89,7 @@
var $selectedVal = $('input[type="checkbox"]:checked', _parentSelector);
$.each($selectedVal, function (index, value) {
var id = $(value).attr('session-instrument-id');
var name = $('label[for="' + $(value).attr('id') + '"]', _parentSelector).text();
var name = $('label[for="' + $(value).attr('id') + '"]', _parentSelector).text().trim();
if (_rsvp) {
var count = $('select[session-instrument-id="' + id + '"].rsvp-count', _parentSelector).val();
var rsvp_level = $('select[session-instrument-id="' + id + '"].rsvp-level', _parentSelector).val();
@ -99,16 +100,16 @@
selectedInstruments.push({id: id, name: name, level: level});
}
});
return selectedInstruments;
}
function setSelectedInstruments(instrumentList) {
if (!instrumentList) {
return;
}
$.each(instrumentList, function (index, value) {
$('input[type=checkbox][id="' + value.id + '"]')
}
$.each(instrumentList, function (index, value) {
$('input[type="checkbox"][session-instrument-id="' + value.id + '"]')
.attr('checked', 'checked')
.iCheck({
checkboxClass: 'icheckbox_minimal',
@ -116,11 +117,11 @@
inheritClass: true
});
if (_rsvp) {
$('select[session-instrument-id="' + value.value + '"].rsvp-count', _parentSelector).val(value.count);
$('select[session-instrument-id="' + value.value + '"].rsvp-level', _parentSelector).val(value.level);
$('select[session-instrument-id="' + value.id + '"].rsvp-count', _parentSelector).val(value.count);
$('select[session-instrument-id="' + value.id + '"].rsvp-level', _parentSelector).val(value.level);
}
else {
$('select[session-instrument-id="' + value.value + '"]').val(value.level);
$('select[session-instrument-id="' + value.id + '"]').val(value.level);
}
});
}

View File

@ -62,6 +62,12 @@
});
}
function launchInstrumentSelectorDialog(type, instruments, callback) {
var instrumentSelectorDialog = new JK.InstrumentSelectorDialog(JK.app, type, instruments, callback);
instrumentSelectorDialog.initialize();
return instrumentSelectorDialog.showDialog();
}
function launchGenreSelectorDialog(type, genres, callback) {
var genreSelectorDialog = new JK.GenreSelectorDialog(JK.app, type, genres, callback);
genreSelectorDialog.initialize();
@ -83,6 +89,7 @@
this.launchRsvpCreateSlotDialog = launchRsvpCreateSlotDialog;
this.launchSessionStartDialog = launchSessionStartDialog;
this.launchGenreSelectorDialog = launchGenreSelectorDialog;
this.launchInstrumentSelectorDialog = launchInstrumentSelectorDialog;
this.launchRecordingSelectorDialog = launchRecordingSelectorDialog;
return this;

View File

@ -1,13 +1,45 @@
@import "client/common.css.scss";
#band-setup, #band-profile {
input, select, textarea {
@include border_box_sizing;
width: 100%;
padding: 2px 4px 2px 2px;
font-family: Raleway, Arial, Helvetica, verdana, arial, sans-serif;
.band-field {
input[type="text"], select, textarea {
@include border_box_sizing;
width: 100%;
padding: 2px 4px 2px 2px;
}
}
td.band-biography {
// Mimic style of easydropdown selects:
input[type="number"] {
border-radius: 6px;
background-color: #c5c5c5;
border-right-style: outset;
border-bottom-style: outset;
height: 15px;
padding: 5px;
}
.radio-field {
display: inline;
padding: 2px;
margin: 0.5em 2em 0.5em 0.25em;
label {
display: inline;
padding: 2px;
}
.iradio-inline {
display: inline-block;
//padding: 2px;
}
}
tr:nth-child(even) td {
padding-bottom: 1em;
}
td.band-biography, td.tdBandGenres {
height:100%;
vertical-align: top;
#band-biography {
@ -18,7 +50,7 @@
.band-setup-genres {
width:100%;
height:90px;
height:200px;
background-color:#c5c5c5;
border:none;
-webkit-box-shadow: inset 2px 2px 3px 0px #888;
@ -346,12 +378,14 @@
width: 100%;
}
#band-setup-form {
padding: 0.25em 0.5em 0.25em 0.25em;
#band-setup-table {
padding: 0.25em 0.5em 1.25em 0.25em;
table.band-form-table {
width: 100%;
margin: 1em;
}
.easydropdown {
padding: 0 3px;
width:100%;
@ -368,10 +402,30 @@
label {
margin-bottom:2px;
}
#desired-experience-label {
font-style: italic;
}
}
.band-setup-genre {
input {
display: inline;
width: auto !important;
}
label {
display: inline;
width: auto;
}
}
label {
font-size: 1.1em;
}
}
#musicians-screen {
#band-screen {
.builder-section {
padding: 10px;
@ -398,7 +452,6 @@
margin-left: auto;
margin-right: auto;
}
}
}

View File

@ -0,0 +1,44 @@
@import "client/common";
#instrument-selector-dialog {
min-height:initial;
.dialog-inner {
.content-body {
max-height: auto;
.content-body-scroller {
height: 350px;
overflow: scroll;
background-color:#c5c5c5;
border: 1px inset;
}
border: 1px solid #222;
margin: 4px 4px 8px 4px;
}
.instructions {
font-size:16px;
}
.dropdown {
box-shadow:0 0 0 0;
}
}
.action-buttons {
margin-bottom:10px;
}
.instruments {
}
label {
display:inline;
color: black;
font-size:16px;
}
}

View File

@ -1,7 +1,9 @@
object @band
attributes :id, :name, :city, :state, :country, :location, :website, :biography, :photo_url, :logo_url, :liker_count, :follower_count, :recording_count, :session_count,
:original_fpfile_photo, :cropped_fpfile_photo, :crop_selection_photo
:original_fpfile_photo, :cropped_fpfile_photo, :crop_selection_photo,
:band_type, :band_status, :concert_count, :add_new_members, :play_commitment, :touring_option, :paid_gigs,
:free_gigs, :hourly_rate, :gig_minimum
child :users => :musicians do
attributes :id, :first_name, :last_name, :name, :photo_url
@ -16,6 +18,10 @@ child :users => :musicians do
end
end
child :instruments => :instruments do
attributes :id, :instrument_id, :proficiency_level
end
child :genres => :genres do
attributes :id, :description
#partial('api_genres/index', :object => @band.genres)

View File

@ -7,126 +7,228 @@
= render "screen_navigation"
.content-body
.content-body-scroller
form#band-setup-form
div style="display:block;"
#band-setup-step-0.band-step.content-wrapper style="padding:10px 35px10px 35px;"
h2 edit profile: basics
table width="100%"
tr
td colspan="2"
tr#name_row
td colspan="2"
.band-photo.hidden
span.field
a.band-avatar-profile href="#"
= image_tag "shared/avatar_generic_band.png", {:id => "band-avatar", :align=>"absmiddle", :height => 88, :width => 88 }
span.field
a#band-change-photo.small.ml20 href="#"
| Upload band photo.
.band-name
.field
label for="band-name"
| Band Name:
input#band-name type="text" maxlength="1024" value=""
/ td#tdBandWebsite[]
/ .field
/ label for="band-website"
/ | Web Site:
/ input#band-website[type="text" maxlength="4000" value=""]
tr
td.band-country
.field
label for="band-country"
| Country:
select#band-country
td.band-biography rowspan="3"
.field
label for="band-biography"
| Description / Bio:
textarea#band-biography rows="8"
tr
td.band-region
.field
label for="band-region"
| State/Region:
select#band-region
tr
td.band-city
.field
label for="band-city"
| City:
select#band-city
/ td#tdBandGenres[valign="top"]
/ .field
/ label for="band-genres"
/ | Genres:
/ .band-setup-genres.w90
/ table#band-genres[width="100%" cellpadding="10" cellspacing="6"]
#band-setup-step-1.band-step.content-wrapper
h2 edit profile: musical experience
#band-setup-step-2.band-step.content-wrapper
h2 edit profile: current interests
#band-setup-step-3.band-step.content-wrapper
h2 edit profile: online presence & performance samples
#band-setup-step-4.band-step.content-wrapper
h2 invite members
br
#band-setup-invite-musicians
br
br
| If your bandmates are not on JamKazam yet, use any of the options below to invite them to join the service.
br
br
.left.mr20
.left
a.btn-email-invitation
= image_tag("content/icon_gmail.png", :size => "24x24", :align => "absmiddle")
.right.mt5.ml5
| E-mail
.left.mr20
.left
a.btn-facebook-invitation
= image_tag("content/icon_facebook.png", :size => "24x24", :align => "absmiddle")
.right.mt5.ml5
| Facebook
.left.left
.left
a.btn-gmail-invitation
= image_tag("content/icon_google.png", :size => "24x24", :align => "absmiddle")
.right.mt5.ml5
| Google+
/ br clear="all"
/ .right
/ a#btn-band-setup-back.button-grey
/ | BACK
/ |   
/ a#btn-band-setup-save.button-orange
/ | CREATE BAND
/ .clearall
form#band-setup-form
#band-setup-step-0.band-step.content-wrapper
h2 set up band: basics
table.band-form-table
tr
td colspan="2"
br clear="all"
.right
a#btn-band-setup-cancel.nav-button.button-grey
| CANCEL   
a#btn-band-setup-back.nav-button.button-grey.hidden
| BACK
a#btn-band-setup-next.nav-button.button-orange
| SAVE &amp; NEXT
.clearall
tr#name_row
td colspan="2"
.band-photo.hidden
span.field
a.band-avatar-profile href="#"
= image_tag "shared/avatar_generic_band.png", {:id => "band-avatar", :align=>"absmiddle", :height => 88, :width => 88 }
span.field
a#band-change-photo.small.ml20 href="#"
| Upload band photo.
.band-name
.field.band-field
label for="band-name"
| Band Name:
input#band-name type="text" maxlength="1024" value=""
/ td#tdBandWebsite[]
/ .field
/ label for="band-website"
/ | Web Site:
/ input#band-website[type="text" maxlength="4000" value=""]
tr
td.band-country
.field.band-field
label for="band-country"
| Country:
select#band-country
td.band-biography rowspan="3"
.field.band-field
label for="band-biography"
| Description / Bio:
textarea#band-biography rows="8"
tr
td.band-region
.field.band-field
label for="band-region"
| State/Region:
select#band-region
tr
td.band-city
.field.band-field
label for="band-city"
| City:
select#band-city
#band-setup-step-1.band-step.content-wrapper
h2 set up band: musical experience
table.band-form-table
tr
td#tdBandGenres rowspan="3"
label for="band-genres" What genres do you play?
.band-setup-genres
table#band-genres
td
.field
label for="band-type" Type
select#band-type.easydropdown name="band_type"
option value="" Not Specified
option value="virtual" Virtual
option value="physical" Physical
tr
td
.field
label for="band-status" Status
select#band-status.easydropdown name="band_status"
option value="" Not Specified
option value="amateur" Amateur
option value="professional" Professional
tr
td
.field
label for="concert-count" Concert Gigs Played
select#concert-count.easydropdown name="concert_count"
option value="" Not Specified
option value="0" Zero
option value="1" Under 10
option value="2" 10 to 50
option value="3" 50 to 100
option value="4" Over 100
#band-setup-step-2.band-step.content-wrapper
h2 set up band: current interests
table.band-form-table
tr
td
label.strong-label for="new-member"
| We want to add a new member &nbsp;
a.help help-topic="profile-interests-virtual-band" [?]
td.new-member-dependent
label for="desired-experience"
| Desired Experience &nbsp;
a#choose-desired-experience select
td.new-member-dependent
label for="play-commitment" Play Commitment
td.new-member-dependent
label for="touring-option" Touring Option
tr
td
.radio-field
input#new-member-yes.iradio-inline.dependent-master type="radio" name="add_new_members" value='yes'
label for='new-member-yes' Yes
.radio-field
input#new-member-no.iradio-inline.dependent-master type="radio" name="add_new_members" value='no'
label for='new-member-no' No
td.new-member-dependent
#desired-experience-label None specified
td.new-member-dependent
select#play-commitment.easydropdown name="play_commitment"
option value="1" Infrequent
option value="2" Once a Week
option value="3" 2-3 Times Per Week
option value="4" 4+ Times Per Week
td.new-member-dependent
select#touring-option.easydropdown name="touring_option"
option value="yes" Yes
option value="no" No
tr
td
label.strong-label for="paid-gigs"
| We want to play paid gigs &nbsp;
a.help help-topic="profile-interests-paid-gigs" [?]
td.paid-gigs-dependent
label for="hourly-rate" Hourly Rate:
td.paid-gigs-dependent
label for="gig-minimum" Gig Minimum:
tr
td
.radio-field
input#paid-gigs-yes.iradio-inline.dependent-master type="radio" name="paid_gigs" value='yes'
label for="paid-gigs-yes" Yes
.radio-field
input#paid-gigs-no.iradio-inline.dependent-master type="radio" name="paid_gigs" value='no'
label for="paid-gigs-no" No
td.paid-gigs-dependent
input#hourly-rate type="number" name="hourly_rate"
td.paid-gigs-dependent
input#gig-minimum type="number" name="gig_minimum"
tr
td
label.strong-label for="free-gigs"
| We want to play free gigs &nbsp;
a.help help-topic="profile-interests-free-gigs" [?]
tr
td
.radio-field
input#free-gigs-yes.iradio-inline type="radio" name="free_gigs" value='yes'
label for="free-gigs-yes" Yes
.radio-field
input#free-gigs-no.iradio-inline type="radio" name="free_gigs" value='no'
label for="free-gigs-no" No
#band-setup-step-3.band-step.content-wrapper
h2 set up band: online presence & performance samples
table.band-form-table
#band-setup-step-4.band-step.content-wrapper
h2 invite members
br
#band-setup-invite-musicians
br
br
| If your bandmates are not on JamKazam yet, use any of the options below to invite them to join the service.
br
br
.left.mr20
.left
a.btn-email-invitation
= image_tag("content/icon_gmail.png", :size => "24x24", :align => "absmiddle")
.right.mt5.ml5
| E-mail
.left.mr20
.left
a.btn-facebook-invitation
= image_tag("content/icon_facebook.png", :size => "24x24", :align => "absmiddle")
.right.mt5.ml5
| Facebook
.left.left
.left
a.btn-gmail-invitation
= image_tag("content/icon_google.png", :size => "24x24", :align => "absmiddle")
.right.mt5.ml5
| Google+
/ br clear="all"
/ .right
/ a#btn-band-setup-back.button-grey
/ | BACK
/ |   
/ a#btn-band-setup-save.button-orange
/ | CREATE BAND
/ .clearall
br clear="all"
.right
a#btn-band-setup-cancel.nav-button.button-grey
| CANCEL   
a#btn-band-setup-back.nav-button.button-grey.hidden
| BACK
a#btn-band-setup-next.nav-button.button-orange
| SAVE &amp; NEXT
.clearall
script#template-band-setup-genres type="text/template"
tr
tr.band-setup-genre
tr
td
input value="{id}" {checked} type="checkbox"
| {description}
td
<input id="{id}" value="{id}" {checked} type="checkbox" />{description}
script#template-band-invitation type="text/template"
.invitation user-id="{userId}"
| {userName}
.invitation user-id="{{userId}}"
| {{userName}}
a
img src="shared/icon_delete_sm.png" width="13" height="13"

View File

@ -38,6 +38,7 @@
= render 'dialogs/loginRequiredDialog'
= render 'dialogs/jamtrackPaymentHistoryDialog'
= render 'dialogs/singlePlayerProfileGuard'
= render 'dialogs/instrumentSelectorDialog'
= render 'dialogs/genreSelectorDialog'
= render 'dialogs/recordingSelectorDialog'
= render 'dialogs/soundCloudPlayerDialog'

View File

@ -0,0 +1,17 @@
.dialog.dialog-overlay-sm{layout: 'dialog', 'layout-id' => 'instrument-selector-dialog', id: 'instrument-selector-dialog'}
.content-head
= image_tag "content/icon_checkmark_circle.png", {:width => 20, :height => 20, :class => 'content-icon' }
%h1
= 'select instruments & expertise'
.dialog-inner
%strong
.instructions
%br{:clear => "all"}/
.content-body
.content-body-scroller
.instrument-selector-container
=render "users/instrument_selector"
.right.action-buttons
%a.button-grey.btn-cancel-dialog{'layout-action' => 'cancel'} CANCEL
%a.button-orange.btn-select-instruments SELECT

View File

@ -2,7 +2,7 @@
<% Instrument.standard_list.each do |instrument| %>
<tr>
<td><input name="<%= instrument.id %>" type="checkbox" /><%= instrument.description %></td>
<td align="right" width="50%"><select class='proficiency_selector'><option value="1">Beginner</option><option value="2">Intermediate</option><option value="3">Expert</option></select></td>
<td align="right" width="50%"><select class='proficiency_selector'<option value="1">Beginner</option><option value="2">Intermediate</option><option value="3">Expert</option></select></td>
</tr>
<% end %>
</table>