How can I define variable with redcarpet inherit Class in the bitnami redmine
Added by walkwolf reaper over 8 years ago
I used bitinami redmine 3.2.0 . And use markdown wiki which integration redcarpet v3.3.3 in.
I want a auto-number list,like this
1. title xx ( leve 1)
2. title xx ( leve 1)
2.1 title xx ( leve 2)
2.2 title xx ( leve 2)
3 title xx ( leve 1)
by modify the `/home/redmine/redmine-3.2.0-0/apps/redmine/htdocs/lib/redmine/wiki_formatting/markdown`
When I refresh the Wiki in redmine. I got
1. title xx ( leve 1)
2. title xx ( leve 1)
2.1 title xx ( leve 2)
2.2 title xx ( leve 2)
3 title xx ( leve 1)
#refresh
4. title xx ( leve 1)
5. title xx ( leve 1)
5.1 title xx ( leve 2)
5.2 title xx ( leve 2)
6 title xx ( leve 1)
#refresh
7. title xx ( leve 1)
8. title xx ( leve 1)
8.1 title xx ( leve 2)
8.2 title xx ( leve 2)
9 title xx ( leve 1)
and so on
Any help thanks.
`/home/redmine/redmine-3.2.0-0/apps/redmine/htdocs/lib/redmine/wiki_formatting/markdown`
require 'cgi'
module Redmine
module WikiFormatting
module Markdown
class HTML < Redcarpet::Render::HTML
include ActionView::Helpers::TagHelper
# ---------My code begin---------
def ms_header(header_level)
if @ms_titles_hash==nil
@ms_titles_hash = {1=>0,2=>0,3=>0,4=>0,5=>0,6=>0}
end
@ms_titles_hash[header_level]+=1
@ms_titles_hash.each do |k,v|
if k > header_level
@ms_titles_hash[k]=0
end
end
str=""
@ms_titles_hash.each do |k,v|
if k <= header_level
if k!=1
str<<"."
end
str<<@ms_titles_hash[k].to_s
end
end
return str
end
def header(text, header_level)
return "<h#{header_level}>#{ms_header(header_level)}. #{text}</h#{header_level}>"
#return "<h3>#{text}</h3>"
end
# --------My code end----------
def link(link, title, content)
css = nil
unless link && link.starts_with?('/')
css = 'external'
end
content_tag('a', content.to_s.html_safe, :href => link, :title => title, :class => css)
end
def block_code(code, language)
if language.present?
"<>>pre>" +
Redmine::SyntaxHighlighting.highlight_by_language(code, language) +
"<>>/code></>>pre>"
else
"<>>pre>" + CGI.escapeHTML(code) + "</>>pre>"
end
end
end
class Formatter
def initialize(text)
@text = text
end
def to_html(*args)
html = formatter.render(@text)
# restore wiki links eg. [[Foo]]
html.gsub!(%r{\[<a href="(.*?)">(.*?)</a>\]}) do
"[[#{$2}]]"
end
# restore Redmine links with double-quotes, eg. version:"1.0"
html.gsub!(/(\w):"(.+?)"/) do
"#{$1}:\"#{$2}\""
end
html
end
def get_section(index)
section = extract_sections(index)[1]
hash = Digest::MD5.hexdigest(section)
return section, hash
end
def update_section(index, update, hash=nil)
t = extract_sections(index)
if hash.present? && hash != Digest::MD5.hexdigest(t[1])
raise Redmine::WikiFormatting::StaleSectionError
end
t[1] = update unless t[1].blank?
t.reject(&:blank?).join "\n\n"
end
def extract_sections(index)
sections = ['', '', '']
offset = 0
i = 0
l = 1
inside_pre = false
@text.split(/(^(?:.+\r?\n\r?(?:\=+|\-+)|#+.+|~~~.*)\s*$)/).each do |part|
level = nil
if part =~ /\A~{3,}(\S+)?\s*$/
if $1
if !inside_pre
inside_pre = true
end
else
inside_pre = !inside_pre
end
elsif inside_pre
# nop
elsif part =~ /\A(#+).+/
level = $1.size
elsif part =~ /\A.+\r?\n\r?(\=+|\-+)\s*$/
level = $1.include?('=') ? 1 : 2
end
if level
i += 1
if offset == 0 && i == index
# entering the requested section
offset = 1
l = level
elsif offset == 1 && i > index && level <= l
# leaving the requested section
offset = 2
end
end
sections[offset] << part
end
sections.map(&:strip)
end
private
def formatter
@@formatter ||= Redcarpet::Markdown.new(
Redmine::WikiFormatting::Markdown::HTML.new(
:filter_html => true,
:hard_wrap => true
),
:autolink => true,
:fenced_code_blocks => true,
:space_after_headers => true,
:tables => true,
:strikethrough => true,
:superscript => true,
:no_intra_emphasis => true,
:footnotes => true,
:highlight => true,
:with_toc_data => true
)
end
end
end
end
end