From a92b28b4bf0f5653c2c6a79b0e88d525025a44db Mon Sep 17 00:00:00 2001
From: MrZYX <pr0fkill@gmail.com>
Date: Tue, 3 May 2011 17:42:02 +0200
Subject: [PATCH] general search and replace in markdownify (#1042)

---
 app/helpers/application_helper.rb       | 30 ++++++++++++++++++-------
 spec/helpers/application_helper_spec.rb | 12 +++++++++-
 2 files changed, 33 insertions(+), 9 deletions(-)

diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index a599438a14..be469ff323 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -169,21 +169,17 @@ module ApplicationHelper
   def markdownify(message, options = {})
     message = h(message).html_safe
 
-    if !options.has_key?(:newlines)
-      options[:newlines] = true
-    end
+    options[:newlines] = true if !options.has_key?(:newlines)
+    options[:emoticons] = true if !options.has_key?(:emoticons)
 
     message = process_links(message)
     message = process_autolinks(message)
     message = process_emphasis(message)
     message = process_youtube(message, options[:youtube_maps])
     message = process_vimeo(message, options[:vimeo_maps])
+    message = process_emoticons(message) if options[:emoticons]
 
-    message.gsub!(/&lt;3/, "&hearts;")
-
-    if options[:newlines]
-      message.gsub!(/\n+/, '<br />')
-    end
+    message.gsub!(/\n+/, '<br />') if options[:newlines]
 
     return message
   end
@@ -279,6 +275,24 @@ module ApplicationHelper
     return processed_message
   end
 
+  def process_emoticons(message)
+    map = {
+      "&lt;3" => "&hearts;",
+      ":("    => "&#9785;",
+      ":-("   => "&#9785;",
+      ":)"    => "&#9786;",
+      ":-)"   => "&#9786;",
+      "-&gt;" => "&rarr;",
+      "&lt;-" => "&larr;",
+      "..."   => "&hellip;"
+    }
+    
+    map.each do |search, replace|
+      message.gsub!(search, replace)
+    end
+    message
+  end
+
   def info_text(text)
     image_tag 'icons/monotone_question.png', :class => 'what_is_this', :title => text
   end
diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb
index 6660ace48d..d86e64e004 100644
--- a/spec/helpers/application_helper_spec.rb
+++ b/spec/helpers/application_helper_spec.rb
@@ -161,11 +161,21 @@ describe ApplicationHelper do
       end
     end
 
-    describe "hearts" do
+    describe "emoticons" do
       it "replaces &lt;3 with &hearts;" do
         message = "i <3 you"
         markdownify(message).should == "i &hearts; you"
       end
+      
+      it "replaces various things with (their) HTML entities" do
+        message = ":) :-) :( :-( ... -> <-"
+        markdownify(message).should == "&#9786; &#9786; &#9785; &#9785; &hellip; &rarr; &larr;"
+      end
+      
+      it "skips doing it if you say so" do
+        message = ":) :-) :( :-( ... -> <-"
+        markdownify(message, :emoticons => false).should == ":) :-) :( :-( ... -&gt; &lt;-"
+      end
     end
 
     describe "weak emphasis" do
-- 
GitLab