diff --git a/ruby/jt_metadata.json b/ruby/jt_metadata.json
index bdadc014e..cc85875b4 100644
--- a/ruby/jt_metadata.json
+++ b/ruby/jt_metadata.json
@@ -1 +1 @@
-{"container_file": "/var/folders/fk/0ckzmddd4tq28kxbb09vckbr0000gn/T/d20150511-14158-1rprqit/jam-track-58.jkz", "version": "0", "coverart": null, "rsa_priv_file": "/var/folders/fk/0ckzmddd4tq28kxbb09vckbr0000gn/T/d20150511-14158-1rprqit/skey.pem", "tracks": [{"name": "/var/folders/fk/0ckzmddd4tq28kxbb09vckbr0000gn/T/d20150511-14158-1rprqit/27f81b9d-341e-4082-8a1b-662bf8f20a0d.ogg", "trackName": "track_00"}], "rsa_pub_file": "/var/folders/fk/0ckzmddd4tq28kxbb09vckbr0000gn/T/d20150511-14158-1rprqit/pkey.pem", "jamktrack_info": "/var/folders/fk/0ckzmddd4tq28kxbb09vckbr0000gn/T/tmp2xkPZO"}
\ No newline at end of file
+{"container_file": "/var/folders/fk/0ckzmddd4tq28kxbb09vckbr0000gn/T/d20150519-97259-1h1tbhj/jam-track-35.jkz", "version": "0", "coverart": null, "rsa_priv_file": "/var/folders/fk/0ckzmddd4tq28kxbb09vckbr0000gn/T/d20150519-97259-1h1tbhj/skey.pem", "tracks": [{"name": "/var/folders/fk/0ckzmddd4tq28kxbb09vckbr0000gn/T/d20150519-97259-1h1tbhj/7452fa4a-0c55-4cb2-948e-221475d7299c.ogg", "trackName": "track_00"}], "rsa_pub_file": "/var/folders/fk/0ckzmddd4tq28kxbb09vckbr0000gn/T/d20150519-97259-1h1tbhj/pkey.pem", "jamktrack_info": "/var/folders/fk/0ckzmddd4tq28kxbb09vckbr0000gn/T/tmpGdncJS"}
\ No newline at end of file
diff --git a/web/app/assets/javascripts/accounts_profile_samples.js b/web/app/assets/javascripts/accounts_profile_samples.js
index 52b27d13a..58a3bc7d2 100644
--- a/web/app/assets/javascripts/accounts_profile_samples.js
+++ b/web/app/assets/javascripts/accounts_profile_samples.js
@@ -3,7 +3,7 @@
"use strict";
context.JK = context.JK || {};
- context.JK.AccountProfileSamples = function(app) {
+ context.JK.AccountProfileSamples = function(app, parent) {
var $document = $(document);
// used to initialize RecordingSourceValidator in site_validator.js.coffee
@@ -15,10 +15,10 @@
var EVENTS = context.JK.EVENTS;
var api = context.JK.Rest();
var ui = new context.JK.UIHelper(JK.app);
- var user = {};
+ var target = {};
var profileUtils = context.JK.ProfileUtils;
- var $screen = $('#account-profile-samples');
+ var $screen = $('.account-profile-samples', parent);
// online presences
var $website = $screen.find('#website');
@@ -315,6 +315,126 @@
}
}
+ function removeRow(recordingId, type) {
+ $('div[data-recording-id=' + recordingId + ']').remove();
+
+ if (type === 'soundcloud') {
+ window.soundCloudRecordingValidator.removeRecordingId(recordingId);
+ }
+ else if (type === 'youtube') {
+ window.youTubeRecordingValidator.removeRecordingId(recordingId);
+ }
+ }
+
+ function formatTitle(title) {
+ return title && title.length > 30 ? title.substring(0, 30) + "..." : title;
+ }
+
+ // This function is a bit of a mess. It was pulled
+ // from the html.erb file verbatim, and could use a
+ // refactor:
+ function initializeValidators() {
+ var initialized = false;
+ $(document).on('INIT_SITE_VALIDATORS', function(e, data) {
+ window.soundCloudRecordingValidator.init(window.soundCloudRecordingSources);
+ window.youTubeRecordingValidator.init(window.youTubeRecordingSources);
+ });
+
+ $(document).on('JAMKAZAM_READY', function(e, data) {
+ window.JK.JamServer.get$Server().on(window.JK.EVENTS.CONNECTION_UP, function() {
+ if(initialized) {
+ return;
+ }
+ initialized = true;
+
+ //var $screen = $('#account-profile-samples');
+ var $btnAddSoundCloudRecording = $screen.find('#btn-add-soundcloud-recording');
+ var $btnAddYouTubeVideo = $screen.find('#btn-add-youtube-video');
+ var $soundCloudSampleList = $screen.find('.samples.soundcloud');
+ var $youTubeSampleList = $screen.find('.samples.youtube');
+
+ setTimeout(function() {
+ window.urlValidator = new JK.SiteValidator('url', userNameSuccessCallback, userNameFailCallback);
+ window.urlValidator.init();
+
+ window.soundCloudValidator = new JK.SiteValidator('soundcloud', userNameSuccessCallback, userNameFailCallback);
+ window.soundCloudValidator.init();
+
+ window.reverbNationValidator = new JK.SiteValidator('reverbnation', userNameSuccessCallback, userNameFailCallback);
+ window.reverbNationValidator.init();
+
+ window.bandCampValidator = new JK.SiteValidator('bandcamp', userNameSuccessCallback, userNameFailCallback);
+ window.bandCampValidator.init();
+
+ window.fandalismValidator = new JK.SiteValidator('fandalism', userNameSuccessCallback, userNameFailCallback);
+ window.fandalismValidator.init();
+
+ window.youTubeValidator = new JK.SiteValidator('youtube', userNameSuccessCallback, userNameFailCallback);
+ window.youTubeValidator.init();
+
+ window.facebookValidator = new JK.SiteValidator('facebook', userNameSuccessCallback, userNameFailCallback);
+ window.facebookValidator.init();
+
+ window.twitterValidator = new JK.SiteValidator('twitter', userNameSuccessCallback, userNameFailCallback);
+ window.twitterValidator.init();
+
+ window.soundCloudRecordingValidator = new JK.RecordingSourceValidator('rec_soundcloud', soundCloudSuccessCallback, siteFailCallback);
+
+ window.youTubeRecordingValidator = new JK.RecordingSourceValidator('rec_youtube', youTubeSuccessCallback, siteFailCallback);
+ }, 1);
+
+
+ function userNameSuccessCallback($inputDiv) {
+ $inputDiv.removeClass('error');
+ $inputDiv.find('.error-text').remove();
+ }
+
+ function userNameFailCallback($inputDiv) {
+ $inputDiv.addClass('error');
+ $inputDiv.find('.error-text').remove();
+ $inputDiv.append("Invalid username").show();
+ }
+
+ function soundCloudSuccessCallback($inputDiv) {
+ siteSuccessCallback($inputDiv, window.soundCloudRecordingValidator, $soundCloudSampleList, 'soundcloud');
+ }
+
+ function youTubeSuccessCallback($inputDiv) {
+ siteSuccessCallback($inputDiv, window.youTubeRecordingValidator, $youTubeSampleList, 'youtube');
+ }
+
+ function siteSuccessCallback($inputDiv, recordingSiteValidator, $sampleList, type) {
+ $inputDiv.removeClass('error');
+ $inputDiv.find('.error-text').remove();
+
+ var recordingSources = recordingSiteValidator.recordingSources();
+ if (recordingSources && recordingSources.length > 0) {
+ var $sampleList = $sampleList.find('.sample-list');
+ var addedRecording = recordingSources[recordingSources.length-1];
+
+ // TODO: this code is repeated in JS file
+ var recordingIdAttr = ' data-recording-id="' + addedRecording.recording_id + '" ';
+ var recordingUrlAttr = ' data-recording-url="' + addedRecording.url + '" ';
+ var recordingTitleAttr = ' data-recording-title="' + addedRecording.recording_title + '"';
+ var title = formatTitle(addedRecording.recording_title);
+ $sampleList.append('
' + title + '
');
+
+ var onclick = "onclick=removeRow(\'" + addedRecording.recording_id + "\',\'" + type + "\');";
+ $sampleList.append('X
');
+ }
+
+ $inputDiv.find('input').val('');
+ }
+
+ function siteFailCallback($inputDiv) {
+ $inputDiv.addClass('error');
+ $inputDiv.find('.error-text').remove();
+ $inputDiv.append("Invalid URL").show();
+ }
+ });
+ });
+ } // end initializeValidators.
+
function initialize() {
var screenBindings = {
'beforeShow': beforeShow,
@@ -322,7 +442,7 @@
};
app.bindScreen('account/profile/samples', screenBindings);
-
+ initializeValidators();
events();
}
@@ -331,5 +451,4 @@
this.afterShow = afterShow;
return this;
};
-
})(window,jQuery);
\ No newline at end of file
diff --git a/web/app/assets/javascripts/band_setup.js b/web/app/assets/javascripts/band_setup.js
index 6a75cdfb7..9c87aca44 100644
--- a/web/app/assets/javascripts/band_setup.js
+++ b/web/app/assets/javascripts/band_setup.js
@@ -32,7 +32,9 @@
var currentStep = 0;
var STEPS_COUNT=5;
var $screen=$("#band-setup")
+ var $samples = $screen.find(".account-profile-samples")
var $selectedInstruments=[]
+ var accountProfileSamples = null;
function navBack() {
if (currentStep>0) {
@@ -177,21 +179,22 @@
}
function renderErrors(errors) {
+ logger.debug("Band setup errors: ", errors)
var name = context.JK.format_errors("name", errors);
var country = context.JK.format_errors("country", errors);
var state = context.JK.format_errors("state", errors);
var city = context.JK.format_errors("city", errors);
var biography = context.JK.format_errors("biography", errors);
- var genres = context.JK.format_errors("genres", errors);
var website = context.JK.format_errors("website", errors);
+ var genres = context.JK.format_errors("genres", errors);
- if(name) $("#band-name").closest('div.field').addClass('error').end().after(name);
- if(country) $("#band-country").closest('div.field').addClass('error').end().after(country);
- if(state) $("#band-region").closest('div.field').addClass('error').end().after(state);
- if(city) $("#band-city").closest('div.field').addClass('error').end().after(city);
- if(genres) $(".band-setup-genres").closest('div.field').addClass('error').end().after(genres);
+ if(name) $("#band-name").closest('div.field').addClass('error').end().after(name);
+ if(country) $("#band-country").closest('div.field').addClass('error').end().after(country);
+ if(state) $("#band-region").closest('div.field').addClass('error').end().after(state);
+ if(city) $("#band-city").closest('div.field').addClass('error').end().after(city);
if(biography) $("#band-biography").closest('div.field').addClass('error').end().after(biography);
- if(website) $("#band-website").closest('div.field').addClass('error').end().after(website);
+ if(website) $("#band-website").closest('div.field').addClass('error').end().after(website);
+ if(genres) $("#band-genres").closest('div.field').addClass('error').end().after(genres);
}
function buildBand() {
@@ -223,7 +226,6 @@
} else {
band.validate_genres = false
}
-
$.each($selectedInstruments, function(index, instrument) {
var h = {}
@@ -653,28 +655,32 @@
}
function initialize(invitationDialogInstance, friendSelectorDialog) {
- inviteMusiciansUtil = new JK.InviteMusiciansUtil(app);
- inviteMusiciansUtil.initialize(friendSelectorDialog);
- friendInput = inviteMusiciansUtil.inviteBandCreate('#band-setup-invite-musicians', "If your bandmates are already on JamKazam, start typing their names in the box below, or click the Choose Friends button to select them.
");
- invitationDialog = invitationDialogInstance;
- events();
+ inviteMusiciansUtil = new JK.InviteMusiciansUtil(app)
+ inviteMusiciansUtil.initialize(friendSelectorDialog)
+
+ accountProfileSamples = new JK.AccountProfileSamples(JK.app, $screen)
+ accountProfileSamples.initialize()
+
+ friendInput = inviteMusiciansUtil.inviteBandCreate('#band-setup-invite-musicians', "If your bandmates are already on JamKazam, start typing their names in the box below, or click the Choose Friends button to select them.
")
+ invitationDialog = invitationDialogInstance
+ events()
var screenBindings = {
'beforeShow': beforeShow,
'afterShow': afterShow
- };
+ }
bandType=$("#band-type")
bandStatus=$("#band-status")
concertCount=$("#concert-count")
- app.bindScreen('band/setup', screenBindings);
+ app.bindScreen('band/setup', screenBindings)
$('input[type=radio]').iCheck({
checkboxClass: 'icheckbox_minimal',
radioClass: 'iradio_minimal',
inheritClass: true
- });
+ })
profileUtils.initializeHelpBubbles()
}
diff --git a/web/app/assets/stylesheets/client/accountProfileSamples.css.scss b/web/app/assets/stylesheets/client/accountProfileSamples.css.scss
index 6fa2a5372..f2c47d585 100644
--- a/web/app/assets/stylesheets/client/accountProfileSamples.css.scss
+++ b/web/app/assets/stylesheets/client/accountProfileSamples.css.scss
@@ -1,8 +1,12 @@
@import "common.css.scss";
@import "site_validator.css.scss";
-#account-profile-samples {
+.profile-online-sample-controls {
+ .sample-row {
+ position: relative;
+ }
+
.sample {
font-weight: 600;
font-size: 16px;
diff --git a/web/app/assets/stylesheets/client/band.css.scss b/web/app/assets/stylesheets/client/band.css.scss
index 7d76277b3..8cc2c147a 100644
--- a/web/app/assets/stylesheets/client/band.css.scss
+++ b/web/app/assets/stylesheets/client/band.css.scss
@@ -7,10 +7,14 @@
@include border_box_sizing;
width: 100%;
padding: 2px 4px 2px 2px;
+ overflow: hidden;
+ }
+
+ textarea {
+ overflow:hidden;
}
}
-
// Mimic style of easydropdown selects:
input[type="number"] {
border-radius: 6px;
@@ -21,6 +25,10 @@
padding: 5px;
}
+ .content-body-scroller {
+
+ }
+
.radio-field {
display: inline;
padding: 2px;
@@ -57,7 +65,7 @@
box-shadow: inset 2px 2px 3px 0px #888;
color:#000;
overflow:auto;
- font-size:14px;
+ font-size:12px;
}
.band-setup-photo {
@@ -106,7 +114,7 @@
font-weight:200;
font-size: 28px;
float:left;
- margin: 0px 150px 0px 0px;
+ margin: 0 0 1em 0;
}
.band-profile-status {
@@ -141,7 +149,7 @@
padding-top:65px;
background-color:#535353;
color:#ccc;
- font-size:17px;
+ font-size:16px;
text-decoration:none;
}
@@ -380,7 +388,7 @@
#band-setup-form {
- padding: 0.25em 0.5em 1.25em 0.25em;
+ margin: 0.25em 0.5em 1.25em 0.25em;
table.band-form-table {
width: 100%;
margin: 1em;
@@ -421,12 +429,12 @@
}
label {
- font-size: 1.1em;
+ font-size: 1.05em;
}
label.strong-label {
font-weight: bold;
- font-size: 1.2em;
+ font-size: 1.1em;
}
}
\ No newline at end of file
diff --git a/web/app/views/clients/_account_profile_samples.html.erb b/web/app/views/clients/_account_profile_samples.html.erb
index 74943cf2e..df5392e0f 100644
--- a/web/app/views/clients/_account_profile_samples.html.erb
+++ b/web/app/views/clients/_account_profile_samples.html.erb
@@ -1,4 +1,4 @@
-
+
<%= image_tag "content/icon_account.png", {:width => 27, :height => 20} %>
@@ -12,106 +12,8 @@
-
-
-
-
diff --git a/web/app/views/clients/_band_setup.html.slim b/web/app/views/clients/_band_setup.html.slim
index f162ca4b5..5fe8d6660 100644
--- a/web/app/views/clients/_band_setup.html.slim
+++ b/web/app/views/clients/_band_setup.html.slim
@@ -172,7 +172,8 @@
#band-setup-step-3.band-step.content-wrapper
h2 set up band: online presence & performance samples
- table.band-form-table
+ = render "clients/profile_online_sample_controls"
+
#band-setup-step-4.band-step.content-wrapper
h2 invite members
br
@@ -218,6 +219,7 @@
a#btn-band-setup-next.nav-button.button-orange
| SAVE & NEXT
.clearall
+ br clear="all"
script#template-band-setup-genres type="text/template"
diff --git a/web/app/views/clients/_profile_online_sample_controls.html.slim b/web/app/views/clients/_profile_online_sample_controls.html.slim
new file mode 100644
index 000000000..604804288
--- /dev/null
+++ b/web/app/views/clients/_profile_online_sample_controls.html.slim
@@ -0,0 +1,69 @@
+.profile-online-sample-controls
+ .sample_row
+ .left
+ label Website (URL):
+ #url_validator.left.presence.site_validator
+ input#website maxlength="4000" type="text"
+ span.spinner-small
+ .left
+ label SoundCloud (username):
+ #soundcloud_validator.left.presence.site_validator
+ input#soundcloud-username maxlength="100" type="text"
+ span.spinner-small
+ .left
+ label ReverbNation (username):
+ #reverbnation_validator.left.presence.site_validator
+ input#reverbnation-username maxlength="100" type="text"
+ span.spinner-small
+ .left
+ label Bandcamp (username):
+ #bandcamp_validator.left.presence.site_validator
+ input#bandcamp-username maxlength="100" type="text"
+ span.spinner-small
+ .sample_row
+ .left
+ label Fandalism (URL):
+ #fandalism_validator.left.presence.site_validator
+ input#fandalism-username maxlength="100" type="text"
+ span.spinner-small
+ .left
+ label YouTube (username):
+ #youtube_validator.left.presence.site_validator
+ input#youtube-username maxlength="100" type="text"
+ span.spinner-small
+ .left
+ label Facebook (username):
+ #facebook_validator.left.presence.site_validator
+ input#facebook-username maxlength="100" type="text"
+ span.spinner-small
+ .left
+ label Twitter (username):
+ #twitter_validator.left.presence.site_validator
+ input#twitter-username maxlength="100" type="text"
+ span.spinner-small
+ .sample_row.samples-container
+ .left.samples.jamkazam
+ label JamKazam Recordings:
+ .controls
+ .left
+ a#btn-add-jk-recording.button-grey BROWSE
+ br.clearall
+ .sample-list
+ .left.samples.soundcloud
+ label SoundCloud Recordings (URL):
+ .controls
+ #rec_soundcloud_validator.left.sample.site_validator
+ input#soundcloud-recording maxlength="4000" type="text"
+ a#btn-add-soundcloud-recording.button-grey.add-recording-source ADD
+ span.spinner-small
+ br.clearall
+ .sample-list
+ .left.samples.youtube
+ label YouTube Videos (URL):
+ .controls
+ #rec_youtube_validator.left.sample.site_validator
+ input#youtube-video maxlength="4000" type="text"
+ a#btn-add-youtube-video.button-grey.add-recording-source ADD
+ span.spinner-small
+ br.clearall
+ .sample-list
\ No newline at end of file
diff --git a/web/vendor/assets/stylesheets/icheck/minimal/minimal.css b/web/vendor/assets/stylesheets/icheck/minimal/minimal.css
index fea9c54f1..ffda1e558 100644
--- a/web/vendor/assets/stylesheets/icheck/minimal/minimal.css
+++ b/web/vendor/assets/stylesheets/icheck/minimal/minimal.css
@@ -12,6 +12,7 @@
cursor: pointer;
}
+
.icheckbox_minimal {
background-position: 0 0;
}