From d4a0732752e79b57509cee33001ab757132366c5 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 15 Jun 2011 20:02:14 -0400 Subject: let thru HTTP_ACCEPT Needed for attachment to return json when requested. I think some browsers send Accept: * , so I made sure to check that json was explicitly listed as to be accepted, as well as having a high priority. --- IkiWiki/Plugin/attachment.pm | 33 ++++++++++++++++++--------------- IkiWiki/Wrapper.pm | 2 +- debian/changelog | 6 ++++++ 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/IkiWiki/Plugin/attachment.pm b/IkiWiki/Plugin/attachment.pm index 6004a0982..4af9ac92b 100644 --- a/IkiWiki/Plugin/attachment.pm +++ b/IkiWiki/Plugin/attachment.pm @@ -252,22 +252,25 @@ sub attachment_store { IkiWiki::fast_file_copy($tempfile, $filename, $fh, @_); }); } - + # Return JSON response for the jquery file upload widget. - eval q{use JSON}; - error $@ if $@; - print "Content-type: application/json\n\n"; - my $size=-s $dest."/".$filename; - print to_json([ - { - name => $filename, - size => $size, - humansize => IkiWiki::Plugin::filecheck::humansize($size), - stored_msg => stored_msg(), - - } - ]); - exit 0; + if ($q->Accept("application/json") >= 1.0 && + grep { /application\/json/i } $q->Accept) { + eval q{use JSON}; + error $@ if $@; + print "Content-type: application/json\n\n"; + my $size=-s $dest."/".$filename; + print to_json([ + { + name => $filename, + size => $size, + humansize => IkiWiki::Plugin::filecheck::humansize($size), + stored_msg => stored_msg(), + + } + ]); + exit 0; + } } # Save all stored attachments for a page. diff --git a/IkiWiki/Wrapper.pm b/IkiWiki/Wrapper.pm index 4fe2d8111..d39a3ea40 100644 --- a/IkiWiki/Wrapper.pm +++ b/IkiWiki/Wrapper.pm @@ -49,7 +49,7 @@ sub gen_wrapper () { push @envsave, qw{REMOTE_ADDR QUERY_STRING REQUEST_METHOD REQUEST_URI CONTENT_TYPE CONTENT_LENGTH GATEWAY_INTERFACE HTTP_COOKIE REMOTE_USER HTTPS REDIRECT_STATUS - HTTP_HOST SERVER_PORT HTTPS + HTTP_HOST SERVER_PORT HTTPS HTTP_ACCEPT REDIRECT_URL} if $config{cgi}; my $envsave=""; foreach my $var (@envsave) { diff --git a/debian/changelog b/debian/changelog index cb0ee6856..5900b4e5f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,6 +3,12 @@ ikiwiki (3.20110609) UNRELEASED; urgency=low * userlist: New plugin, lets admins see a list of users and their info. * aggregate: Improve checking for too long aggregated filenames. * Updated to jQuery 1.6.1. + * attachment: Speed up multiple file uploads by storing uploaded files + in a staging area until the page is saved/previewed, rather than + refreshing the site after each upload. + * attachment: Files can be dragged into the edit page to upload them. + Multiple file upload support. Upload progress bars. + Impemented using the jQuery-File-Upload widget. -- Joey Hess Thu, 09 Jun 2011 10:06:44 -0400 -- cgit v1.2.3