(function(context,$) { "use strict"; context.JK = context.JK || {}; context.JK.ShareDialog = function(app, entityId, entityType) { var logger = context.JK.logger; var rest = context.JK.Rest(); var facebookRest = context.JK.FacebookRest(); var facebookHelper = null; var dialogId = '#share-dialog'; var textMap = { LIVE_SESSION: "LIVE SESSION", SESSION: "SESSION", RECORDING: "RECORDING", RECORDED: "RECORDED" }; function showSpinner() { $(dialogId + ' .dialog-inner').hide(); var spinner = $('
') $(dialogId + ' .content-head').after(spinner); } function hideSpinner() { $(dialogId + ' .spinner').remove(); $(dialogId + ' .dialog-inner').show(); } function handleRecordingShareWithGoogle(message) { var defer = $.Deferred(); defer.resolve(); // remove when implemented return defer; } function handleRecordingShareWithTwitter(message) { var defer = $.Deferred(); defer.resolve(); // remove when implemented return defer; } function handleRecordingShareWithFacebook(message) { var defer = $.Deferred(); rest.getShareRecording({ provider:'facebook', claimed_recording: entityId}) .done(function(data) { facebookHelper.promptLogin() .done(function(response) { if(response.status == "connected") { facebookRest.post({ access_token: response.authResponse.accessToken, message: message, description: data.description, caption: data.caption, name: data.title, picture: data.photo_url }) .done(function(response) { defer.resolve(); }) .fail(function(response) { app.notify({ title : "Unable to Share with Facebook", text : "Error: " + response, "icon_url": "/assets/content/icon_alert_big.png" }); defer.reject(); }) } else { // user doesn't want to auth; this is a form of success defer.resolve(); } }) }) .fail(function(jqXHR) { app.notifyServerError(jqXHR, "Unable to Populate Share Data"); defer.reject(); }) return defer; } function handleSessionShareWithGoogle(message) { var defer = $.Deferred(); defer.resolve(); // remove when implemented return defer; } function handleSessionShareWithTwitter(message) { var defer = $.Deferred(); defer.resolve(); // remove when implemented return defer; } function handleSessionShareWithFacebook(message) { var defer = $.Deferred(); rest.getShareSession({ provider:'facebook', music_session: entityId}) .done(function(data) { facebookHelper.promptLogin() .done(function(response) { if(response.status == "connected") { facebookRest.post({ access_token: response.authResponse.accessToken, message: message, description: data.description, caption: data.caption, name: data.title, picture: data.photo_url }) .done(function(response) { defer.resolve(); }) .fail(function(response) { app.notify({ title : "Unable to Share with Facebook", text : "Error: " + response, "icon_url": "/assets/content/icon_alert_big.png" }); defer.reject(); }) } else { // user doesn't want to auth; this is a form of success defer.resolve(); } }) }) .fail(function(jqXHR) { app.notifyServerError(jqXHR, "Unable to Populate Share Data"); defer.reject(); }) return defer; } function socialShare() { var facebookCheckbox = $(dialogId + ' .share-with-facebook input'); var shareWithFacebook = facebookCheckbox.is(':checked') && !facebookCheckbox.is(':disabled'); var googleCheckbox = $(dialogId + ' .share-with-google input'); var shareWithGoogle = googleCheckbox.is(':checked') && !googleCheckbox.is(':disabled'); var twitterCheckbox = $(dialogId + ' .share-with-twitter input'); var shareWithTwitter = twitterCheckbox.is(':checked') && !twitterCheckbox.is(':disabled'); if(!shareWithFacebook && !shareWithGoogle && !shareWithTwitter) { $(dialogId + ' .share-options').addClass('error') return; } else { $(dialogId + ' .share-options').removeClass('error') } var message = $(dialogId + ' .share-message').val(); if(!message) { message = undefined; } showSpinner(); var chain = []; if(entityType == 'session') { if(shareWithFacebook) { chain.push(handleSessionShareWithFacebook(message)) } if(shareWithTwitter) { chain.push(handleSessionShareWithTwitter(message)) } if(shareWithGoogle) { chain.push(handleSessionShareWithGoogle(message)) } } else { if(shareWithFacebook) { chain.push(handleRecordingShareWithFacebook(message)) } if(shareWithTwitter) { chain.push(handleRecordingShareWithTwitter(message)) } if(shareWithGoogle) { chain.push(handleRecordingShareWithGoogle(message)) } } $.when.apply($, chain) .done(function() { app.layout.closeDialog('share-dialog'); }) .fail(function() { logger.error("share failed") }) .always(function() { hideSpinner(); }); } function enableFacebook() { $(dialogId + ' .share-with-facebook input').removeAttr('disabled') $(dialogId + ' .share-with-facebook a').css('visibility', 'hidden'); } function disableFacebook() { $(dialogId + ' .share-with-facebook input').attr('disabled', 'disabled') $(dialogId + ' .share-with-facebook a').css('visibility', 'visible'); } function handleFbStateChange(response) { if (response && response.status == "connected") { enableFacebook(); } else{ disableFacebook(); } } function registerEvents(onOff) { $(dialogId + ' .dialog-share-button').unbind('click').click(function(e){ socialShare(); return false; }); $(dialogId + ' .share-with-facebook a').unbind('click').click(function(e) { facebookHelper.promptLogin(); return false; }); /* $("#btn-share-copy").zclip({ path: 'zeroclipboard.swf', copy: function() { // console.log("copied " + $(".link-contents").text()); return "TEXT"; } });*/ $("#btn-share-copy").clipboard({ path: '/assets/jquery.clipboard.swf', copy: function() { // Return text in closest element (useful when you have multiple boxes that can be copied) console.log("copying " + $(".link-contents").text()); return "TEST"; } }); } function showDialog() { app.layout.showDialog('share-dialog'); } function initDialog() { var sessionText = textMap.SESSION; var liveSessionText = textMap.LIVE_SESSION; var fill = entityType === sessionText.toLowerCase() ? "teal-fill" : "orange-fill"; $("#shareType").text(entityType); $("#divWidgetCodeHeader").addClass(fill); $("#divWidgetPreviewHeader").addClass(fill); $("#divWidgetPreview").addClass(entityType); // SESSION if (entityType === sessionText.toLowerCase()) { $("#lblWidgetCodeType").html(sessionText.toLowerCase()); $("#lblWidgetPreviewType").html(sessionText.toLowerCase()); $("#spnWidgetCodeBranding").text(liveSessionText.toLowerCase()); $("#spnWidgetPreviewBranding").text(liveSessionText.toLowerCase()); rest.getSessionHistory(entityId) .done(function(response) { // var name, photoUrl; $(".link-contents").html(response.share_url); }); } // RECORDING else if (entityType === "recording") { var recordedText = textMap.RECORDED.toLowerCase(); $("#lblWidgetCodeType").text(textMap.RECORDING); $("#lblWidgetPreviewType").text(textMap.RECORDING); $("#spnWidgetCodeBranding").text(recordedText); $("#spnWidgetPreviewBranding").text(recordedText); rest.getClaimedRecording(entityId) .done(function(response) { var name, photoUrl; if (response.recording.band) { name = response.recording.band.name; photoUrl = context.JK.resolveBandAvatarUrl(response.recording.band.photo_url); } else { name = response.recording.owner.name; photoUrl = context.JK.resolveAvatarUrl(response.recording.owner.photo_url); } $(".link-contents").html(response.share_url); $("#imgWidgetCodeAvatar").attr('src', photoUrl); $("#imgWidgetPreviewAvatar").attr('src', photoUrl); $("#divWidgetPreviewTitle").html(response.recording.name); $("#spnWidgetCodeArtistName").html(name); $("#spnWidgetPreviewArtistName").html(name); $.each(response.recording.recorded_tracks, function(index, val) { $(".widget-members").append(''); }); }); } } function clearTextFields() { } function beforeShow() { $(dialogId + ' .share-options').removeClass('error'); registerEvents(true); } function afterHide() { hideSpinner(); registerEvents(false); } function initialize(_facebookHelper){ facebookHelper = _facebookHelper; var dialogBindings = { 'beforeShow' : beforeShow, 'afterHide': afterHide }; app.bindDialog('share-dialog', dialogBindings); initDialog(); $(facebookHelper).on('fb.login_response', function(e, data) { handleFbStateChange(data.response); }) }; this.initialize = initialize; this.showDialog = showDialog; } return this; })(window,jQuery)