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!"