diff --git a/lib/gollum/app.rb b/lib/gollum/app.rb index 0da65acd..cc2a5b47 100644 --- a/lib/gollum/app.rb +++ b/lib/gollum/app.rb @@ -180,14 +180,11 @@ module Precious end end + # AJAX calls only post '/upload_file' do wiki = wiki_new - unless wiki.allow_uploads - @message = "File uploads are disabled" - mustache :error - return - end + halt 405 unless wiki.allow_uploads if params[:file] fullname = params[:file][:filename] @@ -224,8 +221,7 @@ module Precious committer.commit redirect to(request.referer) rescue Gollum::DuplicatePageError => e - @message = "Duplicate page: #{e.message}" - mustache :error + halt 409 # Signal conflict end end diff --git a/lib/gollum/public/gollum/javascript/editor/gollum.editor.js.erb b/lib/gollum/public/gollum/javascript/editor/gollum.editor.js.erb index 464e1948..ff758f96 100755 --- a/lib/gollum/public/gollum/javascript/editor/gollum.editor.js.erb +++ b/lib/gollum/public/gollum/javascript/editor/gollum.editor.js.erb @@ -228,8 +228,8 @@ } window.ace_editor.insert(text); }, - error: function(r, textStatus) { - alert('Error uploading file: ' + textStatus); + error: function(r, textStatus, errorThrown) { + alert('Error uploading file: ' + textStatus + ' ' + errorThrown); $editorBody.removeClass('uploading'); } }); diff --git a/lib/gollum/public/gollum/javascript/gollum.js.erb b/lib/gollum/public/gollum/javascript/gollum.js.erb index 173bf27d..33c2883b 100755 --- a/lib/gollum/public/gollum/javascript/gollum.js.erb +++ b/lib/gollum/public/gollum/javascript/gollum.js.erb @@ -158,6 +158,7 @@ $(document).ready(function() { } }; + // ua detection if ($.browser.mozilla) { $('body').addClass('ff'); @@ -187,7 +188,26 @@ $(document).ready(function() { } ], OK: function( res ) { - $('#upload').submit(); + var formData = new FormData($('#upload').get(0)); + var endpoint = $('#upload').attr("action"); + + $.ajax({ + url: endpoint, + type: 'POST', + data: formData, + processData: false, + contentType: false, + success: function(data) { + // File successfully uploaded + }, + error: function(data, textStatus, errorThrown) { + if (data.status == 409) { + alert('This file already exists.'); + } else { + alert('Error uploading file: ' + textStatus + ' ' + errorThrown); + } + } + }); } }); });