Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
6b4c6fa1
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,体验更适合开发者的 AI 搜索 >>
提交
6b4c6fa1
编写于
9月 30, 2016
作者:
P
panjan
提交者:
Sean McGivern
11月 01, 2016
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix Markdown styling inside reference links
Fixes:
https://gitlab.com/gitlab-org/gitlab-ce/issues/18096
上级
266fcfb1
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
174 addition
and
75 deletion
+174
-75
CHANGELOG.md
CHANGELOG.md
+1
-0
lib/banzai/filter/abstract_reference_filter.rb
lib/banzai/filter/abstract_reference_filter.rb
+10
-10
lib/banzai/filter/external_issue_reference_filter.rb
lib/banzai/filter/external_issue_reference_filter.rb
+6
-5
lib/banzai/filter/reference_filter.rb
lib/banzai/filter/reference_filter.rb
+3
-3
lib/banzai/filter/user_reference_filter.rb
lib/banzai/filter/user_reference_filter.rb
+21
-20
lib/banzai/redactor.rb
lib/banzai/redactor.rb
+4
-4
spec/lib/banzai/filter/external_issue_reference_filter_spec.rb
...lib/banzai/filter/external_issue_reference_filter_spec.rb
+2
-0
spec/lib/banzai/filter/issue_reference_filter_spec.rb
spec/lib/banzai/filter/issue_reference_filter_spec.rb
+32
-6
spec/lib/banzai/filter/user_reference_filter_spec.rb
spec/lib/banzai/filter/user_reference_filter_spec.rb
+6
-0
spec/lib/banzai/pipeline/full_pipeline_spec.rb
spec/lib/banzai/pipeline/full_pipeline_spec.rb
+28
-0
spec/lib/banzai/redactor_spec.rb
spec/lib/banzai/redactor_spec.rb
+48
-27
spec/support/banzai/reference_filter_shared_examples.rb
spec/support/banzai/reference_filter_shared_examples.rb
+13
-0
未找到文件。
CHANGELOG.md
浏览文件 @
6b4c6fa1
...
...
@@ -7,6 +7,7 @@ Please view this file on the master branch, on stable branches it's out of date.
-
Trim leading and trailing whitespace on project_path (Linus Thiel)
-
Prevent award emoji via notes for issues/MRs authored by user (barthc)
-
Adds an optional path parameter to the Commits API to filter commits by path (Luis HGO)
-
Fix Markdown styling inside reference links (Jan Zdráhal)
-
Fix extra space on Build sidebar on Firefox !7060
-
Fix mobile layout issues in admin user overview page !7087
-
Fix HipChat notifications rendering (airatshigapov, eisnerd)
...
...
lib/banzai/filter/abstract_reference_filter.rb
浏览文件 @
6b4c6fa1
...
...
@@ -102,10 +102,10 @@ module Banzai
end
elsif
element_node?
(
node
)
yield_valid_link
(
node
)
do
|
link
,
text
|
yield_valid_link
(
node
)
do
|
link
,
inner_html
|
if
ref_pattern
&&
link
=~
/\A
#{
ref_pattern
}
\z/
replace_link_node_with_href
(
node
,
link
)
do
object_link_filter
(
link
,
ref_pattern
,
link_
text:
text
)
object_link_filter
(
link
,
ref_pattern
,
link_
content:
inner_html
)
end
next
...
...
@@ -113,9 +113,9 @@ module Banzai
next
unless
link_pattern
if
link
==
text
&&
text
=~
/\A
#{
link_pattern
}
/
if
link
==
inner_html
&&
inner_html
=~
/\A
#{
link_pattern
}
/
replace_link_node_with_text
(
node
,
link
)
do
object_link_filter
(
text
,
link_pattern
)
object_link_filter
(
inner_html
,
link_pattern
)
end
next
...
...
@@ -123,7 +123,7 @@ module Banzai
if
link
=~
/\A
#{
link_pattern
}
\z/
replace_link_node_with_href
(
node
,
link
)
do
object_link_filter
(
link
,
link_pattern
,
link_
text:
text
)
object_link_filter
(
link
,
link_pattern
,
link_
content:
inner_html
)
end
next
...
...
@@ -140,11 +140,11 @@ module Banzai
#
# text - String text to replace references in.
# pattern - Reference pattern to match against.
# link_
tex
t - Original content of the link being replaced.
# link_
conten
t - Original content of the link being replaced.
#
# Returns a String with references replaced with links. All links
# have `gfm` and `gfm-OBJECT_NAME` class names attached for styling.
def
object_link_filter
(
text
,
pattern
,
link_
tex
t:
nil
)
def
object_link_filter
(
text
,
pattern
,
link_
conten
t:
nil
)
references_in
(
text
,
pattern
)
do
|
match
,
id
,
project_ref
,
matches
|
project
=
project_from_ref_cached
(
project_ref
)
...
...
@@ -152,7 +152,7 @@ module Banzai
title
=
object_link_title
(
object
)
klass
=
reference_class
(
object_sym
)
data
=
data_attributes_for
(
link_
tex
t
||
match
,
project
,
object
)
data
=
data_attributes_for
(
link_
conten
t
||
match
,
project
,
object
)
if
matches
.
names
.
include?
(
"url"
)
&&
matches
[
:url
]
url
=
matches
[
:url
]
...
...
@@ -160,11 +160,11 @@ module Banzai
url
=
url_for_object_cached
(
object
,
project
)
end
text
=
link_tex
t
||
object_link_text
(
object
,
matches
)
content
=
link_conten
t
||
object_link_text
(
object
,
matches
)
%(<a href="#{url}" #{data}
title="#{escape_once(title)}"
class="#{klass}">#{
escape_once(text)
}</a>)
class="#{klass}">#{
content
}</a>)
else
match
end
...
...
lib/banzai/filter/external_issue_reference_filter.rb
浏览文件 @
6b4c6fa1
...
...
@@ -37,10 +37,10 @@ module Banzai
end
elsif
element_node?
(
node
)
yield_valid_link
(
node
)
do
|
link
,
text
|
yield_valid_link
(
node
)
do
|
link
,
inner_html
|
if
link
=~
ref_start_pattern
replace_link_node_with_href
(
node
,
link
)
do
issue_link_filter
(
link
,
link_
text:
text
)
issue_link_filter
(
link
,
link_
content:
inner_html
)
end
end
end
...
...
@@ -54,10 +54,11 @@ module Banzai
# issue's details page.
#
# text - String text to replace references in.
# link_content - Original content of the link being replaced.
#
# Returns a String with `JIRA-123` references replaced with links. All
# links have `gfm` and `gfm-issue` class names attached for styling.
def
issue_link_filter
(
text
,
link_
tex
t:
nil
)
def
issue_link_filter
(
text
,
link_
conten
t:
nil
)
project
=
context
[
:project
]
self
.
class
.
references_in
(
text
,
issue_reference_pattern
)
do
|
match
,
id
|
...
...
@@ -69,11 +70,11 @@ module Banzai
klass
=
reference_class
(
:issue
)
data
=
data_attribute
(
project:
project
.
id
,
external_issue:
id
)
text
=
link_tex
t
||
match
content
=
link_conten
t
||
match
%(<a href="#{url}" #{data}
title="#{escape_once(title)}"
class="#{klass}">#{
escape_once(text)
}</a>)
class="#{klass}">#{
content
}</a>)
end
end
...
...
lib/banzai/filter/reference_filter.rb
浏览文件 @
6b4c6fa1
...
...
@@ -85,14 +85,14 @@ module Banzai
@nodes
||=
each_node
.
to_a
end
# Yields the link's URL and
text
whenever the node is a valid <a> tag.
# Yields the link's URL and
inner HTML
whenever the node is a valid <a> tag.
def
yield_valid_link
(
node
)
link
=
CGI
.
unescape
(
node
.
attr
(
'href'
).
to_s
)
text
=
node
.
text
inner_html
=
node
.
inner_html
return
unless
link
.
force_encoding
(
'UTF-8'
).
valid_encoding?
yield
link
,
text
yield
link
,
inner_html
end
def
replace_text_when_pattern_matches
(
node
,
pattern
)
...
...
lib/banzai/filter/user_reference_filter.rb
浏览文件 @
6b4c6fa1
...
...
@@ -35,10 +35,10 @@ module Banzai
user_link_filter
(
content
)
end
elsif
element_node?
(
node
)
yield_valid_link
(
node
)
do
|
link
,
text
|
yield_valid_link
(
node
)
do
|
link
,
inner_html
|
if
link
=~
ref_pattern_start
replace_link_node_with_href
(
node
,
link
)
do
user_link_filter
(
link
,
link_
text:
text
)
user_link_filter
(
link
,
link_
content:
inner_html
)
end
end
end
...
...
@@ -52,15 +52,16 @@ module Banzai
# user's profile page.
#
# text - String text to replace references in.
# link_content - Original content of the link being replaced.
#
# Returns a String with `@user` references replaced with links. All links
# have `gfm` and `gfm-project_member` class names attached for styling.
def
user_link_filter
(
text
,
link_
tex
t:
nil
)
def
user_link_filter
(
text
,
link_
conten
t:
nil
)
self
.
class
.
references_in
(
text
)
do
|
match
,
username
|
if
username
==
'all'
link_to_all
(
link_
text:
link_tex
t
)
link_to_all
(
link_
content:
link_conten
t
)
elsif
namespace
=
namespaces
[
username
]
link_to_namespace
(
namespace
,
link_
text:
link_tex
t
)
||
match
link_to_namespace
(
namespace
,
link_
content:
link_conten
t
)
||
match
else
match
end
...
...
@@ -102,49 +103,49 @@ module Banzai
reference_class
(
:project_member
)
end
def
link_to_all
(
link_
tex
t:
nil
)
def
link_to_all
(
link_
conten
t:
nil
)
project
=
context
[
:project
]
author
=
context
[
:author
]
if
author
&&
!
project
.
team
.
member?
(
author
)
link_
tex
t
link_
conten
t
else
url
=
urls
.
namespace_project_url
(
project
.
namespace
,
project
,
only_path:
context
[
:only_path
])
data
=
data_attribute
(
project:
project
.
id
,
author:
author
.
try
(
:id
))
text
=
link_tex
t
||
User
.
reference_prefix
+
'all'
content
=
link_conten
t
||
User
.
reference_prefix
+
'all'
link_tag
(
url
,
data
,
tex
t
,
'All Project and Group Members'
)
link_tag
(
url
,
data
,
conten
t
,
'All Project and Group Members'
)
end
end
def
link_to_namespace
(
namespace
,
link_
tex
t:
nil
)
def
link_to_namespace
(
namespace
,
link_
conten
t:
nil
)
if
namespace
.
is_a?
(
Group
)
link_to_group
(
namespace
.
path
,
namespace
,
link_
text:
link_tex
t
)
link_to_group
(
namespace
.
path
,
namespace
,
link_
content:
link_conten
t
)
else
link_to_user
(
namespace
.
path
,
namespace
,
link_
text:
link_tex
t
)
link_to_user
(
namespace
.
path
,
namespace
,
link_
content:
link_conten
t
)
end
end
def
link_to_group
(
group
,
namespace
,
link_
tex
t:
nil
)
def
link_to_group
(
group
,
namespace
,
link_
conten
t:
nil
)
url
=
urls
.
group_url
(
group
,
only_path:
context
[
:only_path
])
data
=
data_attribute
(
group:
namespace
.
id
)
text
=
link_tex
t
||
Group
.
reference_prefix
+
group
content
=
link_conten
t
||
Group
.
reference_prefix
+
group
link_tag
(
url
,
data
,
tex
t
,
namespace
.
name
)
link_tag
(
url
,
data
,
conten
t
,
namespace
.
name
)
end
def
link_to_user
(
user
,
namespace
,
link_
tex
t:
nil
)
def
link_to_user
(
user
,
namespace
,
link_
conten
t:
nil
)
url
=
urls
.
user_url
(
user
,
only_path:
context
[
:only_path
])
data
=
data_attribute
(
user:
namespace
.
owner_id
)
text
=
link_tex
t
||
User
.
reference_prefix
+
user
content
=
link_conten
t
||
User
.
reference_prefix
+
user
link_tag
(
url
,
data
,
tex
t
,
namespace
.
owner_name
)
link_tag
(
url
,
data
,
conten
t
,
namespace
.
owner_name
)
end
def
link_tag
(
url
,
data
,
tex
t
,
title
)
%(<a href="#{url}" #{data} class="#{link_class}" title="#{escape_once(title)}">#{
escape_once(text)
}</a>)
def
link_tag
(
url
,
data
,
link_conten
t
,
title
)
%(<a href="#{url}" #{data} class="#{link_class}" title="#{escape_once(title)}">#{
link_content
}</a>)
end
end
end
...
...
lib/banzai/redactor.rb
浏览文件 @
6b4c6fa1
...
...
@@ -41,10 +41,10 @@ module Banzai
next
if
visible
.
include?
(
node
)
doc_data
[
:visible_reference_count
]
-=
1
# The reference should be replaced by the original
tex
t,
# which is not always the same as the rendered
text
.
text
=
node
.
attr
(
'data-original'
)
||
node
.
text
node
.
replace
(
tex
t
)
# The reference should be replaced by the original
link's conten
t,
# which is not always the same as the rendered
one
.
content
=
node
.
attr
(
'data-original'
)
||
node
.
inner_html
node
.
replace
(
conten
t
)
end
end
...
...
spec/lib/banzai/filter/external_issue_reference_filter_spec.rb
浏览文件 @
6b4c6fa1
...
...
@@ -8,6 +8,8 @@ describe Banzai::Filter::ExternalIssueReferenceFilter, lib: true do
end
shared_examples_for
"external issue tracker"
do
it_behaves_like
'a reference containing an element node'
it
'requires project context'
do
expect
{
described_class
.
call
(
''
)
}.
to
raise_error
(
ArgumentError
,
/:project/
)
end
...
...
spec/lib/banzai/filter/issue_reference_filter_spec.rb
浏览文件 @
6b4c6fa1
...
...
@@ -22,6 +22,8 @@ describe Banzai::Filter::IssueReferenceFilter, lib: true do
end
context
'internal reference'
do
it_behaves_like
'a reference containing an element node'
let
(
:reference
)
{
issue
.
to_reference
}
it
'ignores valid references when using non-default tracker'
do
...
...
@@ -83,6 +85,20 @@ describe Banzai::Filter::IssueReferenceFilter, lib: true do
expect
(
link
.
attr
(
'data-issue'
)).
to
eq
issue
.
id
.
to_s
end
it
'includes a data-original attribute'
do
doc
=
reference_filter
(
"See
#{
reference
}
"
)
link
=
doc
.
css
(
'a'
).
first
expect
(
link
).
to
have_attribute
(
'data-original'
)
expect
(
link
.
attr
(
'data-original'
)).
to
eq
reference
end
it
'does not escape the data-original attribute'
do
inner_html
=
'element <code>node</code> inside'
doc
=
reference_filter
(
%{<a href="#{reference}">#{inner_html}</a>}
)
expect
(
doc
.
children
.
first
.
attr
(
'data-original'
)).
to
eq
inner_html
end
it
'supports an :only_path context'
do
doc
=
reference_filter
(
"Issue
#{
reference
}
"
,
only_path:
true
)
link
=
doc
.
css
(
'a'
).
first
.
attr
(
'href'
)
...
...
@@ -101,6 +117,8 @@ describe Banzai::Filter::IssueReferenceFilter, lib: true do
end
context
'cross-project reference'
do
it_behaves_like
'a reference containing an element node'
let
(
:namespace
)
{
create
(
:namespace
,
name:
'cross-reference'
)
}
let
(
:project2
)
{
create
(
:empty_project
,
:public
,
namespace:
namespace
)
}
let
(
:issue
)
{
create
(
:issue
,
project:
project2
)
}
...
...
@@ -141,6 +159,8 @@ describe Banzai::Filter::IssueReferenceFilter, lib: true do
end
context
'cross-project URL reference'
do
it_behaves_like
'a reference containing an element node'
let
(
:namespace
)
{
create
(
:namespace
,
name:
'cross-reference'
)
}
let
(
:project2
)
{
create
(
:empty_project
,
:public
,
namespace:
namespace
)
}
let
(
:issue
)
{
create
(
:issue
,
project:
project2
)
}
...
...
@@ -160,39 +180,45 @@ describe Banzai::Filter::IssueReferenceFilter, lib: true do
end
context
'cross-project reference in link href'
do
it_behaves_like
'a reference containing an element node'
let
(
:namespace
)
{
create
(
:namespace
,
name:
'cross-reference'
)
}
let
(
:project2
)
{
create
(
:empty_project
,
:public
,
namespace:
namespace
)
}
let
(
:issue
)
{
create
(
:issue
,
project:
project2
)
}
let
(
:reference
)
{
%Q{<a href="
#{
issue
.
to_reference
(
project
)
}
">Reference</a>}
}
let
(
:reference
)
{
issue
.
to_reference
(
project
)
}
let
(
:reference_link
)
{
%{<a href="#{reference}">Reference</a>}
}
it
'links to a valid reference'
do
doc
=
reference_filter
(
"See
#{
reference
}
"
)
doc
=
reference_filter
(
"See
#{
reference
_link
}
"
)
expect
(
doc
.
css
(
'a'
).
first
.
attr
(
'href'
)).
to
eq
helper
.
url_for_issue
(
issue
.
iid
,
project2
)
end
it
'links with adjacent text'
do
doc
=
reference_filter
(
"Fixed (
#{
reference
}
.)"
)
doc
=
reference_filter
(
"Fixed (
#{
reference
_link
}
.)"
)
expect
(
doc
.
to_html
).
to
match
(
/\(<a.+>Reference<\/a>\.\)/
)
end
end
context
'cross-project URL in link href'
do
it_behaves_like
'a reference containing an element node'
let
(
:namespace
)
{
create
(
:namespace
,
name:
'cross-reference'
)
}
let
(
:project2
)
{
create
(
:empty_project
,
:public
,
namespace:
namespace
)
}
let
(
:issue
)
{
create
(
:issue
,
project:
project2
)
}
let
(
:reference
)
{
%Q{<a href="
#{
helper
.
url_for_issue
(
issue
.
iid
,
project2
)
+
"#note_123"
}
">Reference</a>}
}
let
(
:reference
)
{
"
#{
helper
.
url_for_issue
(
issue
.
iid
,
project2
)
+
"#note_123"
}
"
}
let
(
:reference_link
)
{
%{<a href="#{reference}">Reference</a>}
}
it
'links to a valid reference'
do
doc
=
reference_filter
(
"See
#{
reference
}
"
)
doc
=
reference_filter
(
"See
#{
reference
_link
}
"
)
expect
(
doc
.
css
(
'a'
).
first
.
attr
(
'href'
)).
to
eq
helper
.
url_for_issue
(
issue
.
iid
,
project2
)
+
"#note_123"
end
it
'links with adjacent text'
do
doc
=
reference_filter
(
"Fixed (
#{
reference
}
.)"
)
doc
=
reference_filter
(
"Fixed (
#{
reference
_link
}
.)"
)
expect
(
doc
.
to_html
).
to
match
(
/\(<a.+>Reference<\/a>\.\)/
)
end
end
...
...
spec/lib/banzai/filter/user_reference_filter_spec.rb
浏览文件 @
6b4c6fa1
...
...
@@ -24,6 +24,8 @@ describe Banzai::Filter::UserReferenceFilter, lib: true do
end
context
'mentioning @all'
do
it_behaves_like
'a reference containing an element node'
let
(
:reference
)
{
User
.
reference_prefix
+
'all'
}
before
do
...
...
@@ -60,6 +62,8 @@ describe Banzai::Filter::UserReferenceFilter, lib: true do
end
context
'mentioning a user'
do
it_behaves_like
'a reference containing an element node'
it
'links to a User'
do
doc
=
reference_filter
(
"Hey
#{
reference
}
"
)
expect
(
doc
.
css
(
'a'
).
first
.
attr
(
'href'
)).
to
eq
urls
.
user_url
(
user
)
...
...
@@ -89,6 +93,8 @@ describe Banzai::Filter::UserReferenceFilter, lib: true do
end
context
'mentioning a group'
do
it_behaves_like
'a reference containing an element node'
let
(
:group
)
{
create
(
:group
)
}
let
(
:reference
)
{
group
.
to_reference
}
...
...
spec/lib/banzai/pipeline/full_pipeline_spec.rb
0 → 100644
浏览文件 @
6b4c6fa1
require
'rails_helper'
describe
Banzai
::
Pipeline
::
FullPipeline
do
describe
'References'
do
let
(
:project
)
{
create
(
:empty_project
,
:public
)
}
let
(
:issue
)
{
create
(
:issue
,
project:
project
)
}
it
'handles markdown inside a reference'
do
markdown
=
"[some `code` inside](
#{
issue
.
to_reference
}
)"
result
=
described_class
.
call
(
markdown
,
project:
project
)
link_content
=
result
[
:output
].
css
(
'a'
).
inner_html
expect
(
link_content
).
to
eq
(
'some <code>code</code> inside'
)
end
it
'sanitizes reference HTML'
do
link_label
=
'<script>bad things</script>'
markdown
=
"[
#{
link_label
}
](
#{
issue
.
to_reference
}
)"
result
=
described_class
.
to_html
(
markdown
,
project:
project
)
expect
(
result
).
not_to
include
(
link_label
)
end
it
'escapes the data-original attribute on a reference'
do
markdown
=
%Q{[">bad things](
#{
issue
.
to_reference
}
)}
result
=
described_class
.
to_html
(
markdown
,
project:
project
)
expect
(
result
).
to
include
(
%{data-original='\">bad things'}
)
end
end
end
spec/lib/banzai/redactor_spec.rb
浏览文件 @
6b4c6fa1
...
...
@@ -6,39 +6,60 @@ describe Banzai::Redactor do
let
(
:redactor
)
{
described_class
.
new
(
project
,
user
)
}
describe
'#redact'
do
it
'redacts an Array of documents'
do
doc1
=
Nokogiri
::
HTML
.
fragment
(
'<a class="gfm" data-reference-type="issue">foo</a>'
)
doc2
=
Nokogiri
::
HTML
.
fragment
(
'<a class="gfm" data-reference-type="issue">bar</a>'
)
expect
(
redactor
).
to
receive
(
:nodes_visible_to_user
).
and_return
([])
redacted_data
=
redactor
.
redact
([
doc1
,
doc2
])
expect
(
redacted_data
.
map
{
|
data
|
data
[
:document
]
}).
to
eq
([
doc1
,
doc2
])
expect
(
redacted_data
.
map
{
|
data
|
data
[
:visible_reference_count
]
}).
to
eq
([
0
,
0
])
expect
(
doc1
.
to_html
).
to
eq
(
'foo'
)
expect
(
doc2
.
to_html
).
to
eq
(
'bar'
)
context
'when reference not visible to user'
do
before
do
expect
(
redactor
).
to
receive
(
:nodes_visible_to_user
).
and_return
([])
end
it
'redacts an array of documents'
do
doc1
=
Nokogiri
::
HTML
.
fragment
(
'<a class="gfm" data-reference-type="issue">foo</a>'
)
doc2
=
Nokogiri
::
HTML
.
fragment
(
'<a class="gfm" data-reference-type="issue">bar</a>'
)
redacted_data
=
redactor
.
redact
([
doc1
,
doc2
])
expect
(
redacted_data
.
map
{
|
data
|
data
[
:document
]
}).
to
eq
([
doc1
,
doc2
])
expect
(
redacted_data
.
map
{
|
data
|
data
[
:visible_reference_count
]
}).
to
eq
([
0
,
0
])
expect
(
doc1
.
to_html
).
to
eq
(
'foo'
)
expect
(
doc2
.
to_html
).
to
eq
(
'bar'
)
end
it
'replaces redacted reference with inner HTML'
do
doc
=
Nokogiri
::
HTML
.
fragment
(
"<a class='gfm' data-reference-type='issue'>foo</a>"
)
redactor
.
redact
([
doc
])
expect
(
doc
.
to_html
).
to
eq
(
'foo'
)
end
context
'when data-original attribute provided'
do
let
(
:original_content
)
{
'<code>foo</code>'
}
it
'replaces redacted reference with original content'
do
doc
=
Nokogiri
::
HTML
.
fragment
(
"<a class='gfm' data-reference-type='issue' data-original='
#{
original_content
}
'>bar</a>"
)
redactor
.
redact
([
doc
])
expect
(
doc
.
to_html
).
to
eq
(
original_content
)
end
end
end
it
'does not redact an Array of documents'
do
doc1_html
=
'<a class="gfm" data-reference-type="issue">foo</a>'
doc1
=
Nokogiri
::
HTML
.
fragment
(
doc1_html
)
context
'when reference visible to user'
do
it
'does not redact an array of documents'
do
doc1_html
=
'<a class="gfm" data-reference-type="issue">foo</a>'
doc1
=
Nokogiri
::
HTML
.
fragment
(
doc1_html
)
doc2_html
=
'<a class="gfm" data-reference-type="issue">bar</a>'
doc2
=
Nokogiri
::
HTML
.
fragment
(
doc2_html
)
doc2_html
=
'<a class="gfm" data-reference-type="issue">bar</a>'
doc2
=
Nokogiri
::
HTML
.
fragment
(
doc2_html
)
nodes
=
redactor
.
document_nodes
([
doc1
,
doc2
]).
map
{
|
x
|
x
[
:nodes
]
}
expect
(
redactor
).
to
receive
(
:nodes_visible_to_user
).
and_return
(
nodes
.
flatten
)
nodes
=
redactor
.
document_nodes
([
doc1
,
doc2
]).
map
{
|
x
|
x
[
:nodes
]
}
expect
(
redactor
).
to
receive
(
:nodes_visible_to_user
).
and_return
(
nodes
.
flatten
)
redacted_data
=
redactor
.
redact
([
doc1
,
doc2
])
redacted_data
=
redactor
.
redact
([
doc1
,
doc2
])
expect
(
redacted_data
.
map
{
|
data
|
data
[
:document
]
}).
to
eq
([
doc1
,
doc2
])
expect
(
redacted_data
.
map
{
|
data
|
data
[
:visible_reference_count
]
}).
to
eq
([
1
,
1
])
expect
(
doc1
.
to_html
).
to
eq
(
doc1_html
)
expect
(
doc2
.
to_html
).
to
eq
(
doc2_html
)
expect
(
redacted_data
.
map
{
|
data
|
data
[
:document
]
}).
to
eq
([
doc1
,
doc2
])
expect
(
redacted_data
.
map
{
|
data
|
data
[
:visible_reference_count
]
}).
to
eq
([
1
,
1
])
expect
(
doc1
.
to_html
).
to
eq
(
doc1_html
)
expect
(
doc2
.
to_html
).
to
eq
(
doc2_html
)
end
end
end
...
...
spec/support/banzai/reference_filter_shared_examples.rb
0 → 100644
浏览文件 @
6b4c6fa1
# Specs for reference links containing HTML.
#
# Requires a reference:
# let(:reference) { '#42' }
shared_examples
'a reference containing an element node'
do
let
(
:inner_html
)
{
'element <code>node</code> inside'
}
let
(
:reference_with_element
)
{
%{<a href="#{reference}">#{inner_html}</a>}
}
it
'does not escape inner html'
do
doc
=
reference_filter
(
reference_with_element
)
expect
(
doc
.
children
.
first
.
inner_html
).
to
eq
(
inner_html
)
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录