|
import { param } from 'jquery'; |
|
import { Controller } from 'marionette'; |
|
|
|
import ProjectController from '../controllers/ProjectController'; |
|
|
|
import logger from '../helpers/logger'; |
|
|
|
const settings = {}; |
|
|
|
settings.facebook = { |
|
url: '//www.facebook.com/sharer.php?s=100&', |
|
size: [564, 580], |
|
params: { |
|
'url': 'p[url]', |
|
'title': 'p[title]', |
|
'description': 'p[summary]', |
|
'image': 'p[images][0]' |
|
} |
|
}; |
|
settings.twitter = { |
|
url: '//twitter.com/share?', |
|
size: [480, 300], |
|
params: { |
|
'url': 'url', |
|
'description': 'text', |
|
'hashtags': 'hashtags' |
|
} |
|
}; |
|
settings.whatsapp = { |
|
url: 'whatsapp://send?', |
|
params: { |
|
'url': 'url', |
|
'text': 'text' |
|
} |
|
}; |
|
|
|
const ShareController = Controller.extend({ |
|
TYPE_FACEBOOK: 'facebook', |
|
TYPE_TWITTER: 'twitter', |
|
TYPE_WHATSAPP: 'whatsapp', |
|
|
|
filter (type, data) { |
|
var result = {}; |
|
|
|
var params = settings[type].params; |
|
|
|
for (let name in data) { |
|
if (!data.hasOwnProperty(name)) continue; |
|
if (!params.hasOwnProperty(name)) continue; |
|
if (!data[name]) continue; |
|
|
|
result[params[name]] = data[name]; |
|
} |
|
|
|
return result; |
|
}, |
|
|
|
open (url, data, props) { |
|
url = url + param(data); |
|
props = param(props).replace(/&/g, ','); |
|
|
|
logger.log(`<$>ShareController</>: Open popup url="<#>${url}</>" properties="<#>${props}</>"`); |
|
|
|
window.open(url, '', props); |
|
}, |
|
|
|
properties (type) { |
|
var width = settings[type].size[0], |
|
height = settings[type].size[1]; |
|
|
|
return { |
|
width, height, |
|
left: (window.screen.width - width) / 2, |
|
top: (window.screen.height - height) / 2.5, |
|
// scrollbars: 'yes', |
|
resizable: 'yes', |
|
status: 'no', |
|
menubar: 'no', |
|
toolbar: 'no' |
|
}; |
|
}, |
|
|
|
share (type, data) { |
|
// data properties: url, title, description, image |
|
var url, props; |
|
|
|
logger.log(`<$>ShareController</>: Social sharing type="<#>${type}</>" data="<#>${JSON.stringify(data)}</>"`); |
|
|
|
url = settings[type].url; |
|
data = this.filter(type, data); |
|
props = this.properties(type); |
|
|
|
this.open(url, data, props); |
|
}, |
|
|
|
getWhatsappUrl () { |
|
return settings.whatsapp.url; |
|
}, |
|
|
|
facebook (data) { |
|
FB.init({ |
|
appId : ProjectController.settings('facebook_app_id'), |
|
xfbml : true, |
|
version : 'v2.6' |
|
}); |
|
|
|
FB.ui({ |
|
method: 'feed', |
|
link: data.url, |
|
name: data.title, |
|
picture: data.image, |
|
description: data.description, |
|
redirect_uri: location.href |
|
}) |
|
}, |
|
twitter (data) { |
|
this.share(this.TYPE_TWITTER, data); |
|
}, |
|
whatsapp (data) { |
|
//this.share(this.TYPE_WHATSAPP, data); |
|
}, |
|
|
|
initialize () { |
|
(function(d, s, id){ |
|
var js, fjs = d.getElementsByTagName(s)[0]; |
|
if (d.getElementById(id)) {return;} |
|
js = d.createElement(s); js.id = id; |
|
js.src = "//connect.facebook.net/en_US/sdk.js"; |
|
fjs.parentNode.insertBefore(js, fjs); |
|
}(document, 'script', 'facebook-jssdk')); |
|
} |
|
}); |