Add markdown support
This commit is contained in:
parent
bc64450455
commit
44ef5a6173
3 changed files with 147 additions and 1 deletions
|
@ -23,3 +23,4 @@
|
||||||
@import 'mastodon/dashboard';
|
@import 'mastodon/dashboard';
|
||||||
@import 'mastodon/rtl';
|
@import 'mastodon/rtl';
|
||||||
@import 'mastodon/accessibility';
|
@import 'mastodon/accessibility';
|
||||||
|
@import 'mastodon/rich_text';
|
||||||
|
|
97
app/javascript/styles/mastodon/rich_text.scss
Normal file
97
app/javascript/styles/mastodon/rich_text.scss
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
.account__header__bio,
|
||||||
|
.status__content__text,
|
||||||
|
.e-content,
|
||||||
|
.reply-indicator__content {
|
||||||
|
pre,
|
||||||
|
blockquote {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
white-space: pre-wrap;
|
||||||
|
unicode-bidi: plaintext;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
code, pre {
|
||||||
|
border: 1px solid $ui-primary-color;
|
||||||
|
font-family: monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
margin: 0 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
padding: 4px 8px;
|
||||||
|
|
||||||
|
span.ellipsis::after {
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
|
span.invisible {
|
||||||
|
display: inline;
|
||||||
|
font-size: inherit;
|
||||||
|
line-height: inherit;
|
||||||
|
width: inherit;
|
||||||
|
height: inherit;
|
||||||
|
position: static;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
padding-left: 10px;
|
||||||
|
border-left: 3px solid $darker-text-color;
|
||||||
|
color: $darker-text-color;
|
||||||
|
white-space: normal;
|
||||||
|
|
||||||
|
p:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
& > ul,
|
||||||
|
& > ol {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
b,
|
||||||
|
strong {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
em,
|
||||||
|
i {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul,
|
||||||
|
ol {
|
||||||
|
margin-left: 2em;
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
list-style-type: disc;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol {
|
||||||
|
list-style-type: decimal;
|
||||||
|
}
|
||||||
|
|
||||||
|
mark {
|
||||||
|
background-color: $ui-highlight-color;
|
||||||
|
color: $ui-secondary-color;
|
||||||
|
padding: 0 2px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.reply-indicator__content {
|
||||||
|
blockquote {
|
||||||
|
border-left-color: $inverted-text-color;
|
||||||
|
color: $inverted-text-color;
|
||||||
|
}
|
||||||
|
}
|
|
@ -43,7 +43,9 @@ class TextFormatter
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
html = simple_format(html, {}, sanitize: false).delete("\n") if multiline?
|
html = markdownify(html)
|
||||||
|
|
||||||
|
# html = simple_format(html, {}, sanitize: false).delete("\n") if multiline?
|
||||||
|
|
||||||
html.html_safe # rubocop:disable Rails/OutputSafety
|
html.html_safe # rubocop:disable Rails/OutputSafety
|
||||||
end
|
end
|
||||||
|
@ -155,4 +157,50 @@ class TextFormatter
|
||||||
def preloaded_accounts?
|
def preloaded_accounts?
|
||||||
preloaded_accounts.present?
|
preloaded_accounts.present?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def markdownify(html)
|
||||||
|
# not need filter_html because escape is already done
|
||||||
|
@htmlobj ||= MyMarkdownHTML.new(
|
||||||
|
filter_html: false,
|
||||||
|
hard_wrap: false,
|
||||||
|
no_styles: true
|
||||||
|
)
|
||||||
|
@markdown ||= Redcarpet::Markdown.new(@htmlobj,
|
||||||
|
autolink: false,
|
||||||
|
tables: false,
|
||||||
|
underline: true,
|
||||||
|
disable_indented_code_blocks: false,
|
||||||
|
fenced_code_blocks: true,
|
||||||
|
highlight: false
|
||||||
|
)
|
||||||
|
@markdown.render(html)
|
||||||
|
end
|
||||||
|
|
||||||
|
class MyMarkdownHTML < Redcarpet::Render::HTML
|
||||||
|
def link(link, title, content)
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
|
||||||
|
def linebreak
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
|
||||||
|
def block_code(code, language)
|
||||||
|
"<pre>#{code}</pre>"
|
||||||
|
end
|
||||||
|
|
||||||
|
def codespan(code)
|
||||||
|
"<code>#{escape_tags(code)}</code>"
|
||||||
|
end
|
||||||
|
|
||||||
|
def header(text, header_level)
|
||||||
|
"<p>#{text}</p>"
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def escape_tags(code)
|
||||||
|
code.gsub(/</, '<').gsub(/>/, '>')
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue