From a14b58f2fe1ac3e6f05886cca87f5010b41eff7f Mon Sep 17 00:00:00 2001
From: Seth Call
Date: Fri, 22 Apr 2016 14:59:48 -0500
Subject: [PATCH] Home screen and session create screen re-worked
---
ruby/lib/jam_ruby/app/mailers/user_mailer.rb | 25 ++
.../student_lesson_normal_no_bill.html.erb | 2 +-
.../student_lesson_normal_no_bill.text.erb | 2 +-
.../student_test_drive_no_bill.html.erb | 23 ++
.../student_test_drive_no_bill.text.erb | 5 +
ruby/lib/jam_ruby/models/music_session.rb | 29 ++-
ruby/lib/jam_ruby/models/user.rb | 2 +-
.../jam_ruby/models/lesson_booking_spec.rb | 6 +-
.../jam_ruby/models/music_session_spec.rb | 25 ++
web/app/assets/javascripts/homeScreen.js | 7 +
web/app/assets/javascripts/layout.js | 4 +-
.../react-components/BookLesson.js.jsx.coffee | 1 -
.../javascripts/scheduled_session.js.erb | 246 +++++++++++++++---
.../stylesheets/client/createSession.css.scss | 97 ++++++-
web/app/views/clients/_home.html.slim | 67 ++---
.../views/clients/_scheduledSession.html.erb | 85 ++++--
16 files changed, 500 insertions(+), 126 deletions(-)
create mode 100644 ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_test_drive_no_bill.html.erb
create mode 100644 ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_test_drive_no_bill.text.erb
diff --git a/ruby/lib/jam_ruby/app/mailers/user_mailer.rb b/ruby/lib/jam_ruby/app/mailers/user_mailer.rb
index d6dd849ca..25e739518 100644
--- a/ruby/lib/jam_ruby/app/mailers/user_mailer.rb
+++ b/ruby/lib/jam_ruby/app/mailers/user_mailer.rb
@@ -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)
diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_lesson_normal_no_bill.html.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_lesson_normal_no_bill.html.erb
index f7836f6ce..aa263319f 100644
--- a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_lesson_normal_no_bill.html.erb
+++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_lesson_normal_no_bill.html.erb
@@ -6,7 +6,7 @@
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 %>.
Click the button below to see more information about this session.
diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_lesson_normal_no_bill.text.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_lesson_normal_no_bill.text.erb
index 0c6d60a65..31ef00ca0 100644
--- a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_lesson_normal_no_bill.text.erb
+++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_lesson_normal_no_bill.text.erb
@@ -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 %>
diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_test_drive_no_bill.html.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_test_drive_no_bill.html.erb
new file mode 100644
index 000000000..deee9c563
--- /dev/null
+++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_test_drive_no_bill.html.erb
@@ -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 %>
+
+ Hello <%= @student.name %>,
+
+
+ You have not used a credit for today's TestDrive with <%= @teacher.name %>.
+
+
+ Click the button below to see more information about this session.
+
+
+ VIEW
+ LESSON DETAILS
+
+
+ Best Regards,
Team JamKazam
+
+<% end %>
+
+
diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_test_drive_no_bill.text.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_test_drive_no_bill.text.erb
new file mode 100644
index 000000000..f3d3b2825
--- /dev/null
+++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_test_drive_no_bill.text.erb
@@ -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 %>
diff --git a/ruby/lib/jam_ruby/models/music_session.rb b/ruby/lib/jam_ruby/models/music_session.rb
index 14947dd74..d03d8ac67 100644
--- a/ruby/lib/jam_ruby/models/music_session.rb
+++ b/ruby/lib/jam_ruby/models/music_session.rb
@@ -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?
diff --git a/ruby/lib/jam_ruby/models/user.rb b/ruby/lib/jam_ruby/models/user.rb
index de83de27b..448d62cb9 100644
--- a/ruby/lib/jam_ruby/models/user.rb
+++ b/ruby/lib/jam_ruby/models/user.rb
@@ -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
diff --git a/ruby/spec/jam_ruby/models/lesson_booking_spec.rb b/ruby/spec/jam_ruby/models/lesson_booking_spec.rb
index 4a17aea5b..0c2bab1dd 100644
--- a/ruby/spec/jam_ruby/models/lesson_booking_spec.rb
+++ b/ruby/spec/jam_ruby/models/lesson_booking_spec.rb
@@ -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
diff --git a/ruby/spec/jam_ruby/models/music_session_spec.rb b/ruby/spec/jam_ruby/models/music_session_spec.rb
index e152fed55..4013eb804 100644
--- a/ruby/spec/jam_ruby/models/music_session_spec.rb
+++ b/ruby/spec/jam_ruby/models/music_session_spec.rb
@@ -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)
diff --git a/web/app/assets/javascripts/homeScreen.js b/web/app/assets/javascripts/homeScreen.js
index a96075b47..ef94e580f 100644
--- a/web/app/assets/javascripts/homeScreen.js
+++ b/web/app/assets/javascripts/homeScreen.js
@@ -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() {
diff --git a/web/app/assets/javascripts/layout.js b/web/app/assets/javascripts/layout.js
index 931f1bbaf..6592fcdb7 100644
--- a/web/app/assets/javascripts/layout.js
+++ b/web/app/assets/javascripts/layout.js
@@ -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;
}
diff --git a/web/app/assets/javascripts/react-components/BookLesson.js.jsx.coffee b/web/app/assets/javascripts/react-components/BookLesson.js.jsx.coffee
index 431f1ee98..fc68f432a 100644
--- a/web/app/assets/javascripts/react-components/BookLesson.js.jsx.coffee
+++ b/web/app/assets/javascripts/react-components/BookLesson.js.jsx.coffee
@@ -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) ->
diff --git a/web/app/assets/javascripts/scheduled_session.js.erb b/web/app/assets/javascripts/scheduled_session.js.erb
index 11891e938..3296d9275 100644
--- a/web/app/assets/javascripts/scheduled_session.js.erb
+++ b/web/app/assets/javascripts/scheduled_session.js.erb
@@ -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('| No sessions |
')
+ }
+ 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 = $(' | | ' + session.pretty_scheduled_start_short + ' | |
')
+ var $sessionCell = $row.find('.session-link')
+ if (isActive) {
+ var $sessionLink = $('' + session.name + '')
+ $sessionCell.append($sessionLink)
+ context.JK.popExternalLinks($sessionCell)
+ }
+ else
+ {
+ var $sessionLink = $('' + session.name + '')
+ $sessionCell.append($sessionLink)
+ }
+
+ var $actionsCell = $row.find('.actions');
+ var $actionsLink = $('join')
+ $actionsCell.append($actionsLink)
+
+ var msg = '';
+ context._.each(receivedUsers, function(value, key) {
+ var url = '/client#/profile/' + key
+ msg += '' + value + ', '
+ })
+
+ 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($(""));
$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();
diff --git a/web/app/assets/stylesheets/client/createSession.css.scss b/web/app/assets/stylesheets/client/createSession.css.scss
index d324aca04..fbd3a981d 100644
--- a/web/app/assets/stylesheets/client/createSession.css.scss
+++ b/web/app/assets/stylesheets/client/createSession.css.scss
@@ -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 {
diff --git a/web/app/views/clients/_home.html.slim b/web/app/views/clients/_home.html.slim
index 14b7961de..e6d0e0d15 100644
--- a/web/app/views/clients/_home.html.slim
+++ b/web/app/views/clients/_home.html.slim
@@ -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
diff --git a/web/app/views/clients/_scheduledSession.html.erb b/web/app/views/clients/_scheduledSession.html.erb
index 9e8e2d85a..abcc7b260 100644
--- a/web/app/views/clients/_scheduledSession.html.erb
+++ b/web/app/views/clients/_scheduledSession.html.erb
@@ -6,7 +6,7 @@
<%= image_tag "content/icon_add.png", :size => "19x19" %>
- create session
+ sessions
<%= render "screen_navigation" %>
@@ -21,19 +21,60 @@
+
+
start a session
+
+
QUICK START SOLOUse this button to quick start a private session just for yourself. Good for solo practice and gear testing.
+
QUICK START OPENUse this button to quick start an open session that anyone can join to play with you, and that fans can listen to.
+
START OR SCHEDULEUse 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...
learn more
+
+
featured sessions
+
+
+ | SESSION | MUSICIANS | DATE/TIME | ACTIONS |
+
+
+
+
+
+
+
+
check out other sessions
+
+
+
FIND SESSIONS
+
+ Use the Find Sessions feature to browse through current and future/scheduled sessions you can join to play with other musicians.
+
+
learn more
+
+
+
+
VIEW THE FEED
+
+ Use the Feed to check out current and past sessions and session recordings, and to listen to current sessions.
+
+
learn more
+
+
+
+
+
+
+
+
When do you want to schedule and play in this session?
@@ -159,7 +193,7 @@
-
+
Please select a genre for your session:
@@ -221,7 +255,7 @@
-
+
-
+
-
+
When are you starting your session?
@@ -435,15 +469,15 @@