From 48d5cb02c23ed090845a315fb07a1f4186150733 Mon Sep 17 00:00:00 2001 From: Neil Lalonde <neillalonde@gmail.com> Date: Fri, 12 Apr 2013 18:06:36 -0400 Subject: [PATCH] Add email as a sharing option --- .../javascripts/discourse/models/share_link.js | 15 +++++++++++++-- .../discourse/templates/share_link.js.handlebars | 6 +++++- app/models/site_setting.rb | 2 +- config/locales/client.en.yml | 1 + 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/discourse/models/share_link.js b/app/assets/javascripts/discourse/models/share_link.js index 42970a6ce..3f5ca26e3 100644 --- a/app/assets/javascripts/discourse/models/share_link.js +++ b/app/assets/javascripts/discourse/models/share_link.js @@ -19,13 +19,17 @@ Discourse.ShareLink = Discourse.Model.extend({ 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+'], + supportedTargets: ['twitter', 'facebook', 'google+', 'email'], urlFor: function(target,link,title) { switch(target) { @@ -35,6 +39,8 @@ Discourse.ShareLink.reopenClass({ return this.facebookUrl(link,title); case 'google+': return this.googlePlusUrl(link); + case 'email': + return this.emailUrl(link,title); } }, @@ -50,10 +56,15 @@ Discourse.ShareLink.reopenClass({ 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' + 'google+': 'icon-google-plus', + email: 'icon-envelope-alt' }, popupHeights: { diff --git a/app/assets/javascripts/discourse/templates/share_link.js.handlebars b/app/assets/javascripts/discourse/templates/share_link.js.handlebars index 423d1d08c..50676a2bc 100644 --- a/app/assets/javascripts/discourse/templates/share_link.js.handlebars +++ b/app/assets/javascripts/discourse/templates/share_link.js.handlebars @@ -1 +1,5 @@ -<a href="#" {{action sharePopup target href}} {{bindAttr title="title"}}><i {{bindAttr class=":icon iconClass"}}></i></a> \ No newline at end of file +{{#if openInPopup}} + <a href="#" {{action sharePopup target href}} {{bindAttr title="title"}}><i {{bindAttr class=":icon iconClass"}}></i></a> +{{else}} + <a {{bindAttr href="href"}} {{bindAttr title="title"}} target="_blank"><i {{bindAttr class=":icon iconClass"}}></i></a> +{{/if}} \ No newline at end of file diff --git a/app/models/site_setting.rb b/app/models/site_setting.rb index 2e942b613..d57453711 100755 --- a/app/models/site_setting.rb +++ b/app/models/site_setting.rb @@ -19,7 +19,7 @@ class SiteSetting < ActiveRecord::Base client_setting(:traditional_markdown_linebreaks, false) client_setting(:top_menu, 'latest|hot|new|unread|favorited|categories') client_setting(:post_menu, 'like|edit|flag|delete|share|bookmark|reply') - client_setting(:share_links, 'twitter|facebook|google+') + client_setting(:share_links, 'twitter|facebook|google+|email') client_setting(:track_external_right_clicks, false) client_setting(:must_approve_users, false) client_setting(:ga_tracking_code, "") diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 726015538..600b8e5f8 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -11,6 +11,7 @@ en: twitter: 'share this link on Twitter' facebook: 'share this link on Facebook' google+: 'share this link on Google+' + email: 'send this link in an email' edit: 'edit the title and category of this topic' not_implemented: "That feature hasn't been implemented yet, sorry!"