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
Jérome Perrin
gitlab-ce
Commits
3ca93284
Commit
3ca93284
authored
May 09, 2017
by
Jarka Kadlecova
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix LaTeX formatting for AsciiDoc wiki
parent
0b946a7b
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
127 additions
and
7 deletions
+127
-7
lib/banzai/filter/ascii_doc_post_processing_filter.rb
lib/banzai/filter/ascii_doc_post_processing_filter.rb
+13
-0
lib/banzai/filter/sanitization_filter.rb
lib/banzai/filter/sanitization_filter.rb
+4
-0
lib/banzai/pipeline/ascii_doc_pipeline.rb
lib/banzai/pipeline/ascii_doc_pipeline.rb
+14
-0
lib/gitlab/asciidoc.rb
lib/gitlab/asciidoc.rb
+6
-7
spec/features/projects/wiki/user_creates_wiki_page_spec.rb
spec/features/projects/wiki/user_creates_wiki_page_spec.rb
+34
-0
spec/lib/banzai/filter/ascii_doc_post_processing_filter_spec.rb
...ib/banzai/filter/ascii_doc_post_processing_filter_spec.rb
+15
-0
spec/lib/banzai/filter/sanitization_filter_spec.rb
spec/lib/banzai/filter/sanitization_filter_spec.rb
+16
-0
spec/lib/gitlab/asciidoc_spec.rb
spec/lib/gitlab/asciidoc_spec.rb
+25
-0
No files found.
lib/banzai/filter/ascii_doc_post_processing_filter.rb
0 → 100644
View file @
3ca93284
module
Banzai
module
Filter
class
AsciiDocPostProcessingFilter
<
HTML
::
Pipeline
::
Filter
def
call
doc
.
search
(
'[data-math-style]'
).
each
do
|
node
|
node
.
set_attribute
(
'class'
,
'code math js-render-math'
)
end
doc
end
end
end
end
lib/banzai/filter/sanitization_filter.rb
View file @
3ca93284
...
...
@@ -31,6 +31,10 @@ module Banzai
# Allow span elements
whitelist
[
:elements
].
push
(
'span'
)
# Allow data-math-style attribute in order to support LaTeX formatting
whitelist
[
:attributes
][
'code'
]
=
%w(data-math-style)
whitelist
[
:attributes
][
'pre'
]
=
%w(data-math-style)
# Allow html5 details/summary elements
whitelist
[
:elements
].
push
(
'details'
)
whitelist
[
:elements
].
push
(
'summary'
)
...
...
lib/banzai/pipeline/ascii_doc_pipeline.rb
0 → 100644
View file @
3ca93284
module
Banzai
module
Pipeline
class
AsciiDocPipeline
<
BasePipeline
def
self
.
filters
FilterArray
[
Filter
::
SanitizationFilter
,
Filter
::
ExternalLinkFilter
,
Filter
::
PlantumlFilter
,
Filter
::
AsciiDocPostProcessingFilter
]
end
end
end
end
lib/gitlab/asciidoc.rb
View file @
3ca93284
...
...
@@ -20,21 +20,20 @@ module Gitlab
backend: :gitlab_html5
,
attributes:
DEFAULT_ADOC_ATTRS
}
context
[
:pipeline
]
=
:
markup
context
[
:pipeline
]
=
:
ascii_doc
plantuml_setup
html
=
::
Asciidoctor
.
convert
(
input
,
asciidoc_opts
)
html
=
Banzai
.
render
(
html
,
context
)
html
.
html_safe
end
def
self
.
plantuml_setup
Asciidoctor
::
PlantUml
.
configure
do
|
conf
|
conf
.
url
=
ApplicationSetting
.
current
.
plantuml_url
conf
.
svg_enable
=
ApplicationSetting
.
current
.
plantuml_enabled
conf
.
png_enable
=
ApplicationSetting
.
current
.
plantuml_enabled
conf
.
url
=
current_application_settings
.
plantuml_url
conf
.
svg_enable
=
current_application_settings
.
plantuml_enabled
conf
.
png_enable
=
current_application_settings
.
plantuml_enabled
conf
.
txt_enable
=
false
end
end
...
...
@@ -47,13 +46,13 @@ module Gitlab
def
stem
(
node
)
return
super
unless
node
.
style
.
to_sym
==
:latexmath
%(<pre#{id_attribute(node)}
class="code math js-render-math #{node.role}"
data-math-style="display"><code>#{node.content}</code></pre>)
%(<pre#{id_attribute(node)} data-math-style="display"><code>#{node.content}</code></pre>)
end
def
inline_quoted
(
node
)
return
super
unless
node
.
type
.
to_sym
==
:latexmath
%(<code#{id_attribute(node)}
class="code math js-render-math #{node.role}"
data-math-style="inline">#{node.text}</code>)
%(<code#{id_attribute(node)} data-math-style="inline">#{node.text}</code>)
end
private
...
...
spec/features/projects/wiki/user_creates_wiki_page_spec.rb
View file @
3ca93284
...
...
@@ -28,6 +28,40 @@ feature 'Projects > Wiki > User creates wiki page', js: true, feature: true do
expect
(
page
).
to
have_content
(
"Last edited by
#{
user
.
name
}
"
)
expect
(
page
).
to
have_content
(
'My awesome wiki!'
)
end
scenario
'creates ASCII wiki with LaTeX blocks'
do
stub_application_setting
(
plantuml_url:
'http://localhost'
,
plantuml_enabled:
true
)
ascii_content
=
<<~
MD
:stem: latexmath
[stem]
++++
\s
qrt{4} = 2
++++
another part
[latexmath]
++++
\b
eta_x
\g
amma
++++
stem:[2+2] is 4
MD
find
(
'#wiki_format option[value=asciidoc]'
).
select_option
fill_in
:wiki_content
,
with:
ascii_content
page
.
within
'.wiki-form'
do
click_button
'Create page'
end
page
.
within
'.wiki'
do
expect
(
page
).
to
have_selector
(
'.katex'
,
count:
3
)
expect
(
page
).
to
have_content
(
'2+2 is 4'
)
end
end
end
context
'when wiki is not empty'
do
...
...
spec/lib/banzai/filter/ascii_doc_post_processing_filter_spec.rb
0 → 100644
View file @
3ca93284
require
'spec_helper'
describe
Banzai
::
Filter
::
AsciiDocPostProcessingFilter
,
lib:
true
do
include
FilterSpecHelper
it
"adds class for elements with data-math-style"
do
result
=
filter
(
'<pre data-math-style="inline">some code</pre><div data-math>and</div>'
).
to_html
expect
(
result
).
to
eq
(
'<pre data-math-style="inline" class="code math js-render-math">some code</pre><div data-math>and</div>'
)
end
it
"keeps content when no data-math-style found"
do
result
=
filter
(
'<pre>some code</pre><div data-math>and</div>'
).
to_html
expect
(
result
).
to
eq
(
'<pre>some code</pre><div data-math>and</div>'
)
end
end
spec/lib/banzai/filter/sanitization_filter_spec.rb
View file @
3ca93284
...
...
@@ -97,6 +97,22 @@ describe Banzai::Filter::SanitizationFilter, lib: true do
expect
(
filter
(
act
).
to_html
).
to
eq
exp
end
it
'allows `data-math-style` attribute on `code` and `pre` elements'
do
html
=
<<-
HTML
<pre class="code" data-math-style="inline">something</pre>
<code class="code" data-math-style="inline">something</code>
<div class="code" data-math-style="inline">something</div>
HTML
output
=
<<-
HTML
<pre data-math-style="inline">something</pre>
<code data-math-style="inline">something</code>
<div>something</div>
HTML
expect
(
filter
(
html
).
to_html
).
to
eq
(
output
)
end
it
'removes `rel` attribute from `a` elements'
do
act
=
%q{<a href="#" rel="nofollow">Link</a>}
exp
=
%q{<a href="#">Link</a>}
...
...
spec/lib/gitlab/asciidoc_spec.rb
View file @
3ca93284
...
...
@@ -70,6 +70,31 @@ module Gitlab
expect
(
output
).
to
include
(
'rel="nofollow noreferrer noopener"'
)
end
end
context
'LaTex code'
do
it
'adds class js-render-math to the output'
do
input
=
<<~
MD
:stem: latexmath
[stem]
++++
\s
qrt{4} = 2
++++
another part
[latexmath]
++++
\b
eta_x
\g
amma
++++
stem:[2+2] is 4
MD
expect
(
render
(
input
,
context
)).
to
include
(
'<pre data-math-style="display" class="code math js-render-math"><code>eta_x gamma</code></pre>'
)
expect
(
render
(
input
,
context
)).
to
include
(
'<p><code data-math-style="inline" class="code math js-render-math">2+2</code> is 4</p>'
)
end
end
end
def
render
(
*
args
)
...
...
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