/** A data model representing a link to share a post on a 3rd party site, like Twitter, Facebook, and Google+. @class ShareLink @extends Discourse.Model @namespace Discourse @module Discourse **/ Discourse.ShareLink = Discourse.Model.extend({ href: function() { return Discourse.ShareLink.urlFor(this.get('target'), this.get('link'), this.get('topicTitle')); }.property('target', 'link', 'topicTitle'), title: function() { return I18n.t("share." + this.get('target')); }.property('target'), iconClass: function() { return Discourse.ShareLink.iconClasses[this.get('target')]; }.property('target'), openInPopup: function() { return( this.get('target') !== 'email' ); }.property('target') }); Discourse.ShareLink.reopenClass({ supportedTargets: ['twitter', 'facebook', 'google+', 'email'], urlFor: function(target,link,title) { switch(target) { case 'twitter': return this.twitterUrl(link,title); case 'facebook': return this.facebookUrl(link,title); case 'google+': return this.googlePlusUrl(link); case 'email': return this.emailUrl(link,title); } }, twitterUrl: function(link, title) { return ("http://twitter.com/intent/tweet?url=" + encodeURIComponent(link) + "&text=" + encodeURIComponent(title) ); }, facebookUrl: function(link, title) { return ("http://www.facebook.com/sharer.php?u=" + encodeURIComponent(link) + '&t=' + encodeURIComponent(title)); }, googlePlusUrl: function(link) { return ("https://plus.google.com/share?url=" + encodeURIComponent(link)); }, emailUrl: function(link, title) { return ("mailto:?to=&subject=" + encodeURIComponent('[' + Discourse.SiteSettings.title + '] ' + title) + "&body=" + encodeURIComponent(link)); }, iconClasses: { twitter: 'icon-twitter', facebook: 'icon-facebook-sign', 'google+': 'icon-google-plus', email: 'icon-envelope' }, popupHeights: { twitter: 265, facebook: 315, 'google+': 600 }, popupHeight: function(target) { return (this.popupHeights[target] || 315); } });