From 454b5e94dce5c82362b86f69697bdcf0bd6ee37e Mon Sep 17 00:00:00 2001 From: Bart Kamphorst Date: Wed, 17 Oct 2018 22:18:23 +0200 Subject: [PATCH 1/4] Unify deletion routes. Closes #1332. --- lib/gollum/app.rb | 41 ++++++++----------- .../public/gollum/javascript/gollum.js.erb | 8 +++- lib/gollum/views/helpers.rb | 1 - lib/gollum/views/pages.rb | 2 +- test/test_app.rb | 6 +-- 5 files changed, 26 insertions(+), 32 deletions(-) diff --git a/lib/gollum/app.rb b/lib/gollum/app.rb index 42191d67..59fc3da3 100644 --- a/lib/gollum/app.rb +++ b/lib/gollum/app.rb @@ -153,7 +153,7 @@ module Precious forbid('Changing this resource is not allowed.') end - post %r{/(deleteFile|rename|edit|create)/custom\.(js|css)} do + post %r{/(delete|rename|edit|create)/custom\.(js|css)} do forbid('Changing this resource is not allowed.') end @@ -229,18 +229,6 @@ module Precious end end - post '/deleteFile/*' do - forbid unless @allow_editing - wiki = wiki_new - filepath = params[:splat].first - unless filepath.nil? - commit = commit_message - commit[:message] = "Deleted #{filepath}" - wiki.delete_file(filepath, commit) - end - - redirect_to('/pages') - end post '/rename/*' do wikip = wiki_page(params[:splat].first) @@ -296,20 +284,23 @@ module Precious redirect to("/#{page.escaped_url_path}") unless page.nil? end - get '/delete/*' do - forbid unless @allow_editing - wikip = wiki_page(params[:splat].first) - name = join_page_name(wikip.name, wikip.ext) - wiki = wikip.wiki - page = wikip.page - unless page.nil? - commit = commit_message - commit[:message] = "Destroyed #{name} (#{page.format})" - wiki.delete_page(page, commit) - end - redirect to('/') + post '/delete/*' do + $stderr.puts "[DELETE] DELETE WAS CALLED" + forbid unless @allow_editing + wiki = wiki_new + filepath = params[:splat].first + $stderr.puts "[DELETE] for file #{filepath}" + unless filepath.nil? + commit = commit_message + commit[:message] = "Deleted #{filepath}" + $stderr.puts "[DELETE] About to call wiki.delete_file" + wiki.delete_file(filepath, commit) + end + $stderr.puts "[DELETE] dunzo" + redirect_to('/pages') end + get '/create/*' do forbid unless @allow_editing diff --git a/lib/gollum/public/gollum/javascript/gollum.js.erb b/lib/gollum/public/gollum/javascript/gollum.js.erb index b3dd8161..678b6400 100755 --- a/lib/gollum/public/gollum/javascript/gollum.js.erb +++ b/lib/gollum/public/gollum/javascript/gollum.js.erb @@ -47,8 +47,12 @@ $(document).ready(function() { $('#delete-link').click( function(e) { var ok = confirm($(this).data('confirm')); if ( ok ) { - var loc = '<%= delete_path %>/' + pageFullPath; - window.location = loc; + $.post('<%=delete_path %>/' + pageFullPath, + {}, + function (result) { + // page successfully deleted, return to landing page + window.location = '/'; + }); } // Don't navigate on cancel. e.preventDefault(); diff --git a/lib/gollum/views/helpers.rb b/lib/gollum/views/helpers.rb index 20bf1a18..fecd46a1 100644 --- a/lib/gollum/views/helpers.rb +++ b/lib/gollum/views/helpers.rb @@ -10,7 +10,6 @@ module Precious upload_file: 'uploadFile', create: 'create', delete: 'delete', - delete_file: 'deleteFile', edit: 'edit', pages: 'pages', history: 'history', diff --git a/lib/gollum/views/pages.rb b/lib/gollum/views/pages.rb index c7076957..6759bc60 100644 --- a/lib/gollum/views/pages.rb +++ b/lib/gollum/views/pages.rb @@ -31,7 +31,7 @@ module Precious def delete_file(url) - %Q(
) + %Q(
) end def files_folders diff --git a/test/test_app.rb b/test/test_app.rb index 16637976..207c1e7e 100644 --- a/test/test_app.rb +++ b/test/test_app.rb @@ -298,7 +298,7 @@ context "Frontend" do @wiki.clear_cache get "/gollum/create/TT" assert last_response.ok? - get '/gollum/delete/_Template' + post '/gollum/delete/_Template' Precious::App.set(:wiki_options, { :template_page => false }) end @@ -379,7 +379,7 @@ context "Frontend" do page = @wiki.page(name) assert_equal 'abc', page.raw_data - get '/gollum/delete/' + name + post "/gollum/delete/#{page.filename}" @wiki.clear_cache page = @wiki.page(name) @@ -515,7 +515,7 @@ context "Frontend" do end end - ['deleteFile', 'rename', 'edit', 'create'].each do |route| + ['delete', 'rename', 'edit', 'create'].each do |route| ['.css', '.js'].each do |ext| post "/gollum/#{route}/custom#{ext}" assert_equal 403, last_response.status, "post /gollum/#{route}/custom#{ext} -- #{last_response.inspect}" From 825f43c42950a94b525a63771a09fe69b4056ad9 Mon Sep 17 00:00:00 2001 From: Bart Kamphorst Date: Wed, 17 Oct 2018 22:24:05 +0200 Subject: [PATCH 2/4] Remove debug statements. --- lib/gollum/app.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib/gollum/app.rb b/lib/gollum/app.rb index 59fc3da3..f08a1816 100644 --- a/lib/gollum/app.rb +++ b/lib/gollum/app.rb @@ -286,18 +286,14 @@ module Precious post '/delete/*' do - $stderr.puts "[DELETE] DELETE WAS CALLED" forbid unless @allow_editing wiki = wiki_new filepath = params[:splat].first - $stderr.puts "[DELETE] for file #{filepath}" unless filepath.nil? commit = commit_message commit[:message] = "Deleted #{filepath}" - $stderr.puts "[DELETE] About to call wiki.delete_file" wiki.delete_file(filepath, commit) end - $stderr.puts "[DELETE] dunzo" redirect_to('/pages') end From 1a8b6d6823e5157d6475e9f7b089f0361046c2c4 Mon Sep 17 00:00:00 2001 From: Bart Kamphorst Date: Fri, 19 Oct 2018 21:04:31 +0200 Subject: [PATCH 3/4] Implement AJAX deletion in /pages in order to remove redirect in /delete route. --- lib/gollum/app.rb | 1 - .../public/gollum/javascript/gollum.js.erb | 16 ++++++++++++++++ lib/gollum/views/pages.rb | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/gollum/app.rb b/lib/gollum/app.rb index f08a1816..cb4b37ff 100644 --- a/lib/gollum/app.rb +++ b/lib/gollum/app.rb @@ -294,7 +294,6 @@ module Precious commit[:message] = "Deleted #{filepath}" wiki.delete_file(filepath, commit) end - redirect_to('/pages') end diff --git a/lib/gollum/public/gollum/javascript/gollum.js.erb b/lib/gollum/public/gollum/javascript/gollum.js.erb index 678b6400..61ef6991 100755 --- a/lib/gollum/public/gollum/javascript/gollum.js.erb +++ b/lib/gollum/public/gollum/javascript/gollum.js.erb @@ -58,6 +58,22 @@ $(document).ready(function() { e.preventDefault(); } ); + $('.delete-file').click( function(e) { + var ok = confirm($(this).data('confirm')); + if ( ok ) { + var element = $(this); + $.post('<%=delete_path %>' + $(this).data('file-path'), + {}, + function (result) { + // page successfully deleted, stay on page but remove element from DOM + element.closest("li").remove(); + }); + } + // Don't navigate on cancel. + e.preventDefault(); + } ); + + var nodeSelector = { node1: null, node2: null, diff --git a/lib/gollum/views/pages.rb b/lib/gollum/views/pages.rb index 6759bc60..49745a1c 100644 --- a/lib/gollum/views/pages.rb +++ b/lib/gollum/views/pages.rb @@ -31,7 +31,7 @@ module Precious def delete_file(url) - %Q(
) + %Q(
) end def files_folders From 8d611ea25ab5a5572f1a6eb4bc2fa6678d8d9c9e Mon Sep 17 00:00:00 2001 From: Bart Kamphorst Date: Fri, 19 Oct 2018 21:32:22 +0200 Subject: [PATCH 4/4] Add explanatory notes to deletion logics. --- lib/gollum/public/gollum/javascript/gollum.js.erb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/gollum/public/gollum/javascript/gollum.js.erb b/lib/gollum/public/gollum/javascript/gollum.js.erb index 61ef6991..173bf27d 100755 --- a/lib/gollum/public/gollum/javascript/gollum.js.erb +++ b/lib/gollum/public/gollum/javascript/gollum.js.erb @@ -44,6 +44,7 @@ function abspath(path, name){ // ua $(document).ready(function() { + // for deleting the current page $('#delete-link').click( function(e) { var ok = confirm($(this).data('confirm')); if ( ok ) { @@ -57,7 +58,7 @@ $(document).ready(function() { // Don't navigate on cancel. e.preventDefault(); } ); - + // for deleting files and pages from the overview $('.delete-file').click( function(e) { var ok = confirm($(this).data('confirm')); if ( ok ) { @@ -65,7 +66,7 @@ $(document).ready(function() { $.post('<%=delete_path %>' + $(this).data('file-path'), {}, function (result) { - // page successfully deleted, stay on page but remove element from DOM + // file successfully deleted, stay on overview but remove element from DOM element.closest("li").remove(); }); }