voluntary_music_metadata_enrichment 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (126) hide show
  1. checksums.yaml +15 -0
  2. data/app/assets/javascripts/voluntary_music_metadata_enrichment/groups/show.js.coffee +2 -1
  3. data/app/assets/javascripts/voluntary_music_metadata_enrichment/library/index.js.coffee +3 -2
  4. data/app/assets/javascripts/voluntary_music_metadata_enrichment/library/year_in_review_releases/index_view.js.coffee +94 -15
  5. data/app/assets/javascripts/voluntary_music_metadata_enrichment/library/year_in_review_releases/new_view.js.coffee +37 -2
  6. data/app/assets/javascripts/voluntary_music_metadata_enrichment/library/year_in_review_tracks/index_view.js.coffee +94 -15
  7. data/app/assets/javascripts/voluntary_music_metadata_enrichment/library/year_in_review_tracks/new_view.js.coffee +37 -2
  8. data/app/assets/javascripts/voluntary_music_metadata_enrichment/library/years_in_review/index_view.js.coffee +6 -0
  9. data/app/assets/javascripts/voluntary_music_metadata_enrichment/videos/show.js.coffee +2 -0
  10. data/app/controllers/concerns/music_metadata_enrichment/artist_confirmation.rb +98 -132
  11. data/app/controllers/concerns/music_metadata_enrichment/track_confirmation.rb +45 -24
  12. data/app/controllers/library/music/year_in_review_release_flops_controller.rb +31 -0
  13. data/app/controllers/library/music/year_in_review_releases_controller.rb +24 -4
  14. data/app/controllers/library/music/year_in_review_track_flops_controller.rb +31 -0
  15. data/app/controllers/library/music/year_in_review_tracks_controller.rb +55 -24
  16. data/app/controllers/library/music/years_in_review_controller.rb +25 -3
  17. data/app/controllers/music_metadata_enrichment/application_controller.rb +4 -0
  18. data/app/controllers/music_metadata_enrichment/artists_controller.rb +14 -12
  19. data/app/controllers/music_metadata_enrichment/group_memberships_controller.rb +20 -0
  20. data/app/controllers/music_metadata_enrichment/group_year_in_review_releases_controller.rb +29 -0
  21. data/app/controllers/music_metadata_enrichment/group_year_in_review_tracks_controller.rb +27 -0
  22. data/app/controllers/music_metadata_enrichment/group_year_in_reviews_controller.rb +18 -0
  23. data/app/controllers/music_metadata_enrichment/groups_controller.rb +2 -0
  24. data/app/controllers/music_metadata_enrichment/releases_controller.rb +59 -57
  25. data/app/controllers/music_metadata_enrichment/tracks_controller.rb +37 -7
  26. data/app/controllers/music_metadata_enrichment/videos_controller.rb +4 -4
  27. data/app/controllers/voluntary/api/v1/music/releases_controller.rb +17 -0
  28. data/app/controllers/voluntary/api/v1/music/tracks_controller.rb +17 -0
  29. data/app/controllers/voluntary/api/v1/music/videos_controller.rb +31 -0
  30. data/app/controllers/voluntary/api/v1/music/year_in_reviews_controller.rb +94 -0
  31. data/app/helpers/library/music/year_in_review_releases_helper.rb +14 -0
  32. data/app/helpers/library/music/year_in_review_tracks_helper.rb +13 -0
  33. data/app/helpers/library/music/year_in_reviews_helper.rb +22 -0
  34. data/app/helpers/music_metadata_enrichment/lastfm_helper.rb +19 -0
  35. data/app/models/concerns/lastfm_request.rb +54 -0
  36. data/app/models/concerns/music_metadata_enrichment/group_year_in_review_music_entry.rb +14 -0
  37. data/app/models/concerns/year_in_review_music_entry.rb +3 -1
  38. data/app/models/concerns/year_in_review_music_release_base.rb +35 -0
  39. data/app/models/concerns/year_in_review_music_track_base.rb +37 -0
  40. data/app/models/music_artist.rb +106 -27
  41. data/app/models/music_metadata_enrichment/group.rb +14 -13
  42. data/app/models/music_metadata_enrichment/group_membership.rb +13 -0
  43. data/app/models/music_metadata_enrichment/group_year_in_review.rb +72 -0
  44. data/app/models/music_metadata_enrichment/group_year_in_review_release.rb +8 -0
  45. data/app/models/music_metadata_enrichment/group_year_in_review_track.rb +8 -0
  46. data/app/models/music_release.rb +224 -35
  47. data/app/models/music_track.rb +140 -28
  48. data/app/models/year_in_review_music.rb +193 -101
  49. data/app/models/year_in_review_music_release.rb +2 -20
  50. data/app/models/year_in_review_music_release_flop.rb +4 -0
  51. data/app/models/year_in_review_music_track.rb +2 -24
  52. data/app/models/year_in_review_music_track_flop.rb +4 -0
  53. data/app/views/library/music/index.html.erb +2 -2
  54. data/app/views/library/music/year_in_review_release_flops/create.js.erb +5 -0
  55. data/app/views/library/music/year_in_review_releases/_collection.html.erb +55 -41
  56. data/app/views/library/music/year_in_review_releases/_form.html.erb +2 -1
  57. data/app/views/library/music/year_in_review_releases/_multiple_form.html.erb +20 -6
  58. data/app/views/library/music/year_in_review_releases/_year_in_review_release.html.erb +35 -0
  59. data/app/views/library/music/year_in_review_releases/create.js.erb +9 -4
  60. data/app/views/library/music/year_in_review_releases/destroy.js.erb +2 -2
  61. data/app/views/library/music/year_in_review_releases/export.html.erb +2 -1
  62. data/app/views/library/music/year_in_review_releases/index.html.erb +4 -4
  63. data/app/views/library/music/year_in_review_track_flops/create.js.erb +5 -0
  64. data/app/views/library/music/year_in_review_tracks/_collection.html.erb +49 -38
  65. data/app/views/library/music/year_in_review_tracks/_form.html.erb +2 -1
  66. data/app/views/library/music/year_in_review_tracks/_multiple_form.html.erb +69 -42
  67. data/app/views/library/music/year_in_review_tracks/_year_in_review_track.html.erb +29 -0
  68. data/app/views/library/music/year_in_review_tracks/create.js.erb +9 -4
  69. data/app/views/library/music/year_in_review_tracks/destroy.js.erb +2 -2
  70. data/app/views/library/music/year_in_review_tracks/export.html.erb +1 -1
  71. data/app/views/library/music/year_in_review_tracks/index.html.erb +3 -3
  72. data/app/views/library/music/year_in_review_tracks/multiple_new.js.erb +5 -2
  73. data/app/views/library/music/years_in_review/_collection.html.erb +23 -6
  74. data/app/views/library/music/years_in_review/destroy.js.erb +1 -0
  75. data/app/views/library/music/years_in_review/index.html.erb +2 -2
  76. data/app/views/library/music/years_in_review/publish.js.erb +1 -0
  77. data/app/views/library/music/years_in_review/show.html.erb +3 -3
  78. data/app/views/music_metadata_enrichment/artists/_collection.html.erb +3 -3
  79. data/app/views/music_metadata_enrichment/group_artist_connections/import.html.erb +1 -1
  80. data/app/views/music_metadata_enrichment/group_memberships/_create_or_destroy.html.erb +9 -0
  81. data/app/views/music_metadata_enrichment/group_memberships/create.js.erb +5 -0
  82. data/app/views/music_metadata_enrichment/group_memberships/destroy.js.erb +5 -0
  83. data/app/views/music_metadata_enrichment/group_year_in_review_releases/index.html.erb +16 -0
  84. data/app/views/music_metadata_enrichment/group_year_in_review_tracks/index.html.erb +16 -0
  85. data/app/views/music_metadata_enrichment/group_year_in_reviews/index.html.erb +18 -0
  86. data/app/views/music_metadata_enrichment/group_year_in_reviews/show.html.erb +20 -0
  87. data/app/views/music_metadata_enrichment/groups/show.html.erb +7 -1
  88. data/app/views/music_metadata_enrichment/releases/_spotify_album_player.html.erb +3 -0
  89. data/app/views/music_metadata_enrichment/releases/announce.html.erb +3 -1
  90. data/app/views/music_metadata_enrichment/releases/by_name.html.erb +1 -1
  91. data/app/views/music_metadata_enrichment/releases/name.html.erb +2 -1
  92. data/app/views/music_metadata_enrichment/releases/name_confirmation.html.erb +2 -1
  93. data/app/views/music_metadata_enrichment/releases/show.html.erb +24 -0
  94. data/app/views/music_metadata_enrichment/shared/_artist_confirmation_form.html.erb +2 -1
  95. data/app/views/music_metadata_enrichment/shared/_new_artist_form.html.erb +2 -1
  96. data/app/views/music_metadata_enrichment/shared/_new_track_form.html.erb +2 -1
  97. data/app/views/music_metadata_enrichment/shared/_track_confirmation_form.html.erb +3 -2
  98. data/app/views/music_metadata_enrichment/tracks/show.html.erb +20 -2
  99. data/app/views/music_metadata_enrichment/videos/artist_confirmation.html.erb +1 -1
  100. data/app/views/music_metadata_enrichment/videos/show.html.erb +7 -1
  101. data/config/locales/resources/music_metadata_enrichment_group_memberships/en.yml +7 -0
  102. data/config/locales/resources/music_releases/en.yml +4 -0
  103. data/config/locales/resources/music_tracks/en.yml +8 -3
  104. data/config/locales/resources/year_in_review_music_release_flops/en.yml +4 -0
  105. data/config/locales/resources/year_in_review_music_releases/en.yml +6 -1
  106. data/config/locales/resources/year_in_review_music_track_flops/en.yml +4 -0
  107. data/config/locales/resources/year_in_review_music_tracks/en.yml +4 -0
  108. data/config/locales/resources/years_in_review_music/en.yml +8 -3
  109. data/config/routes.rb +30 -2
  110. data/config/routes/api.rb +32 -0
  111. data/db/migrate/20150106183434_add_product_music_metadata_enrichment.rb +3 -1
  112. data/db/migrate/20150120091801_create_music_metadata_enrichment_groups.rb +2 -2
  113. data/db/migrate/20150208120722_add_is_lp_to_music_releases.rb +5 -0
  114. data/db/migrate/20150209091856_year_in_review_music_releases_and_tracks_flops.rb +34 -0
  115. data/db/migrate/20150209151056_add_is_ambiguous_to_music_artists.rb +5 -0
  116. data/db/migrate/20150213170604_create_group_memberships.rb +11 -0
  117. data/db/migrate/20150214083714_create_group_year_in_review_music_releases_and_tracks.rb +77 -0
  118. data/db/migrate/20150215120545_add_matches_to_year_in_reviews_music.rb +6 -0
  119. data/db/migrate/20150215135051_add_spotify_album_id_to_music_releases.rb +8 -0
  120. data/db/migrate/20150220084746_add_state_to_year_in_review_music_entries.rb +7 -0
  121. data/lib/voluntary_music_metadata_enrichment/ability.rb +12 -3
  122. data/lib/voluntary_music_metadata_enrichment/concerns/model/user/has_music_library.rb +69 -34
  123. data/lib/voluntary_music_metadata_enrichment/version.rb +1 -1
  124. metadata +63 -64
  125. data/MIT-LICENSE +0 -20
  126. data/README.rdoc +0 -3
@@ -1,4 +1,5 @@
1
1
  <%= simple_form_for(@year_in_review_track, url: create_user_music_year_in_review_top_track_path(params[:user_id], params[:year]), method: :post, remote: true, html: {class: 'form-horizontal'}) do |f| %>
2
+ <%= hidden_field_tag :year_in_review_music_id, @year_in_review.id %>
2
3
  <div class="modal-header">
3
4
  <button type="button" id="close_bootstrap_modal_button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
4
5
  <h3><%= t('year_in_review_music_tracks.index.add_single_long', year: params[:year])%></h3>
@@ -13,6 +14,6 @@
13
14
  <div id="year_in_review_music_track_track_name_suggestions"/>
14
15
  </div>
15
16
  <div class="modal-footer">
16
- <%= f.submit %>
17
+ <input type="button" id="add_track_button" value="<%= t('music_tracks.new.short_title')%>"/>
17
18
  </div>
18
19
  <% end %>
@@ -1,46 +1,73 @@
1
1
  <%= form_tag multiple_new_user_music_year_in_review_top_tracks_path(params[:year]), method: :get, remote: true, class: 'form-horizontal' do %>
2
- <% if @tracks.none? %>
3
- <div class="modal-header">
4
- <h3><%= t('year_in_review_music_tracks.index.add_multiple_from_year', year: params[:year])%></h3>
5
- </div>
6
- <div class="modal-body" style="overflow-y:none;">
7
- <%= t('music_tracks.index.empty_collection')%>
8
- </div>
9
- <div class="modal-footer">
10
- <%= submit_tag t('general.close') %> <%= submit_tag t('year_in_review_music_tracks.multiple_new.submit') %>
11
- </div>
2
+ <% if params[:only_tracks_of_top_releases].blank? || (params[:only_tracks_of_top_releases] == 'true' && @release_ids.none?) %>
3
+ <div class="modal-header">
4
+ <h3><%= t('year_in_review_music_tracks.index.add_multiple_from_year', year: params[:year])%></h3>
5
+ </div>
6
+ <div class="modal-body" style="overflow-y:none;">
7
+ <%= render partial: 'shared/layouts/twitter_bootstrap/control_group/boolean', locals: {
8
+ required: true, label: t('year_in_review_music_tracks.multiple_new.only_tracks_of_top_releases'), id: 'only_tracks_of_top_releases'
9
+ } %>
10
+ </div>
11
+ <div class="modal-footer">
12
+ <%= submit_tag t('general.close') %> <%= submit_tag t('general.submit') %>
13
+ </div>
12
14
  <% else %>
13
- <div class="modal-header">
14
- <h3><%= t('year_in_review_music_tracks.multiple_new.title', year: params[:year])%> <%= t('year_in_review_music_tracks.multiple_new.tracks_left', count: @tracks_left) %></h3>
15
- </div>
16
- <div class="modal-body scrollable-modal-body" style="overflow-y:none;">
17
- <%= hidden_field_tag :year, params[:year] %>
18
- <%= hidden_field_tag :last_id, params[:last_id] %>
19
-
20
- <table class="table" style="margin-bottom: 0px">
21
- <thead>
22
- <tr class="<%= cycle('odd', 'even') %>">
23
- <th style="width: 15px;"></th>
24
- <th style="width: 75px"><%= t("activerecord.attributes.music_release.released_at") %></th>
25
- <th style="width: 200px;"><%= t("music_artists.model.short_name") %></th>
26
- <th><%= t("attributes.name") %></th>
27
- <th></th>
28
- </tr>
29
- </thead>
30
- <tbody>
31
- <% @tracks.each do |track| %>
32
- <tr>
33
- <td><%= check_box_tag "year_in_review_music_tracks[#{track.id}]", 1 %></td>
34
- <td><%= track.released_at.strftime('%d.%m.%Y') %></td>
35
- <td><%= link_to track.artist_name, music_artist_path(track.artist_id) %></td>
36
- <td><%= link_to track.name, music_track_path(track.id) %></td>
37
- <td><%= render partial: 'music_metadata_enrichment/tracks/spotify_track_player', locals: { spotify_track_id: track.spotify_track_id } %></td>
38
- <% end %>
39
- </tbody>
40
- </table>
41
- </div>
42
- <div class="modal-footer">
43
- <%= submit_tag t('general.close') %> <%= submit_tag t('year_in_review_music_tracks.multiple_new.submit') %>
44
- </div>
15
+ <% if @tracks.none? %>
16
+ <div class="modal-header">
17
+ <h3><%= t('year_in_review_music_tracks.index.add_multiple_from_year', year: params[:year])%></h3>
18
+ </div>
19
+ <div class="modal-body" style="overflow-y:none;">
20
+ <%= t('music_tracks.index.empty_collection')%>
21
+ </div>
22
+ <div class="modal-footer">
23
+ <%= submit_tag t('general.close') %> <%= submit_tag t('year_in_review_music_tracks.multiple_new.submit') %>
24
+ </div>
25
+ <% else %>
26
+ <div class="modal-header">
27
+ <h3><%= t('year_in_review_music_tracks.multiple_new.title', year: params[:year])%> <%= t('year_in_review_music_tracks.multiple_new.tracks_left', count: @tracks_left) %></h3>
28
+ </div>
29
+ <div class="modal-body scrollable-modal-body" style="overflow-y:none;">
30
+ <%= hidden_field_tag :only_tracks_of_top_releases, params[:only_tracks_of_top_releases] %>
31
+ <%= hidden_field_tag :year, params[:year] %>
32
+ <%= hidden_field_tag :last_id, params[:last_id] %>
33
+
34
+ <table class="table" style="margin-bottom: 0px">
35
+ <thead>
36
+ <tr class="<%= cycle('odd', 'even') %>">
37
+ <th style="width:15px;"><input type="checkbox" id="toggle_checkboxes_checkbox"/></th>
38
+ <th style="width:75px;"><%= t("activerecord.attributes.music_release.released_at") %></th>
39
+ <th style="width:200px;"><%= t("music_artists.model.short_name") %></th>
40
+ <th style="width:200px;"><%= t("attributes.name") %></th>
41
+ <th style="width:300px;"></th>
42
+ <th></th>
43
+ </tr>
44
+ </thead>
45
+ <tbody>
46
+ <% @tracks.each do |track| %>
47
+ <tr id="track_<%= track.id %>">
48
+ <td><%= check_box_tag "year_in_review_music_tracks[#{track.id}]", 1, false, class: 'toggleable_checkbox' %></td>
49
+ <td><%= track.released_at.strftime('%d.%m.%Y') %></td>
50
+ <td><%= link_to track.artist_name, music_artist_path(track.artist_id) %></td>
51
+ <td><%= link_to track.name, music_track_path(track.id) %></td>
52
+ <td>
53
+ <% if track.spotify_track_id.present? %>
54
+ <i class="icon-play play_track_button" data-spotify-track-id="<%= track.spotify_track_id %>" data-target="#spotify_track_player_<%= track.id %>" style="cursor:pointer; cursor:hand;"></i>
55
+ <div id="spotify_track_player_<%= track.id %>">
56
+ </div>
57
+ <% end %>
58
+ </td>
59
+ <td>
60
+ <%= link_to create_user_music_year_in_review_flop_track_path(current_user.id, @year_in_review.year, year_in_review_music_track_flop: { track_id: track.id }), method: :post, remote: true, class: 'btn btn-danger create_music_year_in_review_flop_track_link' do %>
61
+ <%= t('years_in_review_music.general.do_not_show_here_anymore') %> <%= image_tag 'voluntary/spinner.gif', class: 'ajax_spinner hide' %>
62
+ <% end %>
63
+ </td>
64
+ <% end %>
65
+ </tbody>
66
+ </table>
67
+ </div>
68
+ <div class="modal-footer">
69
+ <%= submit_tag t('general.close') %> <%= submit_tag t('year_in_review_music_tracks.multiple_new.submit') %>
70
+ </div>
71
+ <% end %>
45
72
  <% end %>
46
73
  <% end %>
@@ -0,0 +1,29 @@
1
+ <li id="competitor_<%= year_in_review_track.id %>" data-id="<%= year_in_review_track.id %>" data-position="<%= year_in_review_track.position %>">
2
+ <table class="table" style="margin-bottom: 0px">
3
+ <tr class="<%= cycle('odd', 'even') %>">
4
+ <td class="list-element-striped" style="width:15px"><%= image_tag 'voluntary/spinner.gif', class: 'hide sorting_spinner' %></td>
5
+ <td class="list-element-striped competitor_position" style="width: 50px; text-align:right"><%= year_in_review_track.position %></td>
6
+ <td class="list-element-striped" style="width: 200px;"><%= link_to year_in_review_track.artist_name, music_artist_path(year_in_review_track.artist_id) %></td>
7
+ <td class="list-element-striped" style="width: 200px;">
8
+ <%= link_to year_in_review_track.track_name, music_track_path(year_in_review_track.track_id) %>
9
+
10
+ <span class="competitor_name hide"<% if year_in_review_track.spotify_track_id.present? %> data-proc-argument="<%= year_in_review_track.spotify_track_id %>;<%= year_in_review_track.id %>"<% end %>>
11
+ <%= link_to year_in_review_track.artist_name, music_artist_path(year_in_review_track.artist_id) %> - <%= link_to year_in_review_track.track_name, music_track_path(year_in_review_track.track_id) %>
12
+ </span>
13
+ </td>
14
+ <td class="list-element-striped" style="width: 50px; text-align:center;">
15
+ <% if year_in_review_track.spotify_track_id.present? %>
16
+ <i class="icon-play play_track_button" data-spotify-track-id="<%= year_in_review_track.spotify_track_id %>" style="cursor:pointer; cursor:hand;"></i>
17
+ <% end %>
18
+ </td>
19
+ <td class="list-element-striped" style="width: 75px;"><%= year_in_review_track.released_at.present? ? year_in_review_track.released_at.strftime('%d.%m.%Y') : '' %></td>
20
+ <td class="list-element-striped">
21
+ <% if @group.blank? && current_user.try(:id) == params[:user_id].to_i %>
22
+ <%= link_to destroy_music_year_in_review_top_track_path(year_in_review_track.id), method: :delete, remote: true, class: 'btn btn-danger destroy_music_year_in_review_top_track_link' do %>
23
+ <%= t('general.remove') %> <%= image_tag 'voluntary/spinner.gif', class: 'ajax_spinner hide' %>
24
+ <% end %>
25
+ <% end %>
26
+ </td>
27
+ </tr>
28
+ </table>
29
+ </li>
@@ -1,11 +1,16 @@
1
+ if($('#competitor_<%= @year_in_review_track.id %>').length == 0) {
1
2
  <% if @year_in_review_track.persisted? %>
2
- $('#years_in_review').html('<%= escape_javascript render(partial: 'library/music/year_in_review_tracks/collection') %>');
3
- window.VoluntaryMusicMetadataEnrichment.Library.YearInReviewTracks.IndexView.makeCollectionSortable();
3
+ if($('#no_tracks_message').length == 1) {
4
+ $('#no_tracks_message').remove();
5
+ }
6
+
7
+ $('#year_in_review_music_tracks').append('<%= escape_javascript render(partial: 'library/music/year_in_review_tracks/year_in_review_track', locals: { year_in_review_track: @year_in_review_track }) %>');
4
8
  $('#bootstrap_modal').modal('hide')
5
9
  <% else %>
6
10
  $('#bootstrap_modal').html('<%= escape_javascript render(partial: 'library/music/year_in_review_tracks/form') %>');
7
11
  <% end %>
8
12
 
9
13
  <% if @notice.present? %>
10
- alert('<%= @notice %>');
11
- <% end %>
14
+ alert('<%= @notice %>');
15
+ <% end %>
16
+ }
@@ -1,2 +1,2 @@
1
- $('#years_in_review').html('<%= escape_javascript render(partial: 'library/music/year_in_review_tracks/collection') %>');
2
- window.VoluntaryMusicMetadataEnrichment.Library.YearInReviewTracks.IndexView.makeCollectionSortable();
1
+ $('#competitor_<%= @year_in_review_track.id %>').remove()
2
+ window.VoluntaryMusicMetadataEnrichment.Library.YearInReviewTracks.IndexView.resetPositions()
@@ -5,7 +5,7 @@
5
5
  <div class="modal-body" style="overflow-y:none;">
6
6
  <textarea rows="20" style="width:515px;">
7
7
  <% @year_in_review_tracks.each do |year_in_review_track| %>
8
- <%= year_in_review_track.position %>. [artist]<%= year_in_review_track.artist_name %>[/artist] - [track artist=<%= year_in_review_track.artist_name %>]<%= year_in_review_track.track_name %>[/track]
8
+ <%= year_in_review_track.position %>. <%= lastfm_track_text(year_in_review_track) %>
9
9
  <% end %>
10
10
  </textarea>
11
11
  </div>
@@ -1,12 +1,12 @@
1
1
  <% content_for(:title) do %>
2
- <%= t('year_in_review_music_tracks.index.title', user: name_with_apostrophe(@user.lastfm_user_name || @user.full_name), year: params[:year]) %>
2
+ <%= t('year_in_review_music_tracks.index.title', user: name_with_apostrophe(@user.best_available_name), year: params[:year]) %>
3
3
  <% end %>
4
4
 
5
5
  <% content_for :breadcrumbs do %>
6
6
  <%= raw [
7
- link_to(I18n.t('music_library.index.title', name: name_with_apostrophe(@user.lastfm_user_name || @user.full_name)), user_music_library_path(@user)),
7
+ link_to(I18n.t('music_library.index.title', name: name_with_apostrophe(@user.best_available_name)), user_music_library_path(@user)),
8
8
  link_to(I18n.t('years_in_review_music.index.short_title'), user_music_years_in_review_path(@user)),
9
- link_to(I18n.t('years_in_review_music.show.title', year: @year_in_review.year), user_music_year_in_review_path(@user, @year_in_review.year)),
9
+ link_to(@year_in_review.year, user_music_year_in_review_path(@user, @year_in_review.year)),
10
10
  link_to(I18n.t('year_in_review_music_tracks.index.shortest_title'), user_music_year_in_review_top_tracks_path(@user, @year_in_review.year))
11
11
  ].join(' > ') %>
12
12
  <% end %>
@@ -1,7 +1,10 @@
1
- <% if params[:commit] == I18n.t('general.close') || @tracks.none? %>
1
+ <% if @message.blank? && (params[:commit] == I18n.t('general.close') || @tracks.none?) %>
2
2
  $('#years_in_review').html('<%= escape_javascript render(partial: 'library/music/year_in_review_tracks/collection') %>');
3
3
  window.VoluntaryMusicMetadataEnrichment.Library.YearInReviewTracks.IndexView.makeCollectionSortable();
4
4
  $('#bootstrap_modal').modal('hide')
5
5
  <% else %>
6
6
  $('#bootstrap_modal').html('<%= escape_javascript render(partial: 'library/music/year_in_review_tracks/multiple_form') %>');
7
- <% end %>
7
+ <% end %>
8
+ <% if @message.present? %>
9
+ alert("<%= @message %>");
10
+ <% end %>
@@ -1,4 +1,4 @@
1
- <h3><%= t('years_in_review_music.index.short_title') %></h3>
1
+ <h3><%= link_to t('years_in_review_music.index.short_title'), group_or_user_path('music_years_in_review') %></h3>
2
2
 
3
3
  <% if @years_in_review.none? %>
4
4
  <p><%= t('years_in_review_music.index.empty_collection') %></p>
@@ -7,17 +7,18 @@
7
7
  <thead>
8
8
  <tr class="<%= cycle('odd', 'even') %>">
9
9
  <th style="width: 25px"><%= t("activerecord.attributes.year_in_review.year") %></th>
10
- <th style="width: 75px"></th>
10
+ <th style="width: 80px"></th>
11
+ <th style="width: 80px"></th>
11
12
  <th></th>
12
13
  </tr>
13
14
  </thead>
14
15
  <tbody>
15
16
  <% @years_in_review.each do |year_in_review| %>
16
17
  <tr class="<%= cycle('odd', 'even') %>">
17
- <td><%= link_to year_in_review.year, user_music_year_in_review_path(year_in_review.user_id, year_in_review.year) %></td>
18
+ <td><%= link_to year_in_review.year, group_or_user_path('music_year_in_review', year_in_review) %></td>
18
19
  <td>
19
20
  <%= link_to(
20
- user_music_year_in_review_top_releases_path(year_in_review.user_id, year_in_review.year),
21
+ group_or_user_path('music_year_in_review_top_releases', year_in_review),
21
22
  class: 'year_in_review_music_releases_link', :'data-replace' => '#years_in_review'
22
23
  ) do %>
23
24
  <%= t('year_in_review_music_releases.index.shortest_title') %>
@@ -26,13 +27,29 @@
26
27
  </td>
27
28
  <td>
28
29
  <%= link_to(
29
- user_music_year_in_review_top_tracks_path(year_in_review.user_id, year_in_review.year),
30
+ group_or_user_path('music_year_in_review_top_tracks', year_in_review),
30
31
  class: 'year_in_review_music_tracks_link', :'data-replace' => '#years_in_review'
31
32
  ) do %>
32
33
  <%= t('year_in_review_music_tracks.index.shortest_title') %>
33
34
  <%= image_tag 'voluntary/spinner.gif', class: 'ajax_spinner hide' %>
34
35
  <% end %>
35
36
  </td>
37
+ <td>
38
+ <% if @group.blank? && current_user.try(:id) == params[:user_id].to_i && year_in_review.draft? %>
39
+ <%= link_to(
40
+ publish_music_year_in_review_path(year_in_review.id), method: :put, remote: true,
41
+ class: 'btn publish_music_year_in_review_link', id: "year_in_review_publish_link_#{year_in_review.id}"
42
+ ) do %>
43
+ <%= t('general.publish') %> <%= image_tag 'voluntary/spinner.gif', class: 'ajax_spinner hide' %>
44
+ <% end %>
45
+ <% end %>
46
+
47
+ <% if @group.blank? && current_user.try(:id) == params[:user_id].to_i %>
48
+ <%= link_to destroy_music_year_in_review_path(year_in_review.id), method: :delete, remote: true, class: 'btn btn-danger destroy_music_year_in_review_link' do %>
49
+ <%= t('general.remove') %> <%= image_tag 'voluntary/spinner.gif', class: 'ajax_spinner hide' %>
50
+ <% end %>
51
+ <% end %>
52
+ </td>
36
53
  </tr>
37
54
  <% end %>
38
55
  </tbody>
@@ -41,7 +58,7 @@
41
58
 
42
59
  <%= will_paginate @years_in_review %>
43
60
 
44
- <% if current_user.try(:id) == params[:user_id].to_i %>
61
+ <% if !@group.present? && current_user.try(:id) == params[:user_id].to_i %>
45
62
  <%= form_tag(create_user_music_year_in_review_path(params[:user_id]), method: :post, class: 'form-search', id: 'new_music_year_in_review_form', remote: true) do %>
46
63
  <%= hidden_field_tag :authenticity_token, form_authenticity_token %>
47
64
  <%= render partial: 'shared/form/error_messages', locals: { resource: @year_in_review } %>
@@ -0,0 +1 @@
1
+ $('#years_in_review').html('<%= escape_javascript render(partial: 'library/music/years_in_review/collection') %>');
@@ -1,9 +1,9 @@
1
1
  <% content_for :title do %>
2
- <%= t('years_in_review_music.index.title', user: name_with_apostrophe(@user.lastfm_user_name || @user.full_name)) %>
2
+ <%= t('years_in_review_music.index.title', user: name_with_apostrophe(@user.best_available_name)) %>
3
3
  <% end %>
4
4
  <% content_for :breadcrumbs do %>
5
5
  <%= raw [
6
- link_to(I18n.t('music_library.index.title', name: name_with_apostrophe(@user.lastfm_user_name || @user.full_name)), user_music_library_path(@user)),
6
+ link_to(I18n.t('music_library.index.title', name: name_with_apostrophe(@user.best_available_name)), user_music_library_path(@user)),
7
7
  link_to(I18n.t('years_in_review_music.index.short_title'), user_music_years_in_review_path(@user))
8
8
  ].join(' > ') %>
9
9
  <% end %>
@@ -0,0 +1 @@
1
+ $('<%= "#year_in_review_publish_link_#{@year_in_review.id}" %>').remove();
@@ -1,12 +1,12 @@
1
1
  <% content_for(:title) do %>
2
- <%= t('years_in_review_music.show.title_with_name', user: name_with_apostrophe(@user.lastfm_user_name || @user.full_name), year: params[:year]) %>
2
+ <%= t('years_in_review_music.show.title_with_name', user: name_with_apostrophe(@user.best_available_name), year: params[:year]) %>
3
3
  <% end %>
4
4
 
5
5
  <% content_for :breadcrumbs do %>
6
6
  <%= raw [
7
- link_to(I18n.t('music_library.index.title', name: name_with_apostrophe(@user.lastfm_user_name || @user.full_name)), user_music_library_path(@user)),
7
+ link_to(I18n.t('music_library.index.title', name: name_with_apostrophe(@user.best_available_name)), user_music_library_path(@user)),
8
8
  link_to(I18n.t('years_in_review_music.index.short_title'), user_music_years_in_review_path(@user)),
9
- link_to(I18n.t('years_in_review_music.show.title', year: @year_in_review.year), user_music_year_in_review_path(@user, @year_in_review.year))
9
+ link_to(@year_in_review.year, user_music_year_in_review_path(@user, @year_in_review.year))
10
10
  ].join(' > ') %>
11
11
  <% end %>
12
12
 
@@ -38,7 +38,7 @@
38
38
  <td style="width: 75px"><%= artist.founded_at.present? ? artist.founded_at.strftime('%d.%m.%Y') : '' %></td>
39
39
  <% end %>
40
40
  <% if with_top_tracks %>
41
- <td style="width: 100px"><%= raw(artist.tracks.without_slaves.order('plays DESC').limit(3).map{|t| link_to(t.name, music_track_path(t.id)) }.join(', '))%></td>
41
+ <td style="width: 100px"><%= raw(artist.tracks.without_slaves.where('plays IS NOT NULL').order('plays DESC').limit(3).map{|t| link_to(t.name, music_track_path(t.id)) }.join(', '))%></td>
42
42
  <% end %>
43
43
  <td style="width: 75px"><%= artist.listeners %></td>
44
44
  <% if user_signed_in? && current_user.id == params[:user_id].to_i %>
@@ -57,9 +57,9 @@
57
57
  </table>
58
58
  <% end %>
59
59
  <%= will_paginate @artists, params: { controller: '/music_metadata_enrichment/artists', action: 'index', id: nil }.merge(@pagination_params ||= {}) if paginate %>
60
- <% if params[:group_id].present? %>
60
+ <% if @group.present? %>
61
61
  <p>
62
- <%= link_to t('music_metadata_enrichment_group_artist_connections.new.short_title'), new_music_group_artist_path(params[:group_id]) %>
62
+ <%= link_to t('music_metadata_enrichment_group_artist_connections.new.short_title'), new_music_group_artist_path(@group.id) %>
63
63
  </p>
64
64
  <% elsif params[:user_id].present? %>
65
65
  <p>
@@ -1,6 +1,6 @@
1
1
  <h3><%= t('music_metadata_enrichment_group_artist_connections.import.title') %></h3>
2
2
 
3
- <%= simple_form_for(@group, url: import_music_group_artists_path, method: :get, html: {class: 'form-horizontal'}) do |f| %>
3
+ <%= simple_form_for(@group, url: post_import_music_group_artists_path(@group.id), method: :post, html: {class: 'form-horizontal'}) do |f| %>
4
4
  <%= f.input :artist_connections_text, as: :text %>
5
5
  <%= f.submit %>
6
6
  <% end %>
@@ -0,0 +1,9 @@
1
+ <% if user_signed_in? %>
2
+ <div id="group_membership" style="display:inline;">
3
+ <% if @membership.present? && @membership.persisted? %>
4
+ <%= link_to t('general.leave'), music_group_membership_path(@membership.id), method: :delete, remote: true %>
5
+ <% else %>
6
+ <%= link_to t('general.join'), music_group_memberships_path(@group.id), method: :post, remote: true %>
7
+ <% end %>
8
+ </div>
9
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <% if @membership.persisted? %>
2
+ $('#group_membership').html('<%= escape_javascript render(partial: 'music_metadata_enrichment/group_memberships/create_or_destroy') %>');
3
+ <% else %>
4
+ alert("<%= I18n.t('music_metadata_enrichment_group_memberships.create.failed') %>");
5
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <% if @membership.persisted? %>
2
+ alert("<%= I18n.t('music_metadata_enrichment_group_memberships.destroy.failed') %>");
3
+ <% else %>
4
+ $('#group_membership').html('<%= escape_javascript render(partial: 'music_metadata_enrichment/group_memberships/create_or_destroy') %>');
5
+ <% end %>
@@ -0,0 +1,16 @@
1
+ <% content_for(:title) do %>
2
+ <%= t('year_in_review_music_releases.index.title', user: name_with_apostrophe(@group.name), year: params[:year]) %>
3
+ <% end %>
4
+
5
+ <% content_for :breadcrumbs do %>
6
+ <%= raw [
7
+ link_to(@group.name, music_group_path(@group)),
8
+ link_to(I18n.t('years_in_review_music.index.short_title'), group_music_years_in_review_path(@group)),
9
+ link_to(I18n.t('years_in_review_music.show.title', year: @year_in_review.year), group_music_year_in_review_path(@group, @year_in_review.year)),
10
+ link_to(I18n.t('year_in_review_music_releases.index.shortest_title'), group_music_year_in_review_top_releases_path(@group, @year_in_review.year))
11
+ ].join(' > ') %>
12
+ <% end %>
13
+
14
+ <div id="years_in_review">
15
+ <%= render partial: 'library/music/year_in_review_releases/collection' %>
16
+ </div>
@@ -0,0 +1,16 @@
1
+ <% content_for(:title) do %>
2
+ <%= t('year_in_review_music_tracks.index.title', user: name_with_apostrophe(@group.name), year: params[:year]) %>
3
+ <% end %>
4
+
5
+ <% content_for :breadcrumbs do %>
6
+ <%= raw [
7
+ link_to(@group.name, music_group_path(@group)),
8
+ link_to(I18n.t('years_in_review_music.index.short_title'), group_music_years_in_review_path(@group)),
9
+ link_to(I18n.t('years_in_review_music.show.title', year: @year_in_review.year), group_music_year_in_review_path(@group, @year_in_review.year)),
10
+ link_to(I18n.t('year_in_review_music_tracks.index.shortest_title'), group_music_year_in_review_top_tracks_path(@group, @year_in_review.year))
11
+ ].join(' > ') %>
12
+ <% end %>
13
+
14
+ <div id="years_in_review">
15
+ <%= render partial: 'library/music/year_in_review_tracks/collection' %>
16
+ </div>
@@ -0,0 +1,18 @@
1
+ <% content_for :title do %>
2
+ <%= t('years_in_review_music.index.title', user: name_with_apostrophe(@group.name)) %>
3
+ <% end %>
4
+ <% content_for :breadcrumbs do %>
5
+ <%= raw [
6
+ link_to(@group.name, music_group_path(@group)),
7
+ link_to(I18n.t('years_in_review_music.index.short_title'), group_music_years_in_review_path(@group))
8
+ ].join(' > ') %>
9
+ <% end %>
10
+ <% content_for :document_ready do %>
11
+ new window.VoluntaryMusicMetadataEnrichment.Library.YearsInReview.IndexView(false);
12
+ <% end %>
13
+
14
+ <%= image_tag 'voluntary/spinner.gif', id: 'years_in_review_spinner', class: 'hide' %>
15
+
16
+ <div id="years_in_review">
17
+ <%= render partial: 'library/music/years_in_review/collection' %>
18
+ </div>