Make the 'New Page' button create pages in sub directories if the user puts a slash in the path/page name.
This commit is contained in:
@@ -126,17 +126,21 @@ module Precious
|
||||
|
||||
redirect "/#{page.escaped_url_path}"
|
||||
end
|
||||
|
||||
|
||||
get '/create/*' do
|
||||
wiki = Gollum::Wiki.new(settings.gollum_path, settings.wiki_options)
|
||||
@name = params[:splat].first
|
||||
if wiki.page(@name)
|
||||
redirect "/#{CGI.escape(@name)}"
|
||||
@path = extract_path(params[:splat].first)
|
||||
@name = extract_name(params[:splat].first)
|
||||
wiki_options = settings.wiki_options.merge({ :page_file_dir => @path })
|
||||
wiki = Gollum::Wiki.new(settings.gollum_path, wiki_options)
|
||||
|
||||
page = wiki.page(@name)
|
||||
if page
|
||||
redirect "/#{page.escaped_url_path}"
|
||||
else
|
||||
mustache :create
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
post '/create' do
|
||||
name = params[:page]
|
||||
path = sanitize_empty_params(params[:path])
|
||||
@@ -311,7 +315,8 @@ module Precious
|
||||
content_type file.mime_type
|
||||
file.raw_data
|
||||
else
|
||||
redirect "/create/#{CGI.escape(name)}"
|
||||
page_path = [path, name].compact.join('/')
|
||||
redirect "/create/#{CGI.escape(page_path).gsub('%2F','/')}"
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -101,27 +101,28 @@ $(document).ready(function() {
|
||||
$('#minibutton-new-page').removeClass('jaws');
|
||||
$('#minibutton-new-page').click(function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var path = $(this).data('path');
|
||||
if (path) {
|
||||
path = path + '/';
|
||||
}
|
||||
|
||||
$.GollumDialog.init({
|
||||
title: 'Create New Page',
|
||||
fields: [
|
||||
{
|
||||
id: 'name',
|
||||
name: 'Page Name',
|
||||
type: 'text'
|
||||
type: 'text',
|
||||
defaultValue: path || ''
|
||||
}
|
||||
],
|
||||
OK: function( res ) {
|
||||
var name = 'New Page';
|
||||
if ( res['name'] ) {
|
||||
var name = res['name'];
|
||||
name = res['name'];
|
||||
}
|
||||
|
||||
var url = '';
|
||||
var path = $('#minibutton-new-page').data('path');
|
||||
if (path) {
|
||||
url += '/' + encodeURIComponent(path)
|
||||
}
|
||||
window.location = url + '/' + encodeURIComponent(name);
|
||||
window.location = '/' + encodeURIComponent(name);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
+5
-46
@@ -116,12 +116,6 @@ context "Frontend" do
|
||||
assert_equal 'http://example.org/Title-with-spaces', last_response.headers['Location']
|
||||
get "/Title-with-spaces"
|
||||
assert_match /abc/, last_response.body
|
||||
|
||||
post "/create", :content => 'ghi', :page => 'Title/with/slashes',
|
||||
:format => 'markdown', :message => 'bar'
|
||||
assert_equal 'http://example.org/Title-with-slashes', last_response.headers['Location']
|
||||
get "/Title-with-slashes"
|
||||
assert_match /ghi/, last_response.body
|
||||
end
|
||||
|
||||
test "redirects to create on non-existant page" do
|
||||
@@ -138,7 +132,7 @@ context "Frontend" do
|
||||
follow_redirect!
|
||||
assert_equal "/create/#{name}", last_request.fullpath
|
||||
assert last_response.ok?
|
||||
end
|
||||
end
|
||||
|
||||
test "create redirects to page if already exists" do
|
||||
name = "A"
|
||||
@@ -147,7 +141,7 @@ context "Frontend" do
|
||||
assert_equal "/#{name}", last_request.fullpath
|
||||
assert last_response.ok?
|
||||
end
|
||||
|
||||
|
||||
test "guards against creation of existing page" do
|
||||
name = "A"
|
||||
post "/create", :content => 'abc', :page => name,
|
||||
@@ -216,41 +210,6 @@ context "Frontend" do
|
||||
end
|
||||
end
|
||||
|
||||
# WTF? Surely this test is wrong...
|
||||
# In this test repo there is already a file called 'bar.md'.
|
||||
# This SHOULD raise a Duplicate Page error, no?
|
||||
# context "Frontend with page-file-dir" do
|
||||
# include Rack::Test::Methods
|
||||
|
||||
# setup do
|
||||
# @path = cloned_testpath("examples/page_file_dir.git")
|
||||
# @wiki = Gollum::Wiki.new(@path, { :page_file_dir => "docs" })
|
||||
# Precious::App.set(:gollum_path, @path)
|
||||
# Precious::App.set(:wiki_options, { :page_file_dir => "docs" })
|
||||
# end
|
||||
|
||||
# teardown do
|
||||
# FileUtils.rm_rf(@path)
|
||||
# end
|
||||
|
||||
# test "open existing parent" do
|
||||
# get "/"
|
||||
# assert last_response.ok?
|
||||
|
||||
# post "/create", :content => "asdf", :page => "bar",
|
||||
# :format => 'markdown'
|
||||
# follow_redirect!
|
||||
# assert last_response.ok?
|
||||
|
||||
# # Assert not match.
|
||||
# assert_equal true, /Duplicate page/.match(last_response.body) == nil
|
||||
# end
|
||||
|
||||
# def app
|
||||
# Precious::App
|
||||
# end
|
||||
# end
|
||||
|
||||
context "Frontend with lotr" do
|
||||
include Rack::Test::Methods
|
||||
|
||||
@@ -320,10 +279,10 @@ context "Frontend with lotr" do
|
||||
get "/Mordor/Orc"
|
||||
assert_match /big smelly creatures/, last_response.body
|
||||
|
||||
post "/create", :content => 'really big smelly creatures', :page => 'Orc/Uruk-hai',
|
||||
post "/create", :content => 'really big smelly creatures', :page => 'Uruk Hai',
|
||||
:path => 'Mordor', :format => 'markdown', :message => 'oooh, very scary'
|
||||
assert_equal 'http://example.org/Mordor/Orc-Uruk-hai', last_response.headers['Location']
|
||||
get "/Mordor/Orc-Uruk-hai"
|
||||
assert_equal 'http://example.org/Mordor/Uruk-Hai', last_response.headers['Location']
|
||||
get "/Mordor/Uruk-Hai"
|
||||
assert_match /really big smelly creatures/, last_response.body
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user