BigW Consortium Gitlab
Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gitlab-ce
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Forest Godfrey
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
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
127 additions
and
7 deletions
+127
-7
ascii_doc_post_processing_filter.rb
lib/banzai/filter/ascii_doc_post_processing_filter.rb
+13
-0
sanitization_filter.rb
lib/banzai/filter/sanitization_filter.rb
+4
-0
ascii_doc_pipeline.rb
lib/banzai/pipeline/ascii_doc_pipeline.rb
+14
-0
asciidoc.rb
lib/gitlab/asciidoc.rb
+6
-7
user_creates_wiki_page_spec.rb
spec/features/projects/wiki/user_creates_wiki_page_spec.rb
+34
-0
ascii_doc_post_processing_filter_spec.rb
...ib/banzai/filter/ascii_doc_post_processing_filter_spec.rb
+15
-0
sanitization_filter_spec.rb
spec/lib/banzai/filter/sanitization_filter_spec.rb
+16
-0
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