Home screen and session create screen re-worked

This commit is contained in:
Seth Call 2016-04-22 14:59:48 -05:00
parent b13ffe2d32
commit a14b58f2fe
16 changed files with 500 additions and 126 deletions

View File

@ -927,6 +927,31 @@ module JamRuby
end
end
def student_test_drive_no_bill(lesson_session)
@student = lesson_session.student
@teacher = lesson_session.teacher
@session_name = lesson_session.music_session.name
@session_description = lesson_session.music_session.description
@session_date = lesson_session.slot.pretty_scheduled_start(true)
@session_url = lesson_session.web_url
@lesson_session = lesson_session
email = @student.email
subject = "Your TestDrive with #{@teacher.name} will not be billed"
unique_args = {:type => "student_test_drive_no_bill"}
sendgrid_category "Notification"
sendgrid_unique_args :type => unique_args[:type]
sendgrid_recipients([email])
sendgrid_substitute('@USERID', [@student.id])
mail(:to => email, :subject => subject) do |format|
format.text
format.html { render :layout => "from_user_mailer" }
end
end
# successfully completed, but no more test drives left
def student_test_drive_lesson_done(lesson_session)

View File

@ -6,7 +6,7 @@
Hello <%= @student.name %>,
</p>
<p>You will not be billed for today's session with <%= @teacher.name %>
<p>You will not be billed for today's session with <%= @teacher.name %>.
<br/>
<br/>
Click the button below to see more information about this session.

View File

@ -1,5 +1,5 @@
Hello <%= @student.name %>,
You will not be billed for today's session with <%= @teacher.name %>
You will not be billed for today's session with <%= @teacher.name %>.
To see this lesson, click here: <%= @lesson_session.web_url %>

View File

@ -0,0 +1,23 @@
<% provide(:title, "Your TestDrive with #{@teacher.name} will not be billed") %>
<% provide(:photo_url, @teacher.resolved_photo_url) %>
<% content_for :note do %>
<p>
Hello <%= @student.name %>,
</p>
<p>You have not used a credit for today's TestDrive with <%= @teacher.name %>.
<br/>
<br/>
Click the button below to see more information about this session.
</p>
<p>
<a href="<%= @lesson_session.web_url %>" style="margin: 8px 0 0 0;background-color: #ed3618;border: solid 1px #F27861;padding: 3px 10px;font-size: 12px;font-weight: 300;cursor: pointer;color: #FC9;text-decoration: none;line-height: 12px;text-align: center;">VIEW
LESSON DETAILS</a>
</p>
<p>
Best Regards,<br>Team JamKazam
</p>
<% end %>

View File

@ -0,0 +1,5 @@
Hello <%= @student.name %>,
You have not used a credit for today's TestDrive with <%= @teacher.name %>.
To see this lesson, click here: <%= @lesson_session.web_url %>

View File

@ -22,6 +22,7 @@ module JamRuby
CREATE_TYPE_IMMEDIATE = 'immediately'
CREATE_TYPE_QUICK_START = 'quick-start'
CREATE_TYPE_LESSON = 'lesson'
CREATE_TYPE_QUICK_PUBLIC = 'quick-public'
attr_accessor :legal_terms, :language_description, :access_description, :scheduling_info_changed
@ -323,11 +324,29 @@ module JamRuby
# let session be restarted for up to 2 hours after finishing
session_finished = "(music_sessions.session_removed_at > NOW() - '2 hour'::INTERVAL)"
query = MusicSession.where("music_sessions.canceled = FALSE")
query = MusicSession.joins(
%Q{
LEFT OUTER JOIN
invitations
ON
music_sessions.id = invitations.music_session_id AND invitations.receiver_id = '#{user.id}'
}
)
query = query.where("music_sessions.canceled = FALSE")
query = query.where('music_sessions.fan_access = TRUE or music_sessions.musician_access = TRUE') if only_public
query = query.where("music_sessions.user_id = '#{user.id}'")
#query = query.where("music_sessions.user_id = '#{user.id}' OR invitations.id IS NOT NULL")
query = query.where("music_sessions.id in (
select distinct(rs.music_session_id)
from rsvp_slots rs
where rs.id in (
select rrrs.rsvp_slot_id
from rsvp_requests rr
inner join rsvp_requests_rsvp_slots rrrs on rr.id = rrrs.rsvp_request_id
where rr.user_id = '#{user.id}'AND rrrs.chosen = true
)
) OR invitations.id IS NOT NULL OR music_sessions.user_id = '#{user.id}'")
query = query.where("music_sessions.scheduled_start IS NULL OR #{session_not_started} OR #{session_finished} OR #{session_started_not_finished}")
query = query.where("music_sessions.create_type IS NULL OR music_sessions.create_type != '#{CREATE_TYPE_QUICK_START}'")
query = query.where("music_sessions.create_type IS NULL OR (music_sessions.create_type != '#{CREATE_TYPE_QUICK_START}' AND music_sessions.create_type != '#{CREATE_TYPE_QUICK_PUBLIC}')")
query = query.order("music_sessions.scheduled_start ASC")
query
@ -339,7 +358,7 @@ module JamRuby
filter_approved = only_approved ? 'AND rrrs.chosen = true' : ''
MusicSession.where(%Q{music_sessions.canceled = FALSE AND
(music_sessions.create_type is NULL OR music_sessions.create_type != '#{CREATE_TYPE_QUICK_START}') AND
(music_sessions.create_type is NULL OR (music_sessions.create_type != '#{CREATE_TYPE_QUICK_START}' AND music_sessions.create_type != '#{CREATE_TYPE_QUICK_PUBLIC}')) AND
(music_sessions.scheduled_start is NULL OR music_sessions.scheduled_start > NOW() - '4 hour'::INTERVAL) AND
music_sessions.id in (
select distinct(rs.music_session_id)
@ -760,7 +779,7 @@ module JamRuby
query = query.offset(offset)
query = query.limit(limit)
query = query.where("music_sessions.create_type IS NULL OR (music_sessions.create_type != ? AND music_sessions.create_type != ?)", MusicSession::CREATE_TYPE_QUICK_START, MusicSession::CREATE_TYPE_IMMEDIATE)
query = query.where("music_sessions.create_type IS NULL OR (music_sessions.create_type != ? AND music_sessions.create_type != ? AND music_sessions.create_type != ?)", MusicSession::CREATE_TYPE_QUICK_START, MusicSession::CREATE_TYPE_IMMEDIATE, MusicSession::CREATE_TYPE_QUICK_PUBLIC)
query = query.where("music_sessions.genre_id = ?", genre) unless genre.blank?
query = query.where('music_sessions.language = ?', lang) unless lang.blank?
query = query.where("(description_tsv @@ to_tsquery('jamenglish', ?))", ActiveRecord::Base.connection.quote(keyword) + ':*') unless keyword.blank?

View File

@ -2051,7 +2051,7 @@ module JamRuby
self.remaining_test_drives = self.remaining_test_drives + 1
self.save(validate: false)
UserMailer.test_drive_no_bill(self, lesson_session).deliver
UserMailer.student_test_drive_no_bill(lesson_session).deliver
end
def used_test_drives

View File

@ -112,7 +112,7 @@ describe LessonBooking do
purchase.last_billing_attempt_at.should eql time
purchase.sent_billing_notices.should eql false
user.card_approved(create_stripe_token, '78759')
user.card_approved(create_stripe_token, '78759', booking.id)
user.save!
day = day + 1
@ -137,7 +137,7 @@ describe LessonBooking do
end
it "advances to next month" do
user.card_approved(create_stripe_token, '78759')
user.card_approved(create_stripe_token, '78759', booking.id)
user.save!
day = Date.new(2016, 1, 20)
@ -258,7 +258,7 @@ describe LessonBooking do
purchase.billed.should be false
# now that it's suspended, let's unsuspend it
user.card_approved(create_stripe_token, '78759')
user.card_approved(create_stripe_token, '78759', booking.id)
user.save!
day = day + 1

View File

@ -362,6 +362,31 @@ describe MusicSession do
end
describe "scheduled" do
it "includes any RSVP'ed" do
rsvp_request = FactoryGirl.create(:rsvp_request_for_multiple_slots, user: some_user, music_session: music_session1, number: 2, chosen:true)
approved_rsvps = music_session1.approved_rsvps
approved_rsvps.length.should == 2
sessions = MusicSession.scheduled(approved_rsvps[0])
sessions.length.should == 1
sessions = MusicSession.scheduled(approved_rsvps[1])
sessions.length.should == 1
end
it "includes invited" do
invitee = FactoryGirl.create(:user, last_jam_audio_latency: 30, last_jam_locidispid: 3)
FactoryGirl.create(:friendship, user: creator, friend: invitee)
FactoryGirl.create(:friendship, user: invitee, friend: creator)
music_session = FactoryGirl.create(:music_session, creator: creator)
FactoryGirl.create(:invitation, receiver:invitee, sender:creator, music_session: music_session)
sessions = MusicSession.scheduled(invitee)
sessions.length.should == 1
end
it "excludes based on time-range" do
session = FactoryGirl.create(:music_session, scheduled_start: Time.now)

View File

@ -89,6 +89,13 @@
if(gon.allow_force_native_client) {
$('body').on('keyup', switchClientMode);
}
$('.homecard.jamclass').on('click', function() {
context.JK.Banner.showNotice("Coming Soon!", "JamClass is just around the corner.")
return false;
})
}
this.initialize = function() {

View File

@ -222,10 +222,10 @@
var childLayout = me.getCardLayout(gridWidth, gridHeight, gridRows, gridCols,
childRow, childCol, childRowspan, childColspan);
if($(this).is('.feed')) {
if($(this).is('.jamtrack')) {
feedCardLayout = childLayout;
}
else if($(this).is('.findsession')) {
else if($(this).is('.jamclass')) {
findCardLayout = childLayout;
}

View File

@ -17,7 +17,6 @@ UserStore = context.UserStore
{beforeShow: @beforeShow, afterShow: @afterShow, beforeHide: @beforeHide})
onUserChanged: (userState) ->
console.log("userState", userState)
@setState({user: userState?.user})
checkboxChanged: (e) ->

View File

@ -48,6 +48,10 @@
var $btnSelectFiles = null;
var $selectedFilenames = null;
var $uploadSpinner = null;
var $quickStartSoloBtn = null;
var $quickStartOpenBtn = null;
var $startOrScheduledBtn = null;
var $featureSessions = null;
// Step1 layout
var $screenStep1 = null;
@ -57,17 +61,19 @@
var $fetchingSpinner = null;
var $fetchingSpinnerLabel = null;
var $noSessionFound = null;
var $sessionHeader = null;
var scheduledSessions = {};
// Step4 layout
var $policyTypes = null;
var TOTAL_STEPS = 5;
var STEP_SELECT_TYPE = 0;
var STEP_SELECT_PLAYING = 1;
var STEP_SELECT_INVITE = 2;
var STEP_SELECT_POLICY = 3;
var STEP_SELECT_CONFIRM = 4;
var TOTAL_STEPS = 6;
var STEP_HOME = 0;
var STEP_SELECT_TYPE = 1;
var STEP_SELECT_PLAYING = 2;
var STEP_SELECT_INVITE = 3;
var STEP_SELECT_POLICY = 4;
var STEP_SELECT_CONFIRM = 5;
var ONE_HOUR = 3600 * 1000;
var ONE_MINUTE = 60 * 1000;
@ -92,6 +98,84 @@
function afterLoadScheduledSessions(sessionList) {
$featureSessions.empty()
createSessionSettings.session_count = sessionList.length;
if (createSessionSettings.session_count == 0) {
createSessionSettings.selectedSessionId = null;
$featureSessions.append('<tr><td colspan="4">No sessions</td></tr>')
}
else {
$.each(sessionList, function (i, session) {
scheduledSessions[session.id] = session;
});
context._.each(sessionList, function (session) {
session.scheduled_start = new Date(session.scheduled_start).toDateString() + ', ' +
context.JK.formatUtcTime(new Date(session.scheduled_start), false);
var time = session.pretty_scheduled_start_with_timezone;
var receivedUsers = {}
var sessionLink = '/client#/account/sessionDetail/' + session.id
var isActive = session.active_music_session && session.active_music_session.participants.length > 0
if(isActive) {
time = 'NOW'
context._.each(session.active_music_session.participants, function(participant) {
receivedUsers[participant.id] = participant.name;
})
sessionLink = '/sessions/' + session.id
}
else {
context._.each(session.approved_rsvps, function(approved_rsvp) {
receivedUsers[approved_rsvp.id] = approved_rsvp.name;
})
context._.each(session.invitations, function(invitation) {
receivedUsers[invitation.receiver_id] = invitation.receiver_name;
})
}
var $row = $('<tr><td class="session-link"></td><td class="session-users"></td><td>' + session.pretty_scheduled_start_short + '</td><td class="actions"></td></tr>')
var $sessionCell = $row.find('.session-link')
if (isActive) {
var $sessionLink = $('<a href="' + sessionLink + '" style="color:#fc0" rel="external">' + session.name + '</a>')
$sessionCell.append($sessionLink)
context.JK.popExternalLinks($sessionCell)
}
else
{
var $sessionLink = $('<a href="' + sessionLink + '" style="color:#fc0">' + session.name + '</a>')
$sessionCell.append($sessionLink)
}
var $actionsCell = $row.find('.actions');
var $actionsLink = $('<a href="/client#/session/' + session.id + '" style="color:#fc0">join</a>')
$actionsCell.append($actionsLink)
var msg = '';
context._.each(receivedUsers, function(value, key) {
var url = '/client#/profile/' + key
msg += '<a href="' + url +'">' + value + '</a>, '
})
if (msg.length > 0) {
msg = msg.slice(0, -2)
}
var $usersCell = $row.find('.session-users')
$usersCell.append(msg)
$featureSessions.append($row);
});
}
}
function afterLoadScheduledSessions2(sessionList) {
createSessionSettings.session_count = sessionList.length;
if (createSessionSettings.session_count == 0) {
@ -157,6 +241,30 @@
}
}
function clickQuickStartSolo () {
logger.debug("user clicked quick start solo")
createSessionSettings.createType = '<%= MusicSession::CREATE_TYPE_QUICK_START %>'
next();
return false;
}
function clickQuickStartPublic () {
logger.debug("user clicked quick start public")
createSessionSettings.createType = '<%= MusicSession::CREATE_TYPE_QUICK_PUBLIC %>'
next();
return false;
}
function clickStartOrSchedule () {
logger.debug("user clicked start or scheduled")
toggleCreateType(null, '<%= MusicSession::CREATE_TYPE_IMMEDIATE %>')
next();
return false;
}
function afterLoadUserDetail(userDetail) {
var userInstruments = [];
$.each(userDetail.instruments, function(index, userInstrument) {
@ -180,23 +288,33 @@
});
}
function beforeShowStep1() {
function beforeShowStep0() {
$scheduledSessions.empty();
$noSessionFound.hide();
$fetchingSpinner.show();
$fetchingSpinnerLabel.show();
rest.findScheduledSessions({})
.done(afterLoadScheduledSessions)
.fail(app.ajaxError)
.always(function(response) {
$fetchingSpinner.hide();
$fetchingSpinnerLabel.hide();
});
.done(afterLoadScheduledSessions)
.fail(app.ajaxError)
.always(function(response) {
$fetchingSpinner.hide();
$fetchingSpinnerLabel.hide();
});
rest.getUserDetail()
.done(afterLoadUserDetail)
.fail(app.ajaxError);
.done(afterLoadUserDetail)
.fail(app.ajaxError);
}
function beforeShowStep1() {
$scheduledSessions.empty();
$noSessionFound.hide();
$fetchingSpinner.show();
$fetchingSpinnerLabel.show();
createSessionSettings.startDate = createSessionSettings.startDate || (new Date().toDateString());
@ -362,6 +480,10 @@
$screen.find('#session-policy-disp').html(createSessionSettings.session_policy);
}
function beforeMoveStep0() {
return true;
}
function beforeMoveStep1() {
if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>') {
createSessionSettings.selectedSessionId = $scheduledSessions.find('.iradio_minimal.checked input[name="scheduled-session-info"]').attr('data-session-id');
@ -427,6 +549,24 @@
createSessionSettings.recurring_mode.label = 'Not Recurring';
createSessionSettings.recurring_mode.value = 'once';
}
else if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_PUBLIC %>') {
createSessionSettings.genresValues = ['Pop'];
createSessionSettings.genres = ['pop'];
createSessionSettings.timezone.label = "(GMT-06:00) Central Time (US & Canada)";
createSessionSettings.timezone.value = "Central Time (US & Canada),America/Chicago";
createSessionSettings.name = "Open Session";
createSessionSettings.description = "Feel free to join this session, it's open!";
createSessionSettings.notations = [];
createSessionSettings.language.label = 'English';
createSessionSettings.language.value = 'eng';
createSessionSettings.session_policy = 'Standard';
createSessionSettings.musician_access.label = "Musicians may join at will";
createSessionSettings.musician_access.value = "musicians";
createSessionSettings.fans_access.label = "Fans can listen to you while you're playing in session, and can text chat with each other while listening.";
createSessionSettings.fans_access.value = "listen-chat-each";
createSessionSettings.recurring_mode.label = 'Not Recurring';
createSessionSettings.recurring_mode.value = 'once';
}
else {
createSessionSettings.startDate = $screen.find('#session-start-date').val();
createSessionSettings.startTime = $startTimeList.val();
@ -660,7 +800,7 @@
data.legal_terms = true;
data.language = createSessionSettings.language.value;
data.band = createSessionSettings.band.value;
if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>' || createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_IMMEDIATE %>') {
if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>' || createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_IMMEDIATE %>' || createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_PUBLIC %>') {
data.start = new Date().toDateString() + ' ' + context.JK.formatUtcTime(new Date(), false);
data.duration = "60";
}
@ -748,7 +888,7 @@
$('#create-session-buttons .btn-next').off('click');
var newSessionId = response.id;
if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>' || createSessionSettings.createType == "immediately") {
if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>' || createSessionSettings.createType == "immediately" || createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_PUBLIC %>') {
joinSession(newSessionId);
}
else {
@ -766,22 +906,26 @@
var STEPS = {
0: {
beforeShow: beforeShowStep0,
beforeMove: beforeMoveStep0
},
1: {
beforeShow: beforeShowStep1,
beforeMove: beforeMoveStep1
},
1: {
2: {
beforeShow: beforeShowStep2,
beforeMove: beforeMoveStep2
},
2: {
3: {
beforeShow: beforeShowStep3,
beforeMove: beforeMoveStep3
},
3: {
4: {
beforeShow: beforeShowStep4,
beforeMove: beforeMoveStep4
},
4: {
5: {
beforeShow: beforeShowStep5,
beforeMove: beforeMoveStep5
}
@ -850,6 +994,12 @@
$createSessionSteps.find("#todo-steps").append($("<div class='clearall'></div>"));
$screen.find('#create-session-steps').replaceWith($createSessionSteps);
if (step == 0) {
$sessionHeader.hide()
}
else {
$sessionHeader.show()
}
beforeShowStep();
// update buttons
@ -862,6 +1012,10 @@
// hide back button if 1st step or last step
if (step == 0) {
$btnBack.hide();
$btnNext.hide();
}
else {
$btnNext.show();
}
if (step == STEP_SELECT_TYPE && createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>' && createSessionSettings.selectedSessionId == null) {
@ -907,14 +1061,16 @@
function willOptionStartSession() {
return createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>' ||
createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_IMMEDIATE %>' ||
createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>';
createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>' ||
createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_PUBLIC%>';
}
function optionRequiresMultiplayerProfile() {
return createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>' ||
createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_IMMEDIATE %>' ||
createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_RSVP %>' ||
createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_SCHEDULE_FUTURE %>';
createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_SCHEDULE_FUTURE %>' ||
createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_PUBLIC %>';
}
function next(event) {
@ -923,7 +1079,7 @@
return false;
}
if(createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>') {
if(createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>' || createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_PUBLIC %>') {
// short-cut added for private sessions; just get it going
beforeMoveStep1(); // this will populate the createSessionSettings structure
startSessionClicked(); // and this will create the session
@ -939,6 +1095,7 @@
var valid = beforeMoveStep();
if (!valid) {
console.log("beforeMoveStep check invalid")
return false;
}
@ -947,7 +1104,7 @@
}
if ($(this).is('.disabled')) return false;
if ($.inArray(createSessionSettings.createType, ['<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>', '<%= MusicSession::CREATE_TYPE_QUICK_START %>']) > -1)
if ($.inArray(createSessionSettings.createType, ['<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>', '<%= MusicSession::CREATE_TYPE_QUICK_START %>', '<%= MusicSession::CREATE_TYPE_QUICK_PUBLIC %>']) > -1)
step = STEP_SELECT_CONFIRM;
else
step++;
@ -1094,6 +1251,8 @@
context.JK.helpBubble($sessionPlusMusiciansLabel, 'session-plus-musicians', {}, {offsetParent: $sessionPlusMusiciansLabel.closest('.content-wrapper')});
$editScheduledSessions.on('click', onEditSessions);
context.JK.popExternalLinks($screen)
}
function changeSelectedFiles() {
@ -1144,19 +1303,19 @@
if ($.inArray(createSessionSettings.createType, ['<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>', '<%= MusicSession::CREATE_TYPE_QUICK_START %>']) > -1) {
if (step == STEP_SELECT_CONFIRM) {
for (var i = 1; i < 4; i++) {
$screen.find('#create-session-steps .session-stepnumber[data-step-number="' + i + '"]').hide();
}
$screen.find('#create-session-steps .session-stepnumber[data-step-number="4"]').html("2");
$screen.find('#create-session-steps .session-stepnumber[data-step-number="0"]').on('click', back);
$screen.find('#create-session-steps .session-stepnumber[data-step-number="0"]').addClass('session-stephover');
}
else if (step == STEP_SELECT_TYPE) {
for (var i = 2; i < 5; i++) {
$screen.find('#create-session-steps .session-stepnumber[data-step-number="' + i + '"]').hide();
}
$screen.find('#create-session-steps .session-stepnumber[data-step-number="4"]').html("5");
var $nextStep = $screen.find('#create-session-steps .session-stepnumber[data-step-number="1"]');
$screen.find('#create-session-steps .session-stepnumber[data-step-number="5"]').html("2");
$screen.find('#create-session-steps .session-stepnumber[data-step-number="1"]').on('click', back);
$screen.find('#create-session-steps .session-stepnumber[data-step-number="1"]').addClass('session-stephover');
}
else if (step == STEP_SELECT_TYPE) {
for (var i = 3; i < 6; i++) {
$screen.find('#create-session-steps .session-stepnumber[data-step-number="' + i + '"]').hide();
}
$screen.find('#create-session-steps .session-stepnumber[data-step-number="5"]').html("5");
var $nextStep = $screen.find('#create-session-steps .session-stepnumber[data-step-number="2"]');
if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>') {
$nextStep.on('click', next);
$nextStep.addClass('session-stephover')
@ -1176,10 +1335,12 @@
}
}
function toggleCreateType(event) {
function toggleCreateType(event, checkedType) {
var $checkedType = $(event.target);
var checkedType = $checkedType.attr('info-value');
if(!checkedType) {
var $checkedType = $(event.target);
var checkedType = $checkedType.attr('info-value');
}
if (checkedType == createSessionSettings.createType) return;
@ -1293,6 +1454,10 @@
$inputFiles.on('change', changeSelectedFiles);
$btnSelectFiles.on('click', toggleSelectFiles);
$quickStartSoloBtn.on('click', clickQuickStartSolo)
$quickStartOpenBtn.on('click', clickQuickStartPublic)
$startOrScheduledBtn.on('click', clickStartOrSchedule)
}
function initialize(invitationDialogInstance, friendSelectorDialog, instrumentSelectorInstance, instrumentRSVPSelectorInstance) {
@ -1332,6 +1497,11 @@
$fetchingSpinner = $screen.find('#fetching-spinner');
$fetchingSpinnerLabel = $screen.find('#fetching-spinner-label');
$noSessionFound = $screen.find("#scheduled-session-not-found");
$sessionHeader = $screen.find('.session-header')
$quickStartSoloBtn = $screen.find('.quick-start-solo')
$quickStartOpenBtn = $screen.find('.quick-start-open')
$startOrScheduledBtn = $screen.find('.start-or-schedule')
$featureSessions = $screen.find('.featured-sessions tbody')
initializeControls();
events();

View File

@ -17,6 +17,93 @@
font-size: 13px;
}
.column {
h2 {
margin-bottom:20px;
}
&.column-left {
width:60%;
float:left;
padding-right:10px;
@include border_box_sizing;
}
&.column-right{
width:40%;
float:left;
padding-left:10px;
@include border_box_sizing;
p {
margin:0;
font-size: 12px;
line-height: 125%;
width:100%;
@include border_box_sizing;
}
a.button-orange {
margin:0 0 15px 3px;
}
}
}
.find-sessions, .view-the-feed {
margin-bottom:20px;
}
.view-the-feed {
margin-top:30px;
}
.view-the-feed-learn-more, .find-session-learn-more {
margin-top:10px;
font-size:12px;
}
.quick-option {
position:relative;
margin-bottom:20px;
}
.quick-options {
margin: 0 0 35px 0;
a {
width:130px;
margin-left:0px;
position:absolute;
top:5px;
left: 0;
}
p {
margin:0;
font-size: 12px;
line-height: 125%;
width:100%;
padding-left:176px;
@include border_box_sizing;
}
a.schedule-learn-more {
position:static;
margin-left:176px;
font-size:12px;
padding-top:12px;
}
}
.learn-more-sessions-header {
margin-top:40px;
}
.learn-more-sessions {
a {
display:block;
font-size:12px;
margin-bottom:3px;
}
p {
margin-bottom:20px !important;
}
}
table.featured-sessions {
.actions {
text-align:center;
}
.session-users {
a { color:#fc0; }
}
}
.session-header {
padding: 15px 35px;
.session-stepnumber {
@ -101,7 +188,7 @@
padding-left:5px;
}
#session-step-1 {
#session-step-2 {
ul#create-session-type {
margin-left: 0px;
list-style: none;
@ -143,7 +230,7 @@
}
}
#session-step-2 {
#session-step-3 {
#select-genre {
padding-bottom: 10px;
@ -200,7 +287,7 @@
}
}
#session-step-3 {
#session-step-4 {
.session-instrumentlist {
padding: 10px;
@ -275,7 +362,7 @@
}
}
#session-step-4 {
#session-step-5 {
.terms-checkbox {
float:left;
@ -305,7 +392,7 @@
}
#session-step-5 {
#session-step-6 {
}
#session-name-disp {

View File

@ -1,81 +1,64 @@
.screen.no-login-required layout="screen" layout-id="home"
/ Layout is different if jam_tracks tile available:
-jamtracks=Rails.configuration.jam_tracks_available || (current_user && current_user.admin)
-if (jamtracks)
-small_tile_size="2.4"
-column_positions=["0.0,1", "2.4,1", "4.8,1", "7.2,1", "9.6,1"]
-else
-small_tile_size="3.0"
-column_positions=["0,1", "3,1", "0,1", "6,1", "9,1"]
/ Grid is the count of the smallest spaces, then
/ individual spells span those spaces
-if @nativeClient
.grid layout-grid="2x12"
.homecard.createsession layout-grid-columns="4" layout-grid-position="0,0" layout-grid-rows="1" layout-link="createSession" type="createSession" class="#{logged_in_not_logged_in_class}"
h2 create session
h2 sessions
.homebox-info
/! 4 friends online, 2 currently in sessions
.homecard.findsession layout-grid-columns="4" layout-grid-position="4,0" layout-grid-rows="1" layout-link="findSession" type="findSession" class="#{logged_in_not_logged_in_class}"
h2 find session
.homecard.jamclass layout-grid-columns="4" layout-grid-position="4,0" layout-grid-rows="1" layout-link="jamclass" type="jamclass" class="#{logged_in_not_logged_in_class}"
h2 jamclass
.homebox-info
/! 1 session invitation, 19 public sessions active
.homecard.feed layout-grid-columns="4" layout-grid-position="8,0" layout-grid-rows="1" layout-link="feed" class="#{logged_in_not_logged_in_class}"
h2 feed
.homecard.jamtrack layout-grid-columns="4" layout-grid-position="8,0" layout-grid-rows="1" layout-link="jamtrack" type="jamtrack"
h2 jamtracks
.homebox-info
/! 4 friends online, 2 currently in sessions
.homecard.musicians layout-grid-columns=small_tile_size layout-grid-position=column_positions[0] layout-grid-rows="1" layout-link="musicians" class="#{logged_in_not_logged_in_class}"
/! 5 followers, 3 following
.homecard.musicians layout-grid-columns="3" layout-grid-position="0,1" layout-grid-rows="1" layout-link="musicians" class="#{logged_in_not_logged_in_class}"
h2 musicians
.homebox-info
/! 5 followers, 3 following
.homecard.bands layout-grid-columns=small_tile_size layout-grid-position=column_positions[1] layout-grid-rows="1" layout-link="bands" class="#{logged_in_not_logged_in_class}"
.homecard.bands layout-grid-columns="3" layout-grid-position="3,1" layout-grid-rows="1" layout-link="bands" class="#{logged_in_not_logged_in_class}"
h2 bands
.homebox-info
/! 1 session invitation, 19 public sessions active
-if jamtracks
.homecard.jamtrack layout-grid-columns=small_tile_size layout-grid-position=column_positions[2] layout-grid-rows="1" layout-link="jamtrack"
h2 jamtracks
.homebox-info
/! 5 followers, 3 following
.homecard.profile layout-grid-columns=small_tile_size layout-grid-position=column_positions[3] layout-grid-rows="1" class="#{logged_in_not_logged_in_class}"
.homecard.profile layout-grid-columns="3" layout-grid-position="6,1" layout-grid-rows="1" class="#{logged_in_not_logged_in_class}"
h2 profile
.homebox-info
/! 5 followers, 3 following
.homecard.account layout-grid-columns=small_tile_size layout-grid-position=column_positions[4] layout-grid-rows="1" layout-link="account" class="#{logged_in_not_logged_in_class}"
.homecard.account layout-grid-columns="3" layout-grid-position="9,1" layout-grid-rows="1" layout-link="account" class="#{logged_in_not_logged_in_class}"
h2 account
.homebox-info
/! free service level
-else
.grid layout-grid="2x12"
.homecard.createsession layout-grid-columns="4" layout-grid-position="0,0" layout-grid-rows="1" layout-link="createSession" type="createSession" class="#{logged_in_not_logged_in_class}"
h2 create session
h2 sessions
.homebox-info
/! 4 friends online, 2 currently in sessions
.homecard.findsession layout-grid-columns="4" layout-grid-position="4,0" layout-grid-rows="1" layout-link="findSession" type="findSession" class="#{logged_in_not_logged_in_class}"
h2 find session
/! 4 friends online, 2 currently in sessions
.homecard.jamclass layout-grid-columns="4" layout-grid-position="4,0" layout-grid-rows="1" layout-link="jamclass" type="jamclass" class="#{logged_in_not_logged_in_class}"
h2 jamclass
.homebox-info
/! 1 session invitation, 19 public sessions active
.homecard.feed layout-grid-columns="4" layout-grid-position="8,0" layout-grid-rows="1" layout-link="feed" class="#{logged_in_not_logged_in_class}"
h2 feed
/! 1 session invitation, 19 public sessions active
.homecard.jamtrack layout-grid-columns="4" layout-grid-position="8,0" layout-grid-rows="1" layout-link="jamtrack" type="jamtrack"
h2 jamtracks
.homebox-info
/! 4 friends online, 2 currently in sessions
.homecard.musicians layout-grid-columns=small_tile_size layout-grid-position=column_positions[0] layout-grid-rows="1" layout-link="musicians" class="#{logged_in_not_logged_in_class}"
/! 5 followers, 3 following
.homecard.musicians layout-grid-columns="3" layout-grid-position="0,1" layout-grid-rows="1" layout-link="musicians" class="#{logged_in_not_logged_in_class}"
h2 musicians
.homebox-info
/! 5 followers, 3 following
.homecard.bands layout-grid-columns=small_tile_size layout-grid-position=column_positions[1] layout-grid-rows="1" layout-link="bands" class="#{logged_in_not_logged_in_class}"
/! 5 followers, 3 following
.homecard.bands layout-grid-columns="3" layout-grid-position="3,1" layout-grid-rows="1" layout-link="bands" class="#{logged_in_not_logged_in_class}"
h2 bands
.homebox-info
-if jamtracks
/! 1 session invitation, 19 public sessions active
.homecard.jamtrack layout-grid-columns=small_tile_size layout-grid-position=column_positions[2] layout-grid-rows="1" layout-link="jamtrack"
h2 jamtracks
.homebox-info
/! 5 followers, 3 following
.homecard.profile layout-grid-columns=small_tile_size layout-grid-position=column_positions[3] layout-grid-rows="1" class="#{logged_in_not_logged_in_class}"
/! 1 session invitation, 19 public sessions active
.homecard.profile layout-grid-columns="3" layout-grid-position="6,1" layout-grid-rows="1" class="#{logged_in_not_logged_in_class}"
h2 profile
.homebox-info
/! 5 followers, 3 following
.homecard.account layout-grid-columns=small_tile_size layout-grid-position=column_positions[4] layout-grid-rows="1" layout-link="account" class="#{logged_in_not_logged_in_class}"
/! 5 followers, 3 following
.homecard.account layout-grid-columns="3" layout-grid-position="9,1" layout-grid-rows="1" layout-link="account" class="#{logged_in_not_logged_in_class}"
h2 account
.homebox-info
/! free service level

View File

@ -6,7 +6,7 @@
<%= image_tag "content/icon_add.png", :size => "19x19" %>
</div>
<h1>create session</h1>
<h1>sessions</h1>
<%= render "screen_navigation" %>
<div class="clearall"></div>
@ -21,19 +21,60 @@
<!-- left column -->
<div class="session-wrapper">
<div id="session-step-1" class="create-session-wizard" layout-wizard-step="0">
<div class="column column-left">
<h2>start a session</h2>
<div class="quick-options">
<div class="quick-option"><a class="button-orange quick-start-solo" href="#" >QUICK START SOLO</a><p>Use this button to quick start a private session just for yourself. Good for solo practice and gear testing.</p></div>
<div class="quick-option"><a class="button-orange quick-start-open" href="#" >QUICK START OPEN</a><p>Use this button to quick start an open session that anyone can join to play with you, and that fans can listen to.</p></div>
<div class="quick-option"><a class="button-orange start-or-schedule" href="#" >START OR SCHEDULE</a><p>Use this button start a wizard that will let you have more control over your session. Schedule future sessions. Start private sessions. Invite other musicians. And lots more...</p><a class="schedule-learn-more" href="https://jamkazam.desk.com/customer/portal/articles/1599977-creating-a-session-to-play-alone-or-with-others" rel="external">learn more</a></div>
</div>
<h2>featured sessions</h2>
<table class="jamtable featured-sessions">
<thead>
<tr><th>SESSION</th><th>MUSICIANS</th><th>DATE/TIME</th><th>ACTIONS</th></tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<div class="column column-right">
<h2>check out other sessions</h2>
<div class="find-sessions">
<a href="/client#/findSession" class="button-orange">FIND SESSIONS</a>
<p>
Use the Find Sessions feature to browse through current and future/scheduled sessions you can join to play with other musicians.
</p>
<a class="find-session-learn-more" href="https://jamkazam.desk.com/customer/en/portal/articles/1599978-finding-a-session-to-play-with-others" rel="external">learn more</a>
</div>
<div class="view-the-feed">
<a href="/client#/feed" class="button-orange">VIEW THE FEED</a>
<p>
Use the Feed to check out current and past sessions and session recordings, and to listen to current sessions.
</p>
<a class="view-the-feed-learn-more" href="https://jamkazam.desk.com/customer/portal/articles/2404708-checking-out-current-past-sessions" rel="external">learn more</a>
</div>
<h2 class="learn-more-sessions-header">learn more about online sessions</h2>
<div class="learn-more-sessions">
<p>Use the following links to learn more:</p>
<a href="https://jamkazam.desk.com/customer/en/portal/topics/564807-gear-recommendations-to-play-in-online-sessions/articles" rel="external">System Requirements & Gear Recommendations</a>
<a href="https://jamkazam.desk.com/customer/en/portal/topics/930331-setting-up-your-gear-to-play-in-online-sessions/articles" rel="external">Setting Up Your Gear</a>
<a href="https://jamkazam.desk.com/customer/en/portal/topics/673198-key-features-to-use-for-online-sessions/articles" rel="external">Key Features to Use for Online Sessions</a>
<a href="https://jamkazam.desk.com/customer/en/portal/topics/930494-key-features-to-use-beyond-online-sessions/articles" rel="external">Key Features to Use Beyond Online Sessions</a>
</div>
</div>
</div>
<div id="session-step-2" class="create-session-wizard" layout-wizard-step="1">
<div class="w60 left">
<h3>When do you want to schedule and play in this session?</h3>
<br />
<div class="icheckbuttons">
<ul id="create-session-type">
<li create-type="<%= MusicSession::CREATE_TYPE_START_SCHEDULED %>">
<input type="radio" name="session-when" id="session-when-start-scheduled" checked="checked" info-value="start-scheduled" />
<label for="session-when-start-scheduled" class="radio-text">
I have already scheduled a session, and I want to start it now
</label>
<div class="clearall"></div>
</li>
<li create-type="<%= MusicSession::CREATE_TYPE_SCHEDULE_FUTURE %>">
<input type="radio" name="session-when" id="session-when-schedule-future" info-value="schedule-future" />
<label for="session-when-schedule-future" class="radio-text">
@ -55,13 +96,6 @@
</label>
<div class="clearall"></div>
</li>
<li create-type="<%= MusicSession::CREATE_TYPE_QUICK_START %>">
<input type="radio" name="session-when" id="session-when-quick-start" info-value="quick-start" />
<label for="session-when-quick-start" class="radio-text">
I want to quick start a test session just for me
</label>
<div class="clearall"></div>
</li>
</ul>
</div>
<div class="session-when-info info-box">
@ -159,7 +193,7 @@
</div>
<div class="clearall"></div>
</div>
<div id="session-step-2" class="create-session-wizard" layout-wizard-step="1">
<div id="session-step-3" class="create-session-wizard" layout-wizard-step="2">
<div class="w100">
<div id="divSessionGenre" class="left w40">
<h3 class="mb5">Please select a genre for your session:</h3>
@ -221,7 +255,7 @@
<div class="clearall"></div>
</div>
</div>
<div id="session-step-3" class="create-session-wizard" layout-wizard-step="2">
<div id="session-step-4" class="create-session-wizard" layout-wizard-step="3">
<div class="w45 left">
<div id="create-session-invite-musicians"></div>
<div class="plus-any-interested-section">
@ -266,7 +300,7 @@
</div>
<div class="clearall"></div>
</div>
<div id="session-step-4" class="create-session-wizard" layout-wizard-step="3">
<div id="session-step-5" class="create-session-wizard" layout-wizard-step="4">
<div class="left w55 f13">
<div class="icheckbuttons">
<ul id="session-policy">
@ -380,7 +414,7 @@
</div>
<div class="clearall"></div>
</div>
<div id="session-step-5" class="create-session-wizard" layout-wizard-step="4">
<div id="session-step-6" class="create-session-wizard" layout-wizard-step="5">
<div class="left w55">
<h3>When are you starting your session?</h3>
<div id="session-start-type-disp" class="mt5"></div>
@ -435,15 +469,15 @@
<!-- Current step display template -->
<script type="text/template" id="template-session-steps">
<div class="sessionsteps-inner">
<a href='#' class="session-stepnumber left" data-step-number="0">1</a>
<a href='#' class="session-stepnumber left" data-step-number="1">1</a>
<div class="session-step-title">When Is Your Session?</div>
<a href='#' class="session-stepnumber left" data-step-number="1">2</a>
<a href='#' class="session-stepnumber left" data-step-number="2">2</a>
<div class="session-step-title">What Are You Playing?</div>
<a href='#' class="session-stepnumber left" data-step-number="2">3</a>
<a href='#' class="session-stepnumber left" data-step-number="3">3</a>
<div class="session-step-title">Who Is Playing With You?</div>
<a href='#' class="session-stepnumber left" data-step-number="3">4</a>
<a href='#' class="session-stepnumber left" data-step-number="4">4</a>
<div class="session-step-title">What Are Your Policies?</div>
<a href='#' class="session-stepnumber left" data-step-number="4">5</a>
<a href='#' class="session-stepnumber left" data-step-number="5">5</a>
<div class="session-step-title">Review & Confirm</div>
<div class="clearall"></div>
</div>
@ -451,9 +485,6 @@
<script type="text/template" id="template-session-buttons">
<div class="sessionbuttons-holder">
<div class="left-buttons">
<a class="button-grey btn-help" href="http://jamkazam.desk.com/" target="_blank">HELP</a>
</div>
<div class="right-buttons">
<a class="button-grey btn-back" href="#">BACK</a>
<a class="button-orange btn-next" href="#">NEXT</a>