(function(context,$) { "use strict"; context.JK = context.JK || {}; context.JK.RecordingHoverBubble = function(recordingId, x, y) { var logger = context.JK.logger; var rest = context.JK.Rest(); var hoverSelector = "#recording-hover"; function deDupTracks(recordedTracks) { var tracks = []; // this is replicated in recording.rb model var t = {}; t.instrument_ids = [] $.each(recordedTracks, function(index, track) { if (index > 0) { if (recordedTracks[index-1].user.id !== recordedTracks[index].user.id) { t = {}; t.instrument_ids = []; t.instrument_ids.push(track.instrument_id); t.user = track.user; tracks.push(t); } else { if ($.inArray(track.instrument_id, t.instrument_ids)) { t.instrument_ids.push(track.instrument_id); } } } else { t.user = track.user; t.instrument_ids.push(track.instrument_id); tracks.push(t); } }); return tracks; } this.showBubble = function() { var mouseLeft = x < (document.body.clientWidth / 2); var mouseTop = y < (document.body.clientHeight / 2); var css = {}; if (mouseLeft) css.left = x + 20 + 'px'; else css.left = x - (25 + $(hoverSelector).width()) + 'px'; if (mouseTop) css.top = y + 10 + 'px'; else css.top = y - (7 + $(hoverSelector).height()) + 'px'; $(hoverSelector).css(css); $(hoverSelector).fadeIn(500); rest.getClaimedRecording(recordingId) .done(function(response) { var claimedRecording = response; var recording = response.recording; $(hoverSelector).html(''); var deDupedTracks = deDupTracks(recording.recorded_tracks); // musicians var musicianHtml = ''; $.each(deDupedTracks, function(index, val) { var instrumentHtml = ''; var musician = val.user; musicianHtml += '