Skip to content

Instantly share code, notes, and snippets.

@z4o4z
Created July 5, 2016 10:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save z4o4z/107c40f83b78047ef041755287ae6ce0 to your computer and use it in GitHub Desktop.
Save z4o4z/107c40f83b78047ef041755287ae6ce0 to your computer and use it in GitHub Desktop.
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'));
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment