[#issue 64] Routes to Wiki and some methods in controller.

Useless yet.
This commit is contained in:
George Vinogradov 2011-12-26 21:07:16 +04:00
parent 81378478ca
commit ec95373d28
2 changed files with 126 additions and 0 deletions

View File

@ -1,8 +1,28 @@
require 'cgi'
class WikiController < ApplicationController class WikiController < ApplicationController
WIKI_OPTIONS = {:page_file_dir => '/', :ref => 'master'}
load_and_authorize_resource :project
before_filter :get_wiki
def index def index
@name = 'Home'
if page = @wiki.page(@name)
@page = page
@content = page.formatted_data
@editable = true
render :show
else
render :new
end
end end
def show def show
@name = params[:id]
rev = params[:rev] ? params[:rev] : nil
end end
def edit def edit
@ -15,5 +35,93 @@ class WikiController < ApplicationController
end end
def create def create
@name = params[:name]
format = params[:format].intern
begin
@wiki.write_page(@name, format, params[:content], commit_message)
redirect project_wiki_path(@project, @name)
rescue Gollum::DuplicatePageError => e
@message = "Duplicate page: #{@name}"
render :action => :new
end
end end
def destroy
end
def compare
@name = params[:id]
if request.post?
@versions = params[:versions] || []
if @versions.size < 2
redirect_to history_project_wiki_path(@project, CGI.escape(@name))
else
redirect_to compare_versions_project_wiki_path(@project, CGI.escape(@name),
sprintf('%s...%s', @versions.last, @versions.first))
end
elsif request.get?
@versions = params[:versions].split(/\.{2,3}/)
@page = @wiki.page(@name)
diffs = @wiki.repo.diff(@versions.first, @versions.last, @page.path)
@diff = diffs.first
render :compare
else
redirect_to project_wiki_path(@project, CGI.escape(@name))
end
end
def revert
@name = params[:id]
@page = @wiki.page(@name)
sha1 = params[:sha1]
sha2 = params[:sha2]
if @wiki.revert_page(@page, sha1, sha2, commit_message)
redirect_to project_wiki_path(@project, "#{CGI.escape(@name)}")
else
sha2, sha1 = sha1, "#{sha1}^" if !sha2
@versions = [sha1, sha2]
diffs = @wiki.repo.diff(@versions.first, @versions.last, @page.path)
@diff = diffs.first
@message = "The patch does not apply."
render :compare
end
end
def preview
@name = 'Preview'
@page = @wiki.preview_page(@name, params[:content], params[:format])
@content = @page.formatted_data
@editable = false
render :show
end
def history
@name = params[:name]
@page = @wiki.page(@name)
@versions = @page.versions :page => params[:page] #try to use will_paginate
end
def search
@query = params[:q]
@results = @wiki.search @query
@name = @query
end
def pages
@results = @wiki.pages
@ref = @wiki.ref
end
protected
def get_wiki
@wiki = Gollum::Wiki.new(@project.wiki_path, WIKI_OPTIONS.merge(:base_path => project_wiki_path(@project)))
end
def commit_message
{ :message => params[:message] }
end
end end

View File

@ -86,6 +86,24 @@ Rosa::Application.routes.draw do
resources :projects do resources :projects do
resource :repo, :controller => "git/repositories", :only => [:show] resource :repo, :controller => "git/repositories", :only => [:show]
resources :wiki do
collection do
# Uncomment if gollum can revert page without name
# match 'revert/:sha1/:sha2' => 'wiki#revert', :as => :revert, :via => :get, :constrains => {:sha1 => /[0-9a-f]{40}/, :sha2 => /[0-9a-f]{40}/}
post :preview
get :search
get :pages
end
member do
match 'revert/:sha1/:sha2' => 'wiki#revert', :as => :revert_page, :via => :get
match ':rev' => 'wiki#show', :as => :versioned, :via => :get
get :history
post :compare
match 'compare/*versions' => 'wiki#compare', :as => :compare_versions, :via => :get
end
end
resources :build_lists, :only => [:index, :show] do resources :build_lists, :only => [:index, :show] do
collection do collection do
get :recent get :recent