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; }