Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kazuhiko Shiozaki
gitlab-ce
Commits
e08d947e
Commit
e08d947e
authored
9 years ago
by
Douwe Maan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use relative URL for Markdown references, except in mails.
parent
c5de2ce7
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
111 additions
and
58 deletions
+111
-58
app/helpers/issues_helper.rb
app/helpers/issues_helper.rb
+18
-6
app/models/project_services/gitlab_issue_tracker_service.rb
app/models/project_services/gitlab_issue_tracker_service.rb
+12
-0
app/models/project_services/issue_tracker_service.rb
app/models/project_services/issue_tracker_service.rb
+12
-0
app/views/layouts/nav/_project.html.haml
app/views/layouts/nav/_project.html.haml
+1
-1
app/views/notify/_note_message.html.haml
app/views/notify/_note_message.html.haml
+1
-1
app/views/notify/new_issue_email.html.haml
app/views/notify/new_issue_email.html.haml
+1
-1
app/views/notify/new_merge_request_email.html.haml
app/views/notify/new_merge_request_email.html.haml
+1
-1
app/views/projects/_dropdown.html.haml
app/views/projects/_dropdown.html.haml
+1
-1
lib/gitlab/markdown.rb
lib/gitlab/markdown.rb
+53
-37
spec/helpers/gitlab_markdown_helper_spec.rb
spec/helpers/gitlab_markdown_helper_spec.rb
+3
-3
spec/models/project_services/gitlab_issue_tracker_service_spec.rb
...els/project_services/gitlab_issue_tracker_service_spec.rb
+8
-7
No files found.
app/helpers/issues_helper.rb
View file @
e08d947e
...
...
@@ -13,22 +13,34 @@ module IssuesHelper
OpenStruct
.
new
(
id:
0
,
title:
'None (backlog)'
,
name:
'Unassigned'
)
end
def
url_for_project_issues
(
project
=
@project
)
def
url_for_project_issues
(
project
=
@project
,
options
=
{}
)
return
''
if
project
.
nil?
project
.
issues_tracker
.
project_url
if
options
[
:only_path
]
project
.
issues_tracker
.
project_path
else
project
.
issues_tracker
.
project_url
end
end
def
url_for_new_issue
(
project
=
@project
)
def
url_for_new_issue
(
project
=
@project
,
options
=
{}
)
return
''
if
project
.
nil?
project
.
issues_tracker
.
new_issue_url
if
options
[
:only_path
]
project
.
issues_tracker
.
new_issue_path
else
project
.
issues_tracker
.
new_issue_url
end
end
def
url_for_issue
(
issue_iid
,
project
=
@project
)
def
url_for_issue
(
issue_iid
,
project
=
@project
,
options
=
{}
)
return
''
if
project
.
nil?
project
.
issues_tracker
.
issue_url
(
issue_iid
)
if
options
[
:only_path
]
project
.
issues_tracker
.
issue_path
(
issue_iid
)
else
project
.
issues_tracker
.
issue_url
(
issue_iid
)
end
end
def
title_for_issue
(
issue_iid
,
project
=
@project
)
...
...
This diff is collapsed.
Click to expand it.
app/models/project_services/gitlab_issue_tracker_service.rb
View file @
e08d947e
...
...
@@ -47,4 +47,16 @@ class GitlabIssueTrackerService < IssueTrackerService
def
issue_url
(
iid
)
namespace_project_issue_url
(
namespace_id:
project
.
namespace
,
project_id:
project
,
id:
iid
)
end
def
project_path
namespace_project_issues_path
(
project
.
namespace
,
project
)
end
def
new_issue_path
new_namespace_project_issue_path
(
namespace_id:
project
.
namespace
,
project_id:
project
)
end
def
issue_path
(
iid
)
namespace_project_issue_path
(
namespace_id:
project
.
namespace
,
project_id:
project
,
id:
iid
)
end
end
This diff is collapsed.
Click to expand it.
app/models/project_services/issue_tracker_service.rb
View file @
e08d947e
...
...
@@ -34,6 +34,18 @@ class IssueTrackerService < Service
self
.
issues_url
.
gsub
(
':id'
,
iid
.
to_s
)
end
def
project_path
project_url
end
def
new_issue_path
new_issue_url
end
def
issue_path
(
iid
)
issue_url
(
iid
)
end
def
fields
[
{
type:
'text'
,
name:
'description'
,
placeholder:
description
},
...
...
This diff is collapsed.
Click to expand it.
app/views/layouts/nav/_project.html.haml
View file @
e08d947e
...
...
@@ -53,7 +53,7 @@
-
if
project_nav_tab?
:issues
=
nav_link
(
controller: :issues
)
do
=
link_to
url_for_project_issues
,
title:
'Issues'
,
class:
'shortcuts-issues'
do
=
link_to
url_for_project_issues
(
@project
,
only_path:
true
)
,
title:
'Issues'
,
class:
'shortcuts-issues'
do
%i
.fa.fa-exclamation-circle
%span
Issues
...
...
This diff is collapsed.
Click to expand it.
app/views/notify/_note_message.html.haml
View file @
e08d947e
%div
=
replace_image_links_with_base64
(
markdown
(
@note
.
note
),
@note
.
project
)
=
replace_image_links_with_base64
(
markdown
(
@note
.
note
,
reference_only_path:
false
),
@note
.
project
)
This diff is collapsed.
Click to expand it.
app/views/notify/new_issue_email.html.haml
View file @
e08d947e
-
if
@issue
.
description
=
replace_image_links_with_base64
(
markdown
(
@issue
.
description
),
@issue
.
project
)
=
replace_image_links_with_base64
(
markdown
(
@issue
.
description
,
reference_only_path:
false
),
@issue
.
project
)
-
if
@issue
.
assignee_id
.
present?
%p
...
...
This diff is collapsed.
Click to expand it.
app/views/notify/new_merge_request_email.html.haml
View file @
e08d947e
...
...
@@ -6,4 +6,4 @@
Assignee:
#{
@merge_request
.
author_name
}
→
#{
@merge_request
.
assignee_name
}
-
if
@merge_request
.
description
=
replace_image_links_with_base64
(
markdown
(
@merge_request
.
description
),
@merge_request
.
project
)
=
replace_image_links_with_base64
(
markdown
(
@merge_request
.
description
,
reference_only_path:
false
),
@merge_request
.
project
)
This diff is collapsed.
Click to expand it.
app/views/projects/_dropdown.html.haml
View file @
e08d947e
...
...
@@ -5,7 +5,7 @@
%ul
.dropdown-menu
-
if
@project
.
issues_enabled
&&
can?
(
current_user
,
:write_issue
,
@project
)
%li
=
link_to
url_for_new_issue
,
title:
"New Issue"
do
=
link_to
url_for_new_issue
(
@project
,
only_path:
true
)
,
title:
"New Issue"
do
New issue
-
if
@project
.
merge_requests_enabled
&&
can?
(
current_user
,
:write_merge_request
,
@project
)
%li
...
...
This diff is collapsed.
Click to expand it.
lib/gitlab/markdown.rb
View file @
e08d947e
...
...
@@ -32,12 +32,12 @@ module Gitlab
module
Markdown
include
IssuesHelper
attr_reader
:html_options
attr_reader
:
options
,
:
html_options
# Public: Parse the provided text with GitLab-Flavored Markdown
#
# text - the source text
# project -
extra options for the reference links as given to link_to
# project -
the project
# html_options - extra options for the reference links as given to link_to
def
gfm
(
text
,
project
=
@project
,
html_options
=
{})
gfm_with_options
(
text
,
{},
project
,
html_options
)
...
...
@@ -46,9 +46,10 @@ module Gitlab
# Public: Parse the provided text with GitLab-Flavored Markdown
#
# text - the source text
# options - parse_tasks: true - render tasks
# - xhtml: true - output XHTML instead of HTML
# project - extra options for the reference links as given to link_to
# options - parse_tasks - render tasks
# - xhtml - output XHTML instead of HTML
# - reference_only_path - Use relative path for reference links
# project - the project
# html_options - extra options for the reference links as given to link_to
def
gfm_with_options
(
text
,
options
=
{},
project
=
@project
,
html_options
=
{})
return
text
if
text
.
nil?
...
...
@@ -58,6 +59,13 @@ module Gitlab
# for gsub calls to work as we need them to.
text
=
text
.
dup
.
to_str
options
.
reverse_merge!
(
parse_tasks:
false
,
xhtml:
false
,
reference_only_path:
true
)
@options
=
options
@html_options
=
html_options
# Extract pre blocks so they are not altered
...
...
@@ -113,12 +121,13 @@ module Gitlab
markdown_pipeline
=
HTML
::
Pipeline
::
Gitlab
.
new
(
filters
).
pipeline
result
=
markdown_pipeline
.
call
(
text
,
markdown_context
)
saveoptions
=
0
save_options
=
0
if
options
[
:xhtml
]
saveoptions
|=
Nokogiri
::
XML
::
Node
::
SaveOptions
::
AS_XHTML
save
_
options
|=
Nokogiri
::
XML
::
Node
::
SaveOptions
::
AS_XHTML
end
text
=
result
[
:output
].
to_html
(
save_with:
saveoptions
)
text
=
result
[
:output
].
to_html
(
save_with:
save
_
options
)
if
options
[
:parse_tasks
]
text
=
parse_tasks
(
text
)
...
...
@@ -229,33 +238,37 @@ module Gitlab
end
def
reference_user
(
identifier
,
project
=
@project
,
_
=
nil
)
options
=
html_options
.
merge
(
link_
options
=
html_options
.
merge
(
class:
"gfm gfm-project_member
#{
html_options
[
:class
]
}
"
)
if
identifier
==
"all"
link_to
(
"@all"
,
namespace_project_url
(
project
.
namespace
,
project
),
options
)
link_to
(
"@all"
,
namespace_project_url
(
project
.
namespace
,
project
,
only_path:
options
[
:reference_only_path
]),
link_options
)
elsif
namespace
=
Namespace
.
find_by
(
path:
identifier
)
url
=
if
namespace
.
type
==
"Group"
group_url
(
identifier
)
group_url
(
identifier
,
only_path:
options
[
:reference_only_path
]
)
else
user_url
(
identifier
)
user_url
(
identifier
,
only_path:
options
[
:reference_only_path
]
)
end
link_to
(
"@
#{
identifier
}
"
,
url
,
options
)
link_to
(
"@
#{
identifier
}
"
,
url
,
link_
options
)
end
end
def
reference_label
(
identifier
,
project
=
@project
,
_
=
nil
)
if
label
=
project
.
labels
.
find_by
(
id:
identifier
)
options
=
html_options
.
merge
(
link_
options
=
html_options
.
merge
(
class:
"gfm gfm-label
#{
html_options
[
:class
]
}
"
)
link_to
(
render_colored_label
(
label
),
namespace_project_issues_path
(
project
.
namespace
,
project
,
label_name:
label
.
name
),
options
link_
options
)
end
end
...
...
@@ -263,14 +276,14 @@ module Gitlab
def
reference_issue
(
identifier
,
project
=
@project
,
prefix_text
=
nil
)
if
project
.
default_issues_tracker?
if
project
.
issue_exists?
identifier
url
=
url_for_issue
(
identifier
,
project
)
url
=
url_for_issue
(
identifier
,
project
,
only_path:
options
[
:reference_only_path
]
)
title
=
title_for_issue
(
identifier
,
project
)
options
=
html_options
.
merge
(
link_
options
=
html_options
.
merge
(
title:
"Issue:
#{
title
}
"
,
class:
"gfm gfm-issue
#{
html_options
[
:class
]
}
"
)
link_to
(
"
#{
prefix_text
}
#
#{
identifier
}
"
,
url
,
options
)
link_to
(
"
#{
prefix_text
}
#
#{
identifier
}
"
,
url
,
link_
options
)
end
else
if
project
.
external_issue_tracker
.
present?
...
...
@@ -280,44 +293,46 @@ module Gitlab
end
end
def
reference_merge_request
(
identifier
,
project
=
@project
,
prefix_text
=
nil
)
def
reference_merge_request
(
identifier
,
project
=
@project
,
prefix_text
=
nil
)
if
merge_request
=
project
.
merge_requests
.
find_by
(
iid:
identifier
)
options
=
html_options
.
merge
(
link_
options
=
html_options
.
merge
(
title:
"Merge Request:
#{
merge_request
.
title
}
"
,
class:
"gfm gfm-merge_request
#{
html_options
[
:class
]
}
"
)
url
=
namespace_project_merge_request_url
(
project
.
namespace
,
project
,
merge_request
)
link_to
(
"
#{
prefix_text
}
!
#{
identifier
}
"
,
url
,
options
)
merge_request
,
only_path:
options
[
:reference_only_path
])
link_to
(
"
#{
prefix_text
}
!
#{
identifier
}
"
,
url
,
link_options
)
end
end
def
reference_snippet
(
identifier
,
project
=
@project
,
_
=
nil
)
if
snippet
=
project
.
snippets
.
find_by
(
id:
identifier
)
options
=
html_options
.
merge
(
link_
options
=
html_options
.
merge
(
title:
"Snippet:
#{
snippet
.
title
}
"
,
class:
"gfm gfm-snippet
#{
html_options
[
:class
]
}
"
)
link_to
(
"$
#{
identifier
}
"
,
namespace_project_snippet_url
(
project
.
namespace
,
project
,
snippet
),
options
namespace_project_snippet_url
(
project
.
namespace
,
project
,
snippet
,
only_path:
options
[
:reference_only_path
]),
link_options
)
end
end
def
reference_commit
(
identifier
,
project
=
@project
,
prefix_text
=
nil
)
if
project
.
valid_repo?
&&
commit
=
project
.
repository
.
commit
(
identifier
)
options
=
html_options
.
merge
(
link_
options
=
html_options
.
merge
(
title:
commit
.
link_title
,
class:
"gfm gfm-commit
#{
html_options
[
:class
]
}
"
)
prefix_text
=
"
#{
prefix_text
}
@"
if
prefix_text
link_to
(
"
#{
prefix_text
}#{
identifier
}
"
,
namespace_project_commit_url
(
project
.
namespace
,
project
,
commit
),
options
namespace_project_commit_url
(
project
.
namespace
,
project
,
commit
,
only_path:
options
[
:reference_only_path
]),
link_options
)
end
end
...
...
@@ -332,7 +347,7 @@ module Gitlab
from
=
project
.
repository
.
commit
(
from_id
)
&&
to
=
project
.
repository
.
commit
(
to_id
)
options
=
html_options
.
merge
(
link_
options
=
html_options
.
merge
(
title:
"Commits
#{
from_id
}
through
#{
to_id
}
"
,
class:
"gfm gfm-commit_range
#{
html_options
[
:class
]
}
"
)
...
...
@@ -340,22 +355,23 @@ module Gitlab
link_to
(
"
#{
prefix_text
}#{
identifier
}
"
,
namespace_project_compare_url
(
project
.
namespace
,
project
,
from:
from_id
,
to:
to_id
),
options
namespace_project_compare_url
(
project
.
namespace
,
project
,
from:
from_id
,
to:
to_id
,
only_path:
options
[
:reference_only_path
]),
link_options
)
end
end
def
reference_external_issue
(
identifier
,
project
=
@project
,
prefix_text
=
nil
)
url
=
url_for_issue
(
identifier
,
project
)
def
reference_external_issue
(
identifier
,
project
=
@project
,
prefix_text
=
nil
)
url
=
url_for_issue
(
identifier
,
project
,
only_path:
options
[
:reference_only_path
])
title
=
project
.
external_issue_tracker
.
title
options
=
html_options
.
merge
(
link_
options
=
html_options
.
merge
(
title:
"Issue in
#{
title
}
"
,
class:
"gfm gfm-issue
#{
html_options
[
:class
]
}
"
)
link_to
(
"
#{
prefix_text
}
#
#{
identifier
}
"
,
url
,
options
)
link_to
(
"
#{
prefix_text
}
#
#{
identifier
}
"
,
url
,
link_
options
)
end
# Turn list items that start with "[ ]" into HTML checkbox inputs.
...
...
This diff is collapsed.
Click to expand it.
spec/helpers/gitlab_markdown_helper_spec.rb
View file @
e08d947e
...
...
@@ -522,7 +522,7 @@ describe GitlabMarkdownHelper do
# First issue link
expect
(
groups
[
1
]).
to
match
(
/href="
#{
namespace_project_issue_
url
(
project
.
namespace
,
project
,
issues
[
0
])
}
"/
)
to
match
(
/href="
#{
namespace_project_issue_
path
(
project
.
namespace
,
project
,
issues
[
0
])
}
"/
)
expect
(
groups
[
1
]).
to
match
(
/#
#{
issues
[
0
].
iid
}
$/
)
# Internal commit link
...
...
@@ -531,7 +531,7 @@ describe GitlabMarkdownHelper do
# Second issue link
expect
(
groups
[
3
]).
to
match
(
/href="
#{
namespace_project_issue_
url
(
project
.
namespace
,
project
,
issues
[
1
])
}
"/
)
to
match
(
/href="
#{
namespace_project_issue_
path
(
project
.
namespace
,
project
,
issues
[
1
])
}
"/
)
expect
(
groups
[
3
]).
to
match
(
/#
#{
issues
[
1
].
iid
}
$/
)
# Trailing commit link
...
...
@@ -651,7 +651,7 @@ describe GitlabMarkdownHelper do
end
it
"should leave ref-like href of 'manual' links untouched"
do
expect
(
markdown
(
"why not [inspect !
#{
merge_request
.
iid
}
](http://example.tld/#!
#{
merge_request
.
iid
}
)"
)).
to
eq
(
"<p>why not <a href=
\"
http://example.tld/#!
#{
merge_request
.
iid
}
\"
>inspect </a><a class=
\"
gfm gfm-merge_request
\"
href=
\"
#{
namespace_project_merge_request_
url
(
project
.
namespace
,
project
,
merge_request
)
}
\"
title=
\"
Merge Request:
#{
merge_request
.
title
}
\"
>!
#{
merge_request
.
iid
}
</a><a href=
\"
http://example.tld/#!
#{
merge_request
.
iid
}
\"
></a></p>
\n
"
)
expect
(
markdown
(
"why not [inspect !
#{
merge_request
.
iid
}
](http://example.tld/#!
#{
merge_request
.
iid
}
)"
)).
to
eq
(
"<p>why not <a href=
\"
http://example.tld/#!
#{
merge_request
.
iid
}
\"
>inspect </a><a class=
\"
gfm gfm-merge_request
\"
href=
\"
#{
namespace_project_merge_request_
path
(
project
.
namespace
,
project
,
merge_request
)
}
\"
title=
\"
Merge Request:
#{
merge_request
.
title
}
\"
>!
#{
merge_request
.
iid
}
</a><a href=
\"
http://example.tld/#!
#{
merge_request
.
iid
}
\"
></a></p>
\n
"
)
end
it
"should leave ref-like src of images untouched"
do
...
...
This diff is collapsed.
Click to expand it.
spec/models/project_services/gitlab_issue_tracker_service_spec.rb
View file @
e08d947e
...
...
@@ -31,6 +31,7 @@ describe GitlabIssueTrackerService do
context
'with absolute urls'
do
before
do
GitlabIssueTrackerService
.
default_url_options
[
:script_name
]
=
"/gitlab/root"
@service
=
project
.
create_gitlab_issue_tracker_service
(
active:
true
)
end
...
...
@@ -39,13 +40,13 @@ describe GitlabIssueTrackerService do
end
it
'should give the correct path'
do
expect
(
@service
.
project_url
).
to
eq
(
"http://localhost/
#{
project
.
path_with_namespace
}
/issues"
)
expect
(
@service
.
new_issue_url
).
to
eq
(
"http://localhost/
#{
project
.
path_with_namespace
}
/issues/new"
)
expect
(
@service
.
issue_url
(
432
)).
to
eq
(
"http://localhost/
#{
project
.
path_with_namespace
}
/issues/432"
)
expect
(
@service
.
project_url
).
to
eq
(
"http://localhost/
gitlab/root/
#{
project
.
path_with_namespace
}
/issues"
)
expect
(
@service
.
new_issue_url
).
to
eq
(
"http://localhost/
gitlab/root/
#{
project
.
path_with_namespace
}
/issues/new"
)
expect
(
@service
.
issue_url
(
432
)).
to
eq
(
"http://localhost/
gitlab/root/
#{
project
.
path_with_namespace
}
/issues/432"
)
end
end
context
'with
enabled
relative urls'
do
context
'with relative urls'
do
before
do
GitlabIssueTrackerService
.
default_url_options
[
:script_name
]
=
"/gitlab/root"
@service
=
project
.
create_gitlab_issue_tracker_service
(
active:
true
)
...
...
@@ -56,9 +57,9 @@ describe GitlabIssueTrackerService do
end
it
'should give the correct path'
do
expect
(
@service
.
project_
url
).
to
eq
(
"http://localhost
/gitlab/root/
#{
project
.
path_with_namespace
}
/issues"
)
expect
(
@service
.
new_issue_
url
).
to
eq
(
"http://localhost
/gitlab/root/
#{
project
.
path_with_namespace
}
/issues/new"
)
expect
(
@service
.
issue_
url
(
432
)).
to
eq
(
"http://localhost
/gitlab/root/
#{
project
.
path_with_namespace
}
/issues/432"
)
expect
(
@service
.
project_
path
).
to
eq
(
"
/gitlab/root/
#{
project
.
path_with_namespace
}
/issues"
)
expect
(
@service
.
new_issue_
path
).
to
eq
(
"
/gitlab/root/
#{
project
.
path_with_namespace
}
/issues/new"
)
expect
(
@service
.
issue_
path
(
432
)).
to
eq
(
"
/gitlab/root/
#{
project
.
path_with_namespace
}
/issues/432"
)
end
end
end
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment