web-social-share
Version:
A Web Component to share urls and text on social networks
118 lines (117 loc) • 4.88 kB
JavaScript
import { shareEncodedUrl } from './utils';
/**
* Source: https://github.com/720kb/angular-socialshare/blob/master/dist/angular-socialshare.js
*/
export const shareFacebook = async (attrs) => {
let urlString;
if (attrs.socialShareType && attrs.socialShareType === 'feed') {
// if user specifies that they want to use the Facebook feed dialog
//(https://developers.facebook.com/docs/sharing/reference/feed-dialog/v2.4)
urlString = 'https://www.facebook.com/dialog/feed?';
if (attrs.socialShareVia) {
urlString += '&app_id=' + encodeURIComponent(attrs.socialShareVia);
}
if (attrs.socialShareRedirectUri) {
urlString += '&redirect_uri=' + encodeURIComponent(attrs.socialShareRedirectUri);
}
if (attrs.socialShareUrl) {
urlString += '&link=' + shareEncodedUrl(attrs.socialShareUrl);
}
if (attrs.socialShareTo) {
urlString += '&to=' + encodeURIComponent(attrs.socialShareTo);
}
if (attrs.socialShareDisplay) {
urlString += '&display=' + encodeURIComponent(attrs.socialShareDisplay);
}
if (attrs.socialShareRef) {
urlString += '&ref=' + encodeURIComponent(attrs.socialShareRef);
}
if (attrs.socialShareFrom) {
urlString += '&from=' + encodeURIComponent(attrs.socialShareFrom);
}
if (attrs.socialShareSource) {
urlString += '&source=' + encodeURIComponent(attrs.socialShareSource);
}
window.open(urlString, 'Facebook', 'toolbar=0,status=0,resizable=yes,width=' +
attrs.socialSharePopupWidth +
',height=' +
attrs.socialSharePopupHeight +
',top=' +
(window.innerHeight - attrs.socialSharePopupHeight) / 2 +
',left=' +
(window.innerWidth - attrs.socialSharePopupWidth) / 2);
}
else if (attrs.socialShareType && attrs.socialShareType === 'share') {
// if user specifies that they want to use the Facebook share dialog
//(https://developers.facebook.com/docs/sharing/reference/share-dialog)
urlString = 'https://www.facebook.com/dialog/share?';
if (attrs.socialShareVia) {
urlString += '&app_id=' + encodeURIComponent(attrs.socialShareVia);
}
if (attrs.socialShareRedirectUri) {
urlString += '&redirect_uri=' + encodeURIComponent(attrs.socialShareRedirectUri);
}
if (attrs.socialShareUrl) {
urlString += '&href=' + shareEncodedUrl(attrs.socialShareUrl);
}
if (attrs.socialShareQuote) {
urlString += '"e=' + encodeURIComponent(attrs.socialShareQuote);
}
if (attrs.socialShareDisplay) {
urlString += '&display=' + encodeURIComponent(attrs.socialShareDisplay);
}
if (attrs.socialShareMobileiframe) {
urlString += '&mobile_iframe=' + encodeURIComponent(attrs.socialShareMobileiframe);
}
if (attrs.socialShareHashtags) {
urlString += '&hashtag=' + encodeURIComponent(attrs.socialShareHashtags);
}
window.open(urlString, 'Facebook', 'toolbar=0,status=0,resizable=yes,width=' +
attrs.socialSharePopupWidth +
',height=' +
attrs.socialSharePopupHeight +
',top=' +
(window.innerHeight - attrs.socialSharePopupHeight) / 2 +
',left=' +
(window.innerWidth - attrs.socialSharePopupWidth) / 2);
}
else if (attrs.socialShareType && attrs.socialShareType === 'send') {
// if user specifies that they want to use the Facebook send dialog
//(https://developers.facebook.com/docs/sharing/reference/send-dialog)
urlString = 'https://www.facebook.com/dialog/send?';
if (attrs.socialShareVia) {
urlString += '&app_id=' + encodeURIComponent(attrs.socialShareVia);
}
if (attrs.socialShareRedirectUri) {
urlString += '&redirect_uri=' + encodeURIComponent(attrs.socialShareRedirectUri);
}
if (attrs.socialShareUrl) {
urlString += '&link=' + shareEncodedUrl(attrs.socialShareUrl);
}
if (attrs.socialShareTo) {
urlString += '&to=' + encodeURIComponent(attrs.socialShareTo);
}
if (attrs.socialShareDisplay) {
urlString += '&display=' + encodeURIComponent(attrs.socialShareDisplay);
}
window.open(urlString, 'Facebook', 'toolbar=0,status=0,resizable=yes,width=' +
attrs.socialSharePopupWidth +
',height=' +
attrs.socialSharePopupHeight +
',top=' +
(window.innerHeight - attrs.socialSharePopupHeight) / 2 +
',left=' +
(window.innerWidth - attrs.socialSharePopupWidth) / 2);
}
else {
//otherwise default to using sharer.php
window.open('https://www.facebook.com/sharer/sharer.php?u=' + shareEncodedUrl(attrs.socialShareUrl), 'Facebook', 'toolbar=0,status=0,resizable=yes,width=' +
attrs.socialSharePopupWidth +
',height=' +
attrs.socialSharePopupHeight +
',top=' +
(window.innerHeight - attrs.socialSharePopupHeight) / 2 +
',left=' +
(window.innerWidth - attrs.socialSharePopupWidth) / 2);
}
};