I've built social sharing buttons a few times and decided it was time to extract it to a package! The goal of this package is to do a few things:
- Render appropriate meta tags for Facebook/OG and Twitter (via spiderable)
- Support social sharing buttons with bootstrap-3 (default) and font-awesome
- Expand to support other social platforms besides just twitter & facebook, in a configurable way
See also our project home (WIP).
meteor add joshowens:shareit
Simply put {{>shareit}} in your template. We use the following keys in your
current data context (more on this below):
titleauthor- expects a string or a function (see below). The function is used only for twitter. If an object is returned, andauthor.profile.twitterexists, this value will be used instead.excerptordescriptionorsummaryin FB and Twitter
and optionally:
url- defaults to current page URLsitenap- defaults to current page hostnamethumbnail-imagein FB and Twitter. Expects a function (see below).
Notes:
-
Facebook:
-
The
og:typeisarticle. -
Images should at least 1200x630; if above 600x315 you'll get a big photo share, and below, a small photo, see this.
-
Twitter
-
The
twitter:cardtype issummary. -
Image, min of 120x120 & < 1MB, see this. For "large image summaries" (in our roadmap, below), at least 280x150 & < 1 MB, see this.
-
Google+ tags are not added yet, but when you share on Google+, it's smart enough to get everything it needs from the other tags.
-
Social media image dimensions 2014: the complete guide for Facebook, Twitter and Google +
{{> shareit}} will work anywhere in a template where {{title}}, {{excerpt}},
etc would work. The source of the data context would be the data() function
for a route in iron:router, or from a surrounding {{#with}} tag. (You can
use {{#each}} too, but only the last rendered block will be used to set the
page meta tags:
Just like any Meteor template/component, you can override the data context
for a single component by specifying a single non-key argument. e.g.
{{> shareit shareData}} will get title from {{shareData.title}}, etc.
shareData can itself be a key in the current data context, or a helper
function of the current template, e.g.:
Template.article.helpers({
shareData: function() {
return { title: ..., etc } || MyCol.findOne() || etc
}
});For keys that take functions (author, image), the value of this function will be used. We use these functions to do lookups. If the function is setup anonymously inside a helper, this is the current data context. e.g.
Template.article.helpers({
shareData: function() {
return {
title: this.data,
author: Meteor.users.findOne(this.authorId)
}
});Somewhere in your client (not server) code you can configure ShareIt. This is completely optional and the defaults are listed below:
ShareIt.configure({
sites: { // nested object for extra configurations
'facebook': {
'appId': null // use sharer.php when it's null, otherwise use share dialog
},
'twitter': {},
'googleplus': {},
'pinterest': {}
},
classes: "large btn", // string (default: 'large btn')
// The classes that will be placed on the sharing buttons, bootstrap by default.
iconOnly: false, // boolean (default: false)
// Don't put text on the sharing buttons
applyColors: true, // boolean (default: true)
// apply classes to inherit each social networks background color
faSize: '', // font awesome size
faClass: '' // font awesome classes like square
});If you have valid facebook app id, we recommend you configure it to use Facebook Share Dialog. If no app id is provided, it would use deprecated sharer.php. Example facebook configuration:
ShareIt.configure({
sites: {
'facebook': {
'appId': YOUR_APP_ID
}
}
});- Support text OR functions for
thumbnail - Rename
thumbnailto image with backwards compatilility (FB suggestion of 1200x630 is not a thumbnail :)) - Twitter: use summary for
thumbnail, and summary_large_image forimage - Google+ tags (snippets)