diff --git a/admin/app/views/jam_track/dump_released.html.erb b/admin/app/views/jam_track/dump_released.html.erb index 6d4fe0655..e04e8fe04 100644 --- a/admin/app/views/jam_track/dump_released.html.erb +++ b/admin/app/views/jam_track/dump_released.html.erb @@ -1,6 +1,6 @@ <%- headers = ['Artist Name', 'Song Name', 'Direct Landing', 'Generic Direct Landing', 'Band Landing'] -%> <%= CSV.generate_line headers %><%- @jam_tracks.each do |jam_track| -%><%= CSV.generate_line([jam_track.original_artist, jam_track.name, - "https://www.jamkazam.com/landing/jamtracks/#{jam_track.short_plan_code}", - "https://www.jamkazam.com/landing/jamtracks/#{jam_track.short_plan_code}?generic=1", - "https://www.jamkazam.com/landing/jamtracks/band/#{jam_track.short_plan_code}" + "https://www.jamkazam.com/landing/jamtracks/#{jam_track.slug}", + "https://www.jamkazam.com/landing/jamtracks/#{jam_track.slug}?generic=1", + "https://www.jamkazam.com/landing/jamtracks/band/#{jam_track.slug}" ]) %><%- end -%> \ No newline at end of file diff --git a/db/manifest b/db/manifest index cbb24506b..92a320cd7 100755 --- a/db/manifest +++ b/db/manifest @@ -301,4 +301,5 @@ repair_band_profile.sql jam_track_onboarding_enhancements.sql jam_track_name_drop_unique.sql jam_track_searchability.sql -harry_fox_agency.sql \ No newline at end of file +harry_fox_agency.sql +jam_track_slug.sql \ No newline at end of file diff --git a/db/up/jam_track_slug.sql b/db/up/jam_track_slug.sql new file mode 100644 index 000000000..e31ddc162 --- /dev/null +++ b/db/up/jam_track_slug.sql @@ -0,0 +1 @@ +ALTER TABLE jam_tracks ADD COLUMN slug VARCHAR(2000) UNIQUE; \ No newline at end of file diff --git a/ruby/lib/jam_ruby/jam_track_importer.rb b/ruby/lib/jam_ruby/jam_track_importer.rb index a0b21938c..ca5c9172e 100644 --- a/ruby/lib/jam_ruby/jam_track_importer.rb +++ b/ruby/lib/jam_ruby/jam_track_importer.rb @@ -444,6 +444,7 @@ module JamRuby jam_track.alternative_license_status = false jam_track.hfa_license_desired = true jam_track.server_fixation_date = Time.now + jam_track.slug = metadata['slug'] || jam_track.generate_slug if is_tency_storage? jam_track.vendor_id = metadata[:id] @@ -1743,11 +1744,20 @@ module JamRuby def remove_s3_special_chars(filename) filename.tr('/&@:,$=+?;\^`><{}[]#%~|', '') end + + def generate_slugs + JamTrack.all.each do |jam_track| + jam_track.generate_slug + jam_track.save! + end + end + def onboarding_exceptions JamTrack.all.each do |jam_track| jam_track.onboarding_exceptions end end + def synchronize_all(options) importers = [] diff --git a/ruby/lib/jam_ruby/models/jam_track.rb b/ruby/lib/jam_ruby/models/jam_track.rb index e42eac2e1..f18303c7c 100644 --- a/ruby/lib/jam_ruby/models/jam_track.rb +++ b/ruby/lib/jam_ruby/models/jam_track.rb @@ -45,6 +45,7 @@ module JamRuby validates :hfa_license_number, numericality: {only_integer: true}, :allow_nil => true validates :hfa_song_code, length: {maximum: 200} validates :album_title, length: {maximum: 200} + validates :slug, uniqueness: true validates_format_of :reproduction_royalty_amount, with: /^\d+\.*\d{0,4}$/, :allow_blank => true validates_format_of :licensor_royalty_amount, with: /^\d+\.*\d{0,4}$/, :allow_blank => true @@ -431,5 +432,15 @@ module JamRuby plan_code[prefix.length..-1] end + # http://stackoverflow.com/questions/4308377/ruby-post-title-to-slug + def sluggarize(field) + field.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '') + end + + def generate_slug + self.slug = sluggarize(original_artist) + '-' + sluggarize(name) + puts "Self.slug #{self.slug}" + end + end end diff --git a/web/app/assets/javascripts/jam_track_preview.js.coffee b/web/app/assets/javascripts/jam_track_preview.js.coffee index 98801ea63..d4462bd10 100644 --- a/web/app/assets/javascripts/jam_track_preview.js.coffee +++ b/web/app/assets/javascripts/jam_track_preview.js.coffee @@ -30,6 +30,7 @@ context.JK.JamTrackPreview = class JamTrackPreview @playButton = @root.find('.play-button') @stopButton = @root.find('.stop-button') @instrumentIcon = @root.find('.instrument-icon') + @instrumentPart = @root.find('.instrument-part') @instrumentName = @root.find('.instrument-name') @part = @root.find('.part') @loading = @root.find('.loading') @@ -64,7 +65,7 @@ context.JK.JamTrackPreview = class JamTrackPreview if @options.master_adds_line_break part = '"' + @jamTrack.name + '"' + ' by ' + @jamTrack.original_artist - @part.html("#{part}") if part != '' + @part.text("#{part}") if part != '' @part.addClass('adds-line-break') else @@ -79,6 +80,7 @@ context.JK.JamTrackPreview = class JamTrackPreview @part.text("(#{part})") if part != '' + @instrumentPart.text(@instrumentName.text() + ' ' + @part.text()) if @jamTrackTrack.preview_mp3_url? diff --git a/web/app/assets/javascripts/react-components/landing/InvidualJamTrackPage.js.jsx.coffee b/web/app/assets/javascripts/react-components/landing/InvidualJamTrackPage.js.jsx.coffee index 809a273a6..2a29f9555 100644 --- a/web/app/assets/javascripts/react-components/landing/InvidualJamTrackPage.js.jsx.coffee +++ b/web/app/assets/javascripts/react-components/landing/InvidualJamTrackPage.js.jsx.coffee @@ -4,7 +4,7 @@ context = window watchVideo: (e) -> e.preventDefault() - window.open("/popups/youtube/player?id=askHvcCoNfw", 'What Are JamTracks?', 'scrollbars=yes,toolbar=no,status=no,height=282,width=500') + window.open("/popups/youtube/player?id=askHvcCoNfw", 'What Are JamTracks?', 'scrollbars=yes,toolbar=no,status=no,height=540,width=960') render: () -> @@ -14,7 +14,7 @@ context = window else if @props.generic? header = "Backing Tracks + Free Amazing App = Unmatched Experience" else - header = "#{@props.jam_track.name} Backing Track by #{@props.jam_track.original_artist}" + header = "\"#{@props.jam_track.name}\" Backing Track by #{@props.jam_track.original_artist}" `
diff --git a/web/app/assets/javascripts/react-components/landing/JamTrackCta.js.jsx.coffee b/web/app/assets/javascripts/react-components/landing/JamTrackCta.js.jsx.coffee index 17e7b4ff0..f1b1c1fba 100644 --- a/web/app/assets/javascripts/react-components/landing/JamTrackCta.js.jsx.coffee +++ b/web/app/assets/javascripts/react-components/landing/JamTrackCta.js.jsx.coffee @@ -41,20 +41,27 @@ rest = context.JK.Rest() render: () -> bandBrowseUrl = "/client?artist=#{this.props.jam_track.original_artist}#/jamtrack/search" + isFree = context.JK.currentUserFreeJamTrack + + if isFree + img =`` + else + img =`` + `
- + {img} $1.99 value

- or browse all {this.props.band_track_count} AC/DC backing tracks + or browse all {this.props.band_track_count} {this.props.jam_track.original_artist} backing tracks

- or browse all {this.props.all_track_count} backing tracks! + or browse all {this.props.all_track_count} backing tracks!
` }) \ No newline at end of file diff --git a/web/app/assets/stylesheets/client/jamTrackPreview.css.scss b/web/app/assets/stylesheets/client/jamTrackPreview.css.scss index c3cae6e81..13495af22 100644 --- a/web/app/assets/stylesheets/client/jamTrackPreview.css.scss +++ b/web/app/assets/stylesheets/client/jamTrackPreview.css.scss @@ -21,16 +21,27 @@ margin-left:10px; } + .instrument-part { + display:inline-block; + white-space:nowrap; + overflow:hidden; + text-overflow:ellipsis; + vertical-align: middle; + margin-left:10px; + } + .instrument-name { display:inline; vertical-align: middle; margin-left:10px; + display:none; } .part { display:inline; vertical-align: middle; margin-left:4px; + display:none; } .play-button, .stop-button { vertical-align:middle; diff --git a/web/app/assets/stylesheets/landings/individual_jamtrack.css.scss b/web/app/assets/stylesheets/landings/individual_jamtrack.css.scss index c663d91e6..ab1ef152a 100644 --- a/web/app/assets/stylesheets/landings/individual_jamtrack.css.scss +++ b/web/app/assets/stylesheets/landings/individual_jamtrack.css.scss @@ -48,12 +48,10 @@ body.web.landing_jamtrack.individual_jamtrack { } } .watch-video { - position:absolute; - bottom:25px; + position:relative; + top:40px; text-align:center; display:block; - width: 50%; - left: 20%; font-size:16px; } @@ -92,6 +90,10 @@ body.web.landing_jamtrack.individual_jamtrack { .jam-track-preview { font-size:12px; + + .instrument-part { + width:175px + } } .cta-holder { diff --git a/web/app/controllers/landings_controller.rb b/web/app/controllers/landings_controller.rb index 70fc1bb71..c6a3730bd 100644 --- a/web/app/controllers/landings_controller.rb +++ b/web/app/controllers/landings_controller.rb @@ -70,26 +70,28 @@ class LandingsController < ApplicationController def individual_jamtrack @no_landing_tag = true - @jam_track = JamTrack.find_by_plan_code("jamtrack-" + params[:plan_code]) + @jam_track = JamTrack.find_by_slug(params[:plan_code]) + @jam_track = JamTrack.find_by_plan_code("jamtrack-" + params[:plan_code]) unless @jam_track band_jam_track_count = @jam_track.band_jam_track_count jam_track_count = JamTrack.count @title = individual_jamtrack_title(false, params[:generic], @jam_track) @description = individual_jamtrack_desc(false, params[:generic], @jam_track) @page_data = {jam_track: @jam_track, all_track_count: jam_track_count, band_track_count: band_jam_track_count, band: false, generic: params[:generic]} - gon.jam_track_plan_code = params[:plan_code] ? "jamtrack-" + params[:plan_code] : nil + gon.jam_track_plan_code = @jam_track.plan_code if @jam_track gon.generic = params[:generic] render 'individual_jamtrack', layout: 'web' end def individual_jamtrack_band @no_landing_tag = true - @jam_track = JamTrack.find_by_plan_code("jamtrack-" + params[:plan_code]) + @jam_track = JamTrack.find_by_slug(params[:plan_code]) + @jam_track = JamTrack.find_by_plan_code("jamtrack-" + params[:plan_code]) unless @jam_track band_jam_track_count = @jam_track.band_jam_track_count jam_track_count = JamTrack.count @title = individual_jamtrack_title(true, params[:generic], @jam_track) @description = individual_jamtrack_desc(true, params[:generic], @jam_track) @page_data = {jam_track: @jam_track, all_track_count: jam_track_count, band_track_count: band_jam_track_count, band: true, generic: params[:generic]} - gon.jam_track_plan_code = params[:plan_code] ? "jamtrack-" + params[:plan_code] : nil + gon.jam_track_plan_code = @jam_track.plan_code if @jam_track gon.generic = params[:generic] render 'individual_jamtrack', layout: 'web' end diff --git a/web/app/views/clients/_jam_track_preview.html.slim b/web/app/views/clients/_jam_track_preview.html.slim index bf6f22d40..65f570949 100644 --- a/web/app/views/clients/_jam_track_preview.html.slim +++ b/web/app/views/clients/_jam_track_preview.html.slim @@ -4,6 +4,7 @@ script type="text/template" id='template-jam-track-preview' a href="#" class='play-button {{data.color}}' a.hidden href="#" class='stop-button {{data.color}}' img.instrument-icon hoveraction="instrument" data-instrument-id="" width="24" height="24" + .instrument-part .instrument-name .part .loading.spinner-small.hidden diff --git a/web/config/sitemap.rb b/web/config/sitemap.rb index 1748e8306..b63fc9634 100644 --- a/web/config/sitemap.rb +++ b/web/config/sitemap.rb @@ -34,9 +34,9 @@ SitemapGenerator::Sitemap.create do add(corp_about_path, priority: 0.9) JamTrack.all.each do |jam_track| - shortened_plan_code = jam_track.short_plan_code - add(individual_jamtrack_path(shortened_plan_code), priority:0.9) - add(individual_jamtrack_band_path(shortened_plan_code), priority:0.9) + slug = jam_track.slug + add(individual_jamtrack_path(slug), priority:0.9) + add(individual_jamtrack_band_path(slug), priority:0.9) end Recording.popular_recordings.each do |recording| diff --git a/web/lib/tasks/jam_tracks.rake b/web/lib/tasks/jam_tracks.rake index b431b4cdb..0d758bada 100644 --- a/web/lib/tasks/jam_tracks.rake +++ b/web/lib/tasks/jam_tracks.rake @@ -82,6 +82,10 @@ namespace :jam_tracks do JamTrackImporter.onboarding_exceptions end + task generate_slugs: :environment do |task, arg| + JamTrackImporter.generate_slugs + end + task sync_all: :environment do |task, args| JamTrackImporter.synchronize_all(skip_audio_upload:false) end