Add redirect support (e.g., after renames). Fixes #1023.

This commit is contained in:
Bart Kamphorst
2019-10-05 13:32:28 +02:00
parent 8fe4c614db
commit 8f104ec09c
3 changed files with 30 additions and 9 deletions
+16 -6
View File
@@ -158,15 +158,15 @@ module Precious
end
end
get %r{/(edit|create)/(custom|mathjax\.config)\.(js|css)} do
get %r{/(edit|create)/(\.redirects.gollum|(custom|mathjax\.config)\.(js|css))} do
forbid('Changing this resource is not allowed.')
end
post %r{/(delete|rename|edit|create)/(custom|mathjax\.config)\.(js|css)} do
post %r{/(delete|rename|edit|create)/(\.redirects.gollum|(custom|mathjax\.config)\.(js|css))} do
forbid('Changing this resource is not allowed.')
end
post %r{/revert/(custom|mathjax\.config\.)\.(js|css)/.*/.*} do
post %r{/revert/(\.redirects.gollum|(custom|mathjax\.config\.)\.(js|css)/.*/.*)} do
forbid('Changing this resource is not allowed.')
end
@@ -274,9 +274,13 @@ module Precious
return
end
committer.commit
# Renaming preserves format, so add the page's format to the renamed path to retrieve the renamed page
page = wiki_page("#{rename}.#{Gollum::Page.format_to_ext(page.format)}").page
new_path = "#{rename}.#{Gollum::Page.format_to_ext(page.format)}"
# Add a redirect from the old page to the new
wiki.add_redirect(page.url_path, new_path.gsub(/(^\/)/, ''))
page = wiki_page(new_path).page
return if page.nil?
redirect to("/#{page.escaped_url_path}")
end
@@ -496,7 +500,7 @@ module Precious
@newable = true
mustache :overview
end
end
end # gollum namespace
get %r{/(.+?)/([0-9a-f]{40})} do
file_path = params[:captures][0]
@@ -520,6 +524,10 @@ module Precious
end
end
get '/\.redirects\.gollum' do
forbid('Accessing this resource is not allowed.')
end
get '/*' do
show_page_or_file(params[:splat].first)
end
@@ -545,6 +553,8 @@ module Precious
mustache :page
elsif file = wiki.file(fullpath, wiki.ref, true)
show_file(file)
elsif redirect_path = wiki.redirects[fullpath]
redirect to("#{encodeURIComponent(redirect_path)}?redirected_from=#{encodeURIComponent(fullpath)}")
else
if @allow_editing
path = fullpath[-1] == '/' ? "#{fullpath}#{wiki.index_page}" : fullpath # Append default index page if no page name is supplied
@@ -102,6 +102,12 @@ function preparePage () {
}
}
function flashNotice(type, notice) {
// accepted types: info, success, warn, error
html = '<p><div class="flash flash-' + type +'"><button class="flash-close js-flash-close" type="button" onclick="parentNode.remove()"><%=rocticon('x')%></button>' + notice + '</div></p>';
$('#wiki-content h1').before(html);
}
// ua
$(document).ready(function() {
// for deleting the current page
@@ -148,6 +154,11 @@ $(document).ready(function() {
}
}
if (match = new RegExp(/\?redirected\_from=([^?]*)/).exec(window.location.href)) {
notice = "The page you requested was renamed or moved. You've been successfully redirected to its new location.";
flashNotice('success', notice);
}
if ($('#minibutton-upload-page').length) {
new ClipboardJS('#ClipboardJSlink');
$('#minibutton-upload-page').parent().removeClass('jaws');
+3 -3
View File
@@ -169,7 +169,7 @@ context "Frontend" do
assert_nil @wiki.page("B")
page_2 = @wiki.page('C')
assert_equal "INITIAL\n\nSPAM2\n", page_2.raw_data
assert_equal 'def', page_2.version.message
assert_equal 'def', page_2.last_version.message
assert_not_equal page_1.version.sha, page_2.version.sha
end
@@ -216,7 +216,7 @@ context "Frontend" do
assert_nil @wiki.page("G/H")
page_2 = @wiki.page('I/C')
assert_equal "INITIAL\n\nSPAM2\n", page_2.raw_data
assert_equal 'def', page_2.version.message
assert_equal 'def', page_2.last_version.message
assert_not_equal page_1.version.sha, page_2.version.sha
end
@@ -233,7 +233,7 @@ context "Frontend" do
assert_nil @wiki.page("G/H")
page_2 = @wiki.page('G/K/C')
assert_equal "INITIAL\n\nSPAM2\n", page_2.raw_data
assert_equal 'def', page_2.version.message
assert_equal 'def', page_2.last_version.message
assert_not_equal page_1.version.sha, page_2.version.sha
end