用户输入中的自定义降价
Posted
技术标签:
【中文标题】用户输入中的自定义降价【英文标题】:custom markdown in user input 【发布时间】:2013-02-06 23:56:33 【问题描述】:我想为用户 cmets 添加一个简单的降价。
当用户提交此评论时:
我刚拿到[卡片:黑莲花]的人。战俘!
我希望它是这样显示的:
我刚拿到黑莲花人。战俘!
但带有额外的 html 标记:
I just got <span class="preview" data-card="/cards/card.id">Black Lotus</span> man. POW!
1) 我查看了Redcarpet,但不知道如何添加[card:...]
markdown。
2) 还是我应该在将内容保存到数据库之前运行正则表达式并替换内容,然后在显示评论之前使用sanitize(ActionView::Helpers::SanitizeHelper)
span
标签?
【问题讨论】:
【参考方案1】:回答我自己的问题:
定义自定义渲染器并覆盖 normal_text 方法就可以了。
class HTMLwithCards < Redcarpet::Render::HTML
def preprocess(full_document)
full_document.gsub(/\[card:(.*)\]/) do
card = Card.find_by_name($1)
if card
"<span class='preview' data-card='/cards/#card.id'>#$1</span>"
else
$1
end
end
end
end
然后你可以这样称呼它:
def markdown(text)
renderer = HTMLwithCards.new(hard_wrap: true, filter_html: true)
Redcarpet::Markdown.new(renderer).render(text).html_safe
end
【讨论】:
AFAIK 你需要使用preprocess
而不是normal_text
,所以我正在编辑这个。如果您知道我遗漏了什么,请更正我的更正。
@iconoclast 不会以这种方式使用preprocess
要求您关闭filter_html
?我认为使用normal_text
或postprocess
的解决方案将是这里的方法,这取决于你是否关心你的语法是否会弄乱代码块以上是关于用户输入中的自定义降价的主要内容,如果未能解决你的问题,请参考以下文章
用于登录输入的自定义 uitableviewcell - 用户名和密码
如何从 Alexa Skill 中的用户随机输入中提取自定义插槽