From 5eac24eacb19a91e1b515a8f11d1f73c097c10fd Mon Sep 17 00:00:00 2001 From: Matt Palmer Date: Fri, 3 Jan 2014 15:34:24 +1100 Subject: [PATCH] Implement the ability to store uploads on a per-page basis Storing all uploaded files in a single directory kinda sucks when you've got a largish wiki, or the possibility of filename collisions. With this patch, though, you can set `:per_page_uploads => true` in your wiki settings and have the file uploaded to a directory named for the page you were on when you clicked 'Upload'. --- lib/gollum/app.rb | 8 ++++++-- lib/gollum/public/gollum/javascript/gollum.dialog.js | 2 ++ lib/gollum/public/gollum/javascript/gollum.js | 2 +- lib/gollum/templates/layout.mustache | 1 + lib/gollum/views/page.rb | 4 ++++ 5 files changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/gollum/app.rb b/lib/gollum/app.rb index e16ee7c7..fc30c4ff 100644 --- a/lib/gollum/app.rb +++ b/lib/gollum/app.rb @@ -163,7 +163,7 @@ module Precious tempfile = params[:file][:tempfile] end - dir = 'uploads' + dir = wiki.per_page_uploads ? params[:upload_dest] : 'uploads' ext = ::File.extname(fullname) format = ext.split('.').last || 'txt' filename = ::File.basename(fullname, ext) @@ -173,7 +173,7 @@ module Precious head = wiki.repo.head options = { - :message => "Uploaded file to uploads/#{reponame}", + :message => "Uploaded file to #{dir}/#{reponame}", :parent => wiki.repo.head.commit, } author = session['gollum.author'] @@ -444,6 +444,10 @@ module Precious @page = page @name = name @content = page.formatted_data + @upload_dest = settings.wiki_options[:allow_uploads] ? + (settings.wiki_options[:per_page_uploads] ? + @name : 'uploads' + ) : '' # Extensions and layout data @editable = true diff --git a/lib/gollum/public/gollum/javascript/gollum.dialog.js b/lib/gollum/public/gollum/javascript/gollum.dialog.js index a76bf3f9..0bf0e0a4 100755 --- a/lib/gollum/public/gollum/javascript/gollum.dialog.js +++ b/lib/gollum/public/gollum/javascript/gollum.dialog.js @@ -99,6 +99,8 @@ html += '
'; + html += ''; html += ''; html += '
'; diff --git a/lib/gollum/public/gollum/javascript/gollum.js b/lib/gollum/public/gollum/javascript/gollum.js index 7b3fc87c..c21b50e2 100755 --- a/lib/gollum/public/gollum/javascript/gollum.js +++ b/lib/gollum/public/gollum/javascript/gollum.js @@ -155,7 +155,7 @@ $(document).ready(function() { fields: [ { type: 'file', - context: 'Your uploaded file will be accessible at /uploads/[filename]' + context: 'Your uploaded file will be accessible at /'+uploadDest+'/[filename]' } ], OK: function( res ) { diff --git a/lib/gollum/templates/layout.mustache b/lib/gollum/templates/layout.mustache index 1012691c..ccdcef6f 100644 --- a/lib/gollum/templates/layout.mustache +++ b/lib/gollum/templates/layout.mustache @@ -16,6 +16,7 @@ var baseUrl = '{{base_url}}'; {{#page}} var pageFullPath = '{{url_path_display}}'; + var uploadDest = '{{upload_dest}}'; {{/page}} diff --git a/lib/gollum/views/page.rb b/lib/gollum/views/page.rb index 04165649..95ac3159 100644 --- a/lib/gollum/views/page.rb +++ b/lib/gollum/views/page.rb @@ -42,6 +42,10 @@ module Precious def allow_uploads @allow_uploads end + + def upload_dest + @upload_dest + end def has_header @header = (@page.header || false) if @header.nil?