Add support for RFC 1738 special characters in page names.
Escape all links and redirects to support this. Some changes to app.rb necessary for correct routing by Sinatra.
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
require 'cgi'
|
||||||
require 'sinatra'
|
require 'sinatra'
|
||||||
require 'gollum'
|
require 'gollum'
|
||||||
require 'mustache/sinatra'
|
require 'mustache/sinatra'
|
||||||
@@ -39,8 +40,8 @@ module Precious
|
|||||||
show_page_or_file('Home')
|
show_page_or_file('Home')
|
||||||
end
|
end
|
||||||
|
|
||||||
get '/edit/:name' do
|
get '/edit/*' do
|
||||||
@name = params[:name]
|
@name = params[:splat].first
|
||||||
wiki = Gollum::Wiki.new(settings.gollum_path)
|
wiki = Gollum::Wiki.new(settings.gollum_path)
|
||||||
if page = wiki.page(@name)
|
if page = wiki.page(@name)
|
||||||
@page = page
|
@page = page
|
||||||
@@ -51,8 +52,8 @@ module Precious
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
post '/edit/:name' do
|
post '/edit/*' do
|
||||||
name = params[:name]
|
name = params[:splat].first
|
||||||
wiki = Gollum::Wiki.new(settings.gollum_path)
|
wiki = Gollum::Wiki.new(settings.gollum_path)
|
||||||
page = wiki.page(name)
|
page = wiki.page(name)
|
||||||
format = params[:format].intern
|
format = params[:format].intern
|
||||||
@@ -60,10 +61,10 @@ module Precious
|
|||||||
|
|
||||||
wiki.update_page(page, name, format, params[:content], commit_message)
|
wiki.update_page(page, name, format, params[:content], commit_message)
|
||||||
|
|
||||||
redirect "/#{Gollum::Page.cname name}"
|
redirect "/#{CGI.escape(Gollum::Page.cname(name))}"
|
||||||
end
|
end
|
||||||
|
|
||||||
post '/create/:name' do
|
post '/create/*' do
|
||||||
name = params[:page]
|
name = params[:page]
|
||||||
wiki = Gollum::Wiki.new(settings.gollum_path)
|
wiki = Gollum::Wiki.new(settings.gollum_path)
|
||||||
|
|
||||||
@@ -71,7 +72,7 @@ module Precious
|
|||||||
|
|
||||||
begin
|
begin
|
||||||
wiki.write_page(name, format, params[:content], commit_message)
|
wiki.write_page(name, format, params[:content], commit_message)
|
||||||
redirect "/#{name}"
|
redirect "/#{CGI.escape(name)}"
|
||||||
rescue Gollum::DuplicatePageError => e
|
rescue Gollum::DuplicatePageError => e
|
||||||
@message = "Duplicate page: #{e.message}"
|
@message = "Duplicate page: #{e.message}"
|
||||||
mustache :error
|
mustache :error
|
||||||
@@ -97,10 +98,10 @@ module Precious
|
|||||||
post '/compare/:name' do
|
post '/compare/:name' do
|
||||||
@versions = params[:versions] || []
|
@versions = params[:versions] || []
|
||||||
if @versions.size < 2
|
if @versions.size < 2
|
||||||
redirect "/history/#{params[:name]}"
|
redirect "/history/#{CGI.escape(params[:name])}"
|
||||||
else
|
else
|
||||||
redirect "/compare/%s/%s...%s" % [
|
redirect "/compare/%s/%s...%s" % [
|
||||||
params[:name],
|
CGI.escape(params[:name]),
|
||||||
@versions.last,
|
@versions.last,
|
||||||
@versions.first]
|
@versions.first]
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<div class="guide">
|
<div class="guide">
|
||||||
<div class="main">
|
<div class="main">
|
||||||
<div class="actions">
|
<div class="actions">
|
||||||
<a href="/{{name}}">« Back</a>
|
<a href="/{{escaped_name}}">« Back</a>
|
||||||
</div>
|
</div>
|
||||||
<h1>{{title}}: {{before}} → {{after}}</h1>
|
<h1>{{title}}: {{before}} → {{after}}</h1>
|
||||||
<div id="files">
|
<div id="files">
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<a href="/">« Home</a>
|
<a href="/">« Home</a>
|
||||||
<h1>{{title}}</h1>
|
<h1>{{title}}</h1>
|
||||||
|
|
||||||
<form class="new_wiki" method="post" action="/create/{{name}}">
|
<form class="new_wiki" method="post" action="/create/{{escaped_name}}">
|
||||||
<div>
|
<div>
|
||||||
<label>
|
<label>
|
||||||
Title<br />
|
Title<br />
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<div class="write">
|
<div class="write">
|
||||||
<a href="/{{name}}">« Back</a>
|
<a href="/{{escaped_name}}">« Back</a>
|
||||||
<h1>{{title}}</h1>
|
<h1>{{title}}</h1>
|
||||||
|
|
||||||
<form class="edit_wiki" method="post" action="/edit/{{name}}">
|
<form class="edit_wiki" method="post" action="/edit/{{escaped_name}}">
|
||||||
<div>
|
<div>
|
||||||
<label>
|
<label>
|
||||||
Title<br />
|
Title<br />
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
<div class="guide">
|
<div class="guide">
|
||||||
<div class="main">
|
<div class="main">
|
||||||
<div class="actions">
|
<div class="actions">
|
||||||
<a href="/{{name}}">« Back</a>
|
<a href="/{{escaped_name}}">« Back</a>
|
||||||
</div>
|
</div>
|
||||||
<h1>{{title}}</h1>
|
<h1>{{title}}</h1>
|
||||||
<form id="history" method="post" action="/compare/{{name}}">
|
<form id="history" method="post" action="/compare/{{escaped_name}}">
|
||||||
<table class="commits" cellpadding="0" cellspacing="0">
|
<table class="commits" cellpadding="0" cellspacing="0">
|
||||||
<tr>
|
<tr>
|
||||||
<th colspan="5">
|
<th colspan="5">
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
<input name="versions[]" type="checkbox" value="{{id}}" />
|
<input name="versions[]" type="checkbox" value="{{id}}" />
|
||||||
</td>
|
</td>
|
||||||
<td class="sha">
|
<td class="sha">
|
||||||
<a href="/{{name}}/{{id}}">{{id7}}</a>
|
<a href="/{{escaped_name}}/{{id}}">{{id7}}</a>
|
||||||
</td>
|
</td>
|
||||||
<td nowrap class="author">
|
<td nowrap class="author">
|
||||||
<img src="http://www.gravatar.com/avatar/{{gravatar}}?s=16" alt="Gravatar" />
|
<img src="http://www.gravatar.com/avatar/{{gravatar}}?s=16" alt="Gravatar" />
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<div class="guide">
|
<div class="guide">
|
||||||
<div class="main">
|
<div class="main">
|
||||||
<div class="actions">
|
<div class="actions">
|
||||||
<a href="/">Home</a> | <a href="/edit/{{name}}">Edit</a>
|
<a href="/">Home</a> | <a href="/edit/{{escaped_name}}">Edit</a>
|
||||||
</div>
|
</div>
|
||||||
<h1>{{title}}</h1>
|
<h1>{{title}}</h1>
|
||||||
<div class="content wikistyle gollum {{format}}">
|
<div class="content wikistyle gollum {{format}}">
|
||||||
@@ -18,10 +18,10 @@
|
|||||||
<div style="float: left;">
|
<div style="float: left;">
|
||||||
<small>Last edited by <b>{{author}}</b>, {{date}}</small>
|
<small>Last edited by <b>{{author}}</b>, {{date}}</small>
|
||||||
<div class="actions">
|
<div class="actions">
|
||||||
<a href="/">Home</a> | <a href="/edit/{{name}}">Edit</a>
|
<a href="/">Home</a> | <a href="/edit/{{escaped_name}}">Edit</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="float: right;">
|
<div style="float: right;">
|
||||||
<a href="/history/{{name}}">View Revision History</a>
|
<a href="/history/{{escaped_name}}">View Revision History</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
require 'cgi'
|
||||||
|
|
||||||
module Precious
|
module Precious
|
||||||
module Views
|
module Views
|
||||||
class Layout < Mustache
|
class Layout < Mustache
|
||||||
@@ -6,6 +8,10 @@ module Precious
|
|||||||
|
|
||||||
attr_reader :name
|
attr_reader :name
|
||||||
|
|
||||||
|
def escaped_name
|
||||||
|
CGI.escape(@name)
|
||||||
|
end
|
||||||
|
|
||||||
def title
|
def title
|
||||||
"Home"
|
"Home"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
require 'digest/sha1'
|
require 'digest/sha1'
|
||||||
|
require 'cgi'
|
||||||
|
|
||||||
module Gollum
|
module Gollum
|
||||||
class Markup
|
class Markup
|
||||||
@@ -267,10 +268,10 @@ module Gollum
|
|||||||
%{<a href="#{name}">#{name}</a>}
|
%{<a href="#{name}">#{name}</a>}
|
||||||
else
|
else
|
||||||
if page = @wiki.page(cname)
|
if page = @wiki.page(cname)
|
||||||
link = ::File.join(@wiki.base_path, Page.cname(page.name))
|
link = ::File.join(@wiki.base_path, CGI.escape(Page.cname(page.name)))
|
||||||
presence = "present"
|
presence = "present"
|
||||||
else
|
else
|
||||||
link = ::File.join(@wiki.base_path, cname)
|
link = ::File.join(@wiki.base_path, CGI.escape(cname))
|
||||||
presence = "absent"
|
presence = "absent"
|
||||||
end
|
end
|
||||||
%{<a class="internal #{presence}" href="#{link}">#{name}</a>}
|
%{<a class="internal #{presence}" href="#{link}">#{name}</a>}
|
||||||
|
|||||||
Reference in New Issue
Block a user