Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
27953bc2
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
27953bc2
编写于
6月 19, 2014
作者:
R
Rafael Mendonça França
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #15820 from lucasmazza/lm-except-highlight-tweaks
highlight/except support for regular expressions and blocks.
上级
9ac81b95
9f27e107
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
50 addition
and
7 deletion
+50
-7
actionview/CHANGELOG.md
actionview/CHANGELOG.md
+9
-0
actionview/lib/action_view/helpers/text_helper.rb
actionview/lib/action_view/helpers/text_helper.rb
+24
-7
actionview/test/template/text_helper_test.rb
actionview/test/template/text_helper_test.rb
+17
-0
未找到文件。
actionview/CHANGELOG.md
浏览文件 @
27953bc2
*
The
`highlight`
helper now accepts a block to be used instead of the
`highlighter`
option.
*Lucas Mazza*
*
The
`except`
and
`highlight`
helpers now accept regular expressions.
*Jan Szumiec*
*
Flatten the array parameter in
`safe_join`
, so it behaves consistently with
`Array#join`
.
...
...
actionview/lib/action_view/helpers/text_helper.rb
浏览文件 @
27953bc2
...
...
@@ -103,11 +103,14 @@ def truncate(text, options = {}, &block)
# Highlights one or more +phrases+ everywhere in +text+ by inserting it into
# a <tt>:highlighter</tt> string. The highlighter can be specialized by passing <tt>:highlighter</tt>
# as a single-quoted string with <tt>\1</tt> where the phrase is to be inserted (defaults to
# '<mark>\1</mark>')
# '<mark>\1</mark>')
or passing a block that receives each matched term.
#
# highlight('You searched for: rails', 'rails')
# # => You searched for: <mark>rails</mark>
#
# highlight('You searched for: rails', /for|rails/)
# # => You searched <mark>for</mark>: <mark>rails</mark>
#
# highlight('You searched for: ruby, rails, dhh', 'actionpack')
# # => You searched for: ruby, rails, dhh
#
...
...
@@ -116,15 +119,25 @@ def truncate(text, options = {}, &block)
#
# highlight('You searched for: rails', 'rails', highlighter: '<a href="search?q=\1">\1</a>')
# # => You searched for: <a href="search?q=rails">rails</a>
#
# highlight('You searched for: rails', 'rails') { |match| link_to(search_path(q: match, match)) }
# # => You searched for: <a href="search?q=rails">rails</a>
def
highlight
(
text
,
phrases
,
options
=
{})
text
=
sanitize
(
text
)
if
options
.
fetch
(
:sanitize
,
true
)
if
text
.
blank?
||
phrases
.
blank?
text
else
highlighter
=
options
.
fetch
(
:highlighter
,
'<mark>\1</mark>'
)
match
=
Array
(
phrases
).
map
{
|
p
|
Regexp
.
escape
(
p
)
}.
join
(
'|'
)
text
.
gsub
(
/(
#{
match
}
)(?![^<]*?>)/i
,
highlighter
)
match
=
Array
(
phrases
).
map
do
|
p
|
Regexp
===
p
?
p
.
to_s
:
Regexp
.
escape
(
p
)
end
.
join
(
'|'
)
if
block_given?
text
.
gsub
(
/(
#{
match
}
)(?![^<]*?>)/i
)
{
|
found
|
yield
found
}
else
highlighter
=
options
.
fetch
(
:highlighter
,
'<mark>\1</mark>'
)
text
.
gsub
(
/(
#{
match
}
)(?![^<]*?>)/i
,
highlighter
)
end
end
.
html_safe
end
...
...
@@ -155,9 +168,13 @@ def highlight(text, phrases, options = {})
def
excerpt
(
text
,
phrase
,
options
=
{})
return
unless
text
&&
phrase
separator
=
options
[
:separator
]
||
''
phrase
=
Regexp
.
escape
(
phrase
)
regex
=
/
#{
phrase
}
/i
separator
=
options
.
fetch
(
:separator
,
nil
)
||
""
case
phrase
when
Regexp
regex
=
phrase
else
regex
=
/
#{
Regexp
.
escape
(
phrase
)
}
/i
end
return
unless
matches
=
text
.
match
(
regex
)
phrase
=
matches
[
0
]
...
...
actionview/test/template/text_helper_test.rb
浏览文件 @
27953bc2
...
...
@@ -222,6 +222,11 @@ def test_highlight_with_regexp
)
end
def
test_highlight_accepts_regexp
assert_equal
(
"This day was challenging for judge <mark>Allen</mark> and his colleagues."
,
highlight
(
"This day was challenging for judge Allen and his colleagues."
,
/\ballen\b/i
))
end
def
test_highlight_with_multiple_phrases_in_one_pass
assert_equal
%(<em>wow</em> <em>em</em>)
,
highlight
(
'wow em'
,
%w(wow em)
,
:highlighter
=>
'<em>\1</em>'
)
end
...
...
@@ -260,6 +265,13 @@ def test_highlight_does_not_modify_the_options_hash
assert_equal
options
,
passed_options
end
def
test_highlight_with_block
assert_equal
(
"<b>one</b> <b>two</b> <b>three</b>"
,
highlight
(
"one two three"
,
[
"one"
,
"two"
,
"three"
])
{
|
word
|
"<b>
#{
word
}
</b>"
}
)
end
def
test_excerpt
assert_equal
(
"...is a beautiful morn..."
,
excerpt
(
"This is a beautiful morning"
,
"beautiful"
,
:radius
=>
5
))
assert_equal
(
"This is a..."
,
excerpt
(
"This is a beautiful morning"
,
"this"
,
:radius
=>
5
))
...
...
@@ -267,6 +279,11 @@ def test_excerpt
assert_nil
excerpt
(
"This is a beautiful morning"
,
"day"
)
end
def
test_excerpt_with_regex
assert_equal
(
"...udge Allen and..."
,
excerpt
(
"This day was challenging for judge Allen and his colleagues."
,
/\ballen\b/i
,
:radius
=>
5
))
assert_equal
(
"...judge Allen and..."
,
excerpt
(
"This day was challenging for judge Allen and his colleagues."
,
/\ballen\b/i
,
:radius
=>
1
,
:separator
=>
' '
))
end
def
test_excerpt_should_not_be_html_safe
assert
!
excerpt
(
'This is a beautiful! morning'
,
'beautiful'
,
:radius
=>
5
).
html_safe?
end
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录