Instantly share code, notes, and snippets.
Created
July 5, 2016 10:32
-
Save z4o4z/107c40f83b78047ef041755287ae6ce0 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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