Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
a756fd1f
G
gitlab-foss
项目概览
李少辉-开发者
/
gitlab-foss
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-foss
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a756fd1f
编写于
10月 13, 2014
作者:
D
Dmitriy Zaporozhets
提交者:
Jan-Willem van der Meer
10月 13, 2014
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #8020 from mr-vinn/note-trunc-link
Improve event note display in dashboard and project activity views
上级
fe14384e
b3c70d00
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
110 addition
and
9 deletion
+110
-9
app/helpers/events_helper.rb
app/helpers/events_helper.rb
+2
-3
app/helpers/gitlab_markdown_helper.rb
app/helpers/gitlab_markdown_helper.rb
+56
-6
spec/helpers/events_helper_spec.rb
spec/helpers/events_helper_spec.rb
+52
-0
未找到文件。
app/helpers/events_helper.rb
浏览文件 @
a756fd1f
...
...
@@ -136,9 +136,8 @@ module EventsHelper
end
def
event_note
(
text
)
text
=
first_line_in_markdown
(
text
)
text
=
truncate
(
text
,
length:
150
)
sanitize
(
markdown
(
text
),
tags:
%w(a img b pre p)
)
text
=
first_line_in_markdown
(
text
,
150
)
sanitize
(
text
,
tags:
%w(a img b pre code p)
)
end
def
event_commit_title
(
message
)
...
...
app/helpers/gitlab_markdown_helper.rb
浏览文件 @
a756fd1f
...
...
@@ -51,12 +51,14 @@ module GitlabMarkdownHelper
@markdown
.
render
(
text
).
html_safe
end
def
first_line_in_markdown
(
text
)
line
=
text
.
split
(
"
\n
"
).
detect
do
|
i
|
i
.
present?
&&
markdown
(
i
).
present?
end
line
+=
'...'
unless
line
.
nil?
line
# Return the first line of +text+, up to +max_chars+, after parsing the line
# as Markdown. HTML tags in the parsed output are not counted toward the
# +max_chars+ limit. If the length limit falls within a tag's contents, then
# the tag contents are truncated without removing the closing tag.
def
first_line_in_markdown
(
text
,
max_chars
=
nil
)
md
=
markdown
(
text
).
strip
truncate_visible
(
md
,
max_chars
||
md
.
length
)
if
md
.
present?
end
def
render_wiki_content
(
wiki_page
)
...
...
@@ -204,4 +206,52 @@ module GitlabMarkdownHelper
def
correct_ref
@ref
?
@ref
:
"master"
end
private
# Return +text+, truncated to +max_chars+ characters, excluding any HTML
# tags.
def
truncate_visible
(
text
,
max_chars
)
doc
=
Nokogiri
::
HTML
.
fragment
(
text
)
content_length
=
0
truncated
=
false
doc
.
traverse
do
|
node
|
if
node
.
text?
||
node
.
content
.
empty?
if
truncated
node
.
remove
next
end
# Handle line breaks within a node
if
node
.
content
.
strip
.
lines
.
length
>
1
node
.
content
=
"
#{
node
.
content
.
lines
.
first
.
chomp
}
..."
truncated
=
true
end
num_remaining
=
max_chars
-
content_length
if
node
.
content
.
length
>
num_remaining
node
.
content
=
node
.
content
.
truncate
(
num_remaining
)
truncated
=
true
end
content_length
+=
node
.
content
.
length
end
truncated
=
truncate_if_block
(
node
,
truncated
)
end
doc
.
to_html
end
# Used by #truncate_visible. If +node+ is the first block element, and the
# text hasn't already been truncated, then append "..." to the node contents
# and return true. Otherwise return false.
def
truncate_if_block
(
node
,
truncated
)
if
node
.
element?
&&
node
.
description
.
block?
&&
!
truncated
node
.
content
=
"
#{
node
.
content
}
..."
if
node
.
next_sibling
true
else
truncated
end
end
end
spec/helpers/events_helper_spec.rb
0 → 100644
浏览文件 @
a756fd1f
require
'spec_helper'
describe
EventsHelper
do
include
ApplicationHelper
include
GitlabMarkdownHelper
it
'should display one line of plain text without alteration'
do
input
=
'A short, plain note'
expect
(
event_note
(
input
)).
to
match
(
input
)
expect
(
event_note
(
input
)).
not_to
match
(
/\.\.\.\z/
)
end
it
'should display inline code'
do
input
=
'A note with `inline code`'
expected
=
'A note with <code>inline code</code>'
expect
(
event_note
(
input
)).
to
match
(
expected
)
end
it
'should truncate a note with multiple paragraphs'
do
input
=
"Paragraph 1
\n\n
Paragraph 2"
expected
=
'Paragraph 1...'
expect
(
event_note
(
input
)).
to
match
(
expected
)
end
it
'should display the first line of a code block'
do
input
=
"```
\n
Code block
\n
with two lines
\n
```"
expected
=
'<pre><code class="">Code block...</code></pre>'
expect
(
event_note
(
input
)).
to
match
(
expected
)
end
it
'should truncate a single long line of text'
do
text
=
'The quick brown fox jumped over the lazy dog twice'
# 50 chars
input
=
"
#{
text
}#{
text
}#{
text
}#{
text
}
"
# 200 chars
expected
=
"
#{
text
}#{
text
}
"
.
sub
(
/.{3}/
,
'...'
)
expect
(
event_note
(
input
)).
to
match
(
expected
)
end
it
'should preserve a link href when link text is truncated'
do
text
=
'The quick brown fox jumped over the lazy dog'
# 44 chars
input
=
"
#{
text
}#{
text
}#{
text
}
"
# 133 chars
link_url
=
'http://example.com/foo/bar/baz'
# 30 chars
input
<<
link_url
expected_link_text
=
'http://example...</a>'
expect
(
event_note
(
input
)).
to
match
(
link_url
)
expect
(
event_note
(
input
)).
to
match
(
expected_link_text
)
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录