Merge branch 'files_in_wiki' into 'master'
Add support to show files from wiki repository on wiki pages
This commit is contained in:
commit
e640481625
|
@ -12,9 +12,22 @@ class Projects::WikisController < Projects::ApplicationController
|
|||
|
||||
def show
|
||||
@page = @project_wiki.find_page(params[:id], params[:version_id])
|
||||
gollum_wiki = @project_wiki.wiki
|
||||
file = gollum_wiki.file(params[:id], gollum_wiki.ref, true)
|
||||
|
||||
if @page
|
||||
render 'show'
|
||||
elsif file
|
||||
if file.on_disk?
|
||||
send_file file.on_disk_path, disposition: 'inline'
|
||||
else
|
||||
send_data(
|
||||
file.raw_data,
|
||||
type: file.mime_type,
|
||||
disposition: 'inline',
|
||||
filename: file.name
|
||||
)
|
||||
end
|
||||
else
|
||||
return render('empty') unless can?(current_user, :write_wiki, @project)
|
||||
@page = WikiPage.new(@project_wiki)
|
||||
|
|
|
@ -64,7 +64,8 @@ class ProjectWiki
|
|||
#
|
||||
# Returns an initialized WikiPage instance or nil
|
||||
def find_page(title, version = nil)
|
||||
if page = wiki.page(title, version)
|
||||
page_title, page_dir = page_title_and_dir(title)
|
||||
if page = wiki.page(page_title, version, page_dir)
|
||||
WikiPage.new(self, page, true)
|
||||
else
|
||||
nil
|
||||
|
@ -90,6 +91,12 @@ class ProjectWiki
|
|||
wiki.delete_page(page, commit_details(:deleted, message, page.title))
|
||||
end
|
||||
|
||||
def page_title_and_dir(title)
|
||||
title_array = title.split("/")
|
||||
title = title_array.pop
|
||||
[title.gsub(/\.[^.]*$/, ""), title_array.join("/")]
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def create_repo!
|
||||
|
|
|
@ -175,14 +175,24 @@ class WikiPage
|
|||
end
|
||||
|
||||
def save(method, *args)
|
||||
if valid? && wiki.send(method, *args)
|
||||
@page = wiki.wiki.paged(title)
|
||||
project_wiki = wiki
|
||||
if valid? && project_wiki.send(method, *args)
|
||||
|
||||
page_details = if method == :update_page
|
||||
@page.path
|
||||
else
|
||||
title
|
||||
end
|
||||
|
||||
page_title, page_dir = project_wiki.page_title_and_dir(page_details)
|
||||
gollum_wiki = project_wiki.wiki
|
||||
@page = gollum_wiki.paged(page_title, page_dir)
|
||||
|
||||
set_attributes
|
||||
|
||||
@persisted = true
|
||||
else
|
||||
errors.add(:base, wiki.error_message) if wiki.error_message
|
||||
errors.add(:base, project_wiki.error_message) if project_wiki.error_message
|
||||
@persisted = false
|
||||
end
|
||||
@persisted
|
||||
|
|
|
@ -9,6 +9,6 @@
|
|||
%span Page slug
|
||||
= text_field_tag :new_wiki_path, nil, placeholder: 'how-to-setup', class: 'form-control', required: true, :'data-wikis-path' => project_wikis_path(@project)
|
||||
%p.hint
|
||||
Please don't use spaces and slashes
|
||||
Please don't use spaces.
|
||||
.modal-footer
|
||||
= link_to 'Build', '#', class: 'build-new-wiki btn btn-create'
|
||||
|
|
|
@ -206,7 +206,7 @@ Gitlab::Application.routes.draw do
|
|||
end
|
||||
end
|
||||
|
||||
resources :wikis, only: [:show, :edit, :destroy, :create], constraints: {id: /[a-zA-Z.0-9_\-]+/} do
|
||||
resources :wikis, only: [:show, :edit, :destroy, :create], constraints: {id: /[a-zA-Z.0-9_\-\/]+/} do
|
||||
collection do
|
||||
get :pages
|
||||
put ':id' => 'wikis#update'
|
||||
|
|
|
@ -45,3 +45,20 @@ Feature: Project Wiki
|
|||
And I browse to that Wiki page
|
||||
And I click on the "Pages" button
|
||||
Then I should see the existing page in the pages list
|
||||
|
||||
Scenario: Image in wiki repo shown on the page
|
||||
Given I have an existing Wiki page with images linked on page
|
||||
And I browse to wiki page with images
|
||||
Then Image should be shown on the page
|
||||
|
||||
Scenario: File does not exist in wiki repo
|
||||
Given I have an existing Wiki page with images linked on page
|
||||
And I browse to wiki page with images
|
||||
And I click on image link
|
||||
Then I should see the new wiki page form
|
||||
|
||||
Scenario: File exists in wiki repo
|
||||
Given I have an existing Wiki page with images linked on page
|
||||
And I browse to wiki page with images
|
||||
And I click on existing image link
|
||||
Then I should see the image from wiki repo
|
||||
|
|
|
@ -86,6 +86,45 @@ class Spinach::Features::ProjectWiki < Spinach::FeatureSteps
|
|||
page.should have_content @page.title
|
||||
end
|
||||
|
||||
Given 'I have an existing Wiki page with images linked on page' do
|
||||
wiki.create_page("pictures", "Look at this [image](image.jpg)\n\n ![image](image.jpg)", :markdown, "first commit")
|
||||
@wiki_page = wiki.find_page("pictures")
|
||||
end
|
||||
|
||||
And 'I browse to wiki page with images' do
|
||||
visit project_wiki_path(project, @wiki_page)
|
||||
end
|
||||
|
||||
And 'I click on existing image link' do
|
||||
file = Gollum::File.new(wiki.wiki)
|
||||
Gollum::Wiki.any_instance.stub(:file).with("image.jpg", "master", true).and_return(file)
|
||||
Gollum::File.any_instance.stub(:mime_type).and_return("image/jpeg")
|
||||
page.should have_link('image', href: "image.jpg")
|
||||
click_on "image"
|
||||
end
|
||||
|
||||
Then 'I should see the image from wiki repo' do
|
||||
url = URI.parse(current_url)
|
||||
url.path.should match("wikis/image.jpg")
|
||||
page.should_not have_xpath('/html') # Page should render the image which means there is no html involved
|
||||
end
|
||||
|
||||
Then 'Image should be shown on the page' do
|
||||
page.should have_xpath("//img[@src=\"image.jpg\"]")
|
||||
end
|
||||
|
||||
And 'I click on image link' do
|
||||
page.should have_link('image', href: "image.jpg")
|
||||
click_on "image"
|
||||
end
|
||||
|
||||
Then 'I should see the new wiki page form' do
|
||||
url = URI.parse(current_url)
|
||||
url.path.should match("wikis/image.jpg")
|
||||
page.should have_content('New Wiki Page')
|
||||
page.should have_content('Editing - image.jpg')
|
||||
end
|
||||
|
||||
def wiki
|
||||
@project_wiki = ProjectWiki.new(project, current_user)
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue