mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-13 14:46:05 +10:00
Merge pull request #7466 from Razer6/improve_markup_handling
Improve readme markup, fixes #7455
This commit is contained in:
@@ -222,6 +222,16 @@ module ApplicationHelper
|
||||
|
||||
def render_markup(file_name, file_content)
|
||||
GitHub::Markup.render(file_name, file_content).html_safe
|
||||
rescue RuntimeError
|
||||
simple_format(file_content)
|
||||
end
|
||||
|
||||
def markup?(filename)
|
||||
Gitlab::MarkdownHelper.markup?(filename)
|
||||
end
|
||||
|
||||
def gitlab_markdown?(filename)
|
||||
Gitlab::MarkdownHelper.gitlab_markdown?(filename)
|
||||
end
|
||||
|
||||
def spinner(text = nil, visible = false)
|
||||
|
||||
+10
-18
@@ -21,6 +21,16 @@ module TreeHelper
|
||||
tree.html_safe
|
||||
end
|
||||
|
||||
def render_readme(readme)
|
||||
if gitlab_markdown?(readme.name)
|
||||
preserve(markdown(readme.data))
|
||||
elsif markup?(readme.name)
|
||||
render_markup(readme.name, readme.data)
|
||||
else
|
||||
simple_format(readme.data)
|
||||
end
|
||||
end
|
||||
|
||||
# Return an image icon depending on the file type
|
||||
#
|
||||
# type - String type of the tree item; either 'folder' or 'file'
|
||||
@@ -38,24 +48,6 @@ module TreeHelper
|
||||
"file_#{hexdigest(content.name)}"
|
||||
end
|
||||
|
||||
# Public: Determines if a given filename is compatible with GitHub::Markup.
|
||||
#
|
||||
# filename - Filename string to check
|
||||
#
|
||||
# Returns boolean
|
||||
def markup?(filename)
|
||||
filename.downcase.end_with?(*%w(.textile .rdoc .org .creole .wiki .mediawiki
|
||||
.rst .adoc .asciidoc .asc))
|
||||
end
|
||||
|
||||
def gitlab_markdown?(filename)
|
||||
filename.downcase.end_with?(*%w(.mdown .md .markdown))
|
||||
end
|
||||
|
||||
def plain_text_readme? filename
|
||||
filename =~ /^README(.txt)?$/i
|
||||
end
|
||||
|
||||
# Simple shortcut to File.join
|
||||
def tree_join(*args)
|
||||
File.join(*args)
|
||||
|
||||
+19
-1
@@ -1,4 +1,6 @@
|
||||
class Tree
|
||||
include Gitlab::MarkdownHelper
|
||||
|
||||
attr_accessor :entries, :readme, :contribution_guide
|
||||
|
||||
def initialize(repository, sha, path = '/')
|
||||
@@ -6,7 +8,23 @@ class Tree
|
||||
git_repo = repository.raw_repository
|
||||
@entries = Gitlab::Git::Tree.where(git_repo, sha, path)
|
||||
|
||||
if readme_tree = @entries.find(&:readme?)
|
||||
available_readmes = @entries.select(&:readme?)
|
||||
|
||||
if available_readmes.count > 0
|
||||
# If there is more than 1 readme in tree, find readme which is supported
|
||||
# by markup renderer.
|
||||
if available_readmes.length > 1
|
||||
supported_readmes = available_readmes.select do |readme|
|
||||
gitlab_markdown?(readme.name) || markup?(readme.name)
|
||||
end
|
||||
|
||||
# Take the first supported readme, or the first available readme, if we
|
||||
# don't support any of them
|
||||
readme_tree = supported_readmes.first || available_readmes.first
|
||||
else
|
||||
readme_tree = available_readmes.first
|
||||
end
|
||||
|
||||
readme_path = path == '/' ? readme_tree.name : File.join(path, readme_tree.name)
|
||||
@readme = Gitlab::Git::Blob.find(git_repo, sha, readme_path)
|
||||
end
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
= markdown(@content)
|
||||
- elsif markup?(@blob.name)
|
||||
.file-content.wiki
|
||||
= raw GitHub::Markup.render(@blob.name, @content)
|
||||
= raw render_markup(@blob.name, @content)
|
||||
- else
|
||||
.file-content.code
|
||||
- unless @diff.empty?
|
||||
|
||||
@@ -3,11 +3,4 @@
|
||||
%i.icon-file
|
||||
= readme.name
|
||||
.wiki
|
||||
- if gitlab_markdown?(readme.name)
|
||||
= preserve do
|
||||
= markdown(readme.data)
|
||||
- elsif plain_text_readme?(readme.name)
|
||||
%pre.clean
|
||||
= readme.data
|
||||
- elsif markup?(readme.name)
|
||||
= render_markup(readme.name, readme.data)
|
||||
= render_readme(readme)
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
module Gitlab
|
||||
module MarkdownHelper
|
||||
module_function
|
||||
|
||||
# Public: Determines if a given filename is compatible with GitHub::Markup.
|
||||
#
|
||||
# filename - Filename string to check
|
||||
#
|
||||
# Returns boolean
|
||||
def markup?(filename)
|
||||
filename.downcase.end_with?(*%w(.textile .rdoc .org .creole .wiki
|
||||
.mediawiki .rst .adoc .asciidoc .asc))
|
||||
end
|
||||
|
||||
# Public: Determines if a given filename is compatible with
|
||||
# GitLab-flavored Markdown.
|
||||
#
|
||||
# filename - Filename string to check
|
||||
#
|
||||
# Returns boolean
|
||||
def gitlab_markdown?(filename)
|
||||
filename.downcase.end_with?(*%w(.mdown .md .markdown))
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,16 +0,0 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe TreeHelper do
|
||||
describe '#markup?' do
|
||||
%w(textile rdoc org creole wiki mediawiki
|
||||
rst adoc asciidoc asc).each do |type|
|
||||
it "returns true for #{type} files" do
|
||||
markup?("README.#{type}").should be_true
|
||||
end
|
||||
end
|
||||
|
||||
it "returns false when given a non-markup filename" do
|
||||
markup?('README.rb').should_not be_true
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,28 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe Gitlab::MarkdownHelper do
|
||||
describe '#markup?' do
|
||||
%w(textile rdoc org creole wiki
|
||||
mediawiki rst adoc asciidoc asc).each do |type|
|
||||
it "returns true for #{type} files" do
|
||||
Gitlab::MarkdownHelper.markup?("README.#{type}").should be_true
|
||||
end
|
||||
end
|
||||
|
||||
it 'returns false when given a non-markup filename' do
|
||||
Gitlab::MarkdownHelper.markup?('README.rb').should_not be_true
|
||||
end
|
||||
end
|
||||
|
||||
describe '#gitlab_markdown?' do
|
||||
%w(mdown md markdown).each do |type|
|
||||
it "returns true for #{type} files" do
|
||||
Gitlab::MarkdownHelper.gitlab_markdown?("README.#{type}").should be_true
|
||||
end
|
||||
end
|
||||
|
||||
it 'returns false when given a non-markdown filename' do
|
||||
Gitlab::MarkdownHelper.gitlab_markdown?('README.rb').should_not be_true
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user