Skip to content

Instantly share code, notes, and snippets.

@mudge
Created May 28, 2012 20:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mudge/52441298f6f1f0ed4b43 to your computer and use it in GitHub Desktop.
Save mudge/52441298f6f1f0ed4b43 to your computer and use it in GitHub Desktop.
module EmailHelper
def md_for_email(body)
html = md(body)
doc = Nokogiri::HTML(html)
style_images(doc)
style_text(doc)
style_syntax_highlighting(doc)
div = replace_body_with_div(doc)
div.to_s.html_safe
end
private
def replace_body_with_div(doc)
body = doc.at_xpath("//body")
body["style"] = "font-size: 15px"
body.name = "div"
body
end
def style_images(doc)
doc.css("img").each do |img|
img["style"] = "display: block; background-color: #F3F3F3; padding: 5px; box-shadow: inset 0 0 3px 0 #777777; margin: 0 auto"
img["align"] = "middle"
end
end
def style_text(doc)
doc.css("p > code").each do |code|
code["style"] = "background-color: #F3F3F3; color: #333333; padding: 2px 5px; border-radius: 3px; font-size: 0.9em"
end
doc.css("p").each do |paragraph|
paragraph["style"] = "font-family: Helvetica, sans-serif; font-size: 1.1em; line-height: 1.5em; text-align: justify; margin-top: 1em; margin-bottom: 1em"
end
doc.css("h2").each do |h2|
h2["style"] = "font-family: Helvetica, sans-serif; font-weight: normal; margin-top: 0.83em; margin-bottom: 0.83em"
end
doc.css("h3").each do |h3|
h3["style"] = "font-family: Helvetica, sans-serif; font-size: 1.5em; font-weight: normal; border-bottom: #EEEEEE 2px solid; padding-bottom: 5px; margin-top: 1em; margin-bottom: 1em"
end
doc.css("blockquote").each do |blockquote|
blockquote["style"] = "color: #777777; border-left: 4px solid #999999; margin: 0; padding-left: 1em"
end
doc.css("a").each do |a|
a["style"] = "color: #BD0010"
end
doc.css("pre").each do |pre|
pre["style"] = "background: #F3F3F3; padding: 1em; margin: 1em 0; box-shadow: inset 0 0 3px 0 #777777; font-size: 15px"
end
end
def style_syntax_highlighting(doc)
doc.css(".hll").each do |element|
element["style"] = "background-color: #FFFFCC"
end
doc.css(".err").each do |element|
element["style"] = "color: #A61717; background-color: #E3D2D2"
end
doc.css(".c, .cm").each do |element|
element["style"] = "color: #999988; font-style: italic"
end
doc.css(".cp, .cs").each do |element|
element["style"] = "color: #999999; font-weight: bold; font-style: italic"
end
doc.css(".c1").each do |element|
element["style"] = "color: #999988; font-style: italic"
end
doc.css(".gd").each do |element|
element["style"] = "color: #000000; background-color: #FFDDDD"
end
doc.css(".ge").each do |element|
element["style"] = "color: #000000; font-style: italic"
end
doc.css(".gr, .gt").each do |element|
element["style"] = "color: #AA0000"
end
doc.css(".gi").each do |element|
element["style"] = "color: #000000; background-color: #DDFFDD"
end
doc.css(".go").each do |element|
element["style"] = "color: #888888"
end
doc.css(".gp, .nn").each do |element|
element["style"] = "color: #555555"
end
doc.css(".gs").each do |element|
element["style"] = "font-weight: bold"
end
doc.css(".gu").each do |element|
element["style"] = "color: #AAAAAA"
end
doc.css(".kc, .kd, .kn, .kp, .kr, .ow, .k, .o").each do |element|
element["style"] = "color: #000000; font-weight: bold"
end
doc.css(".kt, .nc").each do |element|
element["style"] = "color: #445588; font-weight: bold"
end
doc.css(".nb").each do |element|
element["style"] = "color: #0086B3"
end
doc.css(".na, .no, .nv, .vc, .vg, .vi").each do |element|
element["style"] = "color: #008080"
end
doc.css(".nd").each do |element|
element["style"] = "color: #3C5D5D; font-weight: bold"
end
doc.css(".ni").each do |element|
element["style"] = "color: #800080"
end
doc.css(".ne, .nf, .nl").each do |element|
element["style"] = "color: #990000; font-weight: bold"
end
doc.css(".nt").each do |element|
element["style"] = "color: #000080"
end
doc.css(".w").each do |element|
element["style"] = "color: #BBBBBB"
end
doc.css(".mf, .mh, .mi, .mo, .il, .m").each do |element|
element["style"] = "color: #009999"
end
doc.css(".s, .sb, .sc, .sd, .s1, .s2, .se, .sh, .si, .sx").each do |element|
element["style"] = "color: #D01040"
end
doc.css(".sr").each do |element|
element["style"] = "color: #009926"
end
doc.css(".ss").each do |element|
element["style"] = "color: #990073"
end
doc.css(".bp, .gh").each do |element|
element["style"] = "color: #999999"
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment