This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/models/share_link.js
riking 996e5cf021 Make Discourse.ShareLink easy for plugins
For example, this javascript code, if added by a plugin, would enable a Tumblr share link:

Discourse.ShareLink.addTarget('tumblr', {
  iconClass: 'fa-tumblr',
  generateUrl: function(link, title) {
    return ("http://www.tumblr.com/share/link?url=" + encodeURIComponent(link) + "&description=" + encodeURIComponent(title));
  },
  shouldOpenInPopup: true
});
2014-03-13 23:38:57 -07:00

85 lines
2.4 KiB
JavaScript

/**
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: Discourse.computed.i18n('target', 'share.%@'),
iconClass: function() {
return Discourse.ShareLink.iconClasses[this.get('target')];
}.property('target'),
openInPopup: function() {
return( Discourse.ShareLink.shouldOpenInPopup[this.get('target')] );
}.property('target')
});
Discourse.ShareLink.reopenClass({
supportedTargets: [],
urlFor: {},
iconClasses: {},
popupHeights: {},
shouldOpenInPopup: {},
addTarget: function(id, object) {
var self = this;
self.supportedTargets.push(id);
self.urlFor[id] = object.generateUrl;
self.iconClasses[id] = object.iconClass;
self.popupHeights[id] = object.popupHeight || 315;
self.shouldOpenInPopup[id] = object.shouldOpenInPopup;
},
popupHeight: function(target) {
return (this.popupHeights[target] || 315);
}
});
(function() {
Discourse.ShareLink.addTarget('twitter', {
iconClass: 'fa-twitter',
generateUrl: function(link, title) {
return ("http://twitter.com/intent/tweet?url=" + encodeURIComponent(link) + "&text=" + encodeURIComponent(title) );
},
shouldOpenInPopup: true,
popupHeight: 265
});
Discourse.ShareLink.addTarget('facebook', {
iconClass: 'fa-facebook-square',
generateUrl: function(link, title) {
return ("http://www.facebook.com/sharer.php?u=" + encodeURIComponent(link) + '&t=' + encodeURIComponent(title));
},
shouldOpenInPopup: true,
popupHeight: 315
});
Discourse.ShareLink.addTarget('google+', {
iconClass: 'fa-google-plus',
generateUrl: function(link) {
return ("https://plus.google.com/share?url=" + encodeURIComponent(link));
},
shouldOpenInPopup: true,
popupHeight: 600
});
Discourse.ShareLink.addTarget('email', {
iconClass: 'fa-envelope',
generateUrl: function(link, title) {
return ("mailto:?to=&subject=" + encodeURIComponent('[' + Discourse.SiteSettings.title + '] ' + title) + "&body=" + encodeURIComponent(link));
},
shouldOpenInPopup: false
});
})();