diff options
author | Joey Hess <joey@kitenet.net> | 2011-06-17 15:17:20 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2011-06-17 15:17:20 -0400 |
commit | ace3665f811774a6eb64b908bf88178b0c8f3689 (patch) | |
tree | f79dd0ad118072d74a616586cdf26b89e93ec362 /IkiWiki/Plugin/attachment.pm | |
parent | d82fa99426616f9cbedf43f03a3445e1b09287f6 (diff) | |
download | ikiwiki-ace3665f811774a6eb64b908bf88178b0c8f3689.tar ikiwiki-ace3665f811774a6eb64b908bf88178b0c8f3689.tar.gz |
improve detection of ajax request
Firefox sent an accept header for application/xml, not application/json,
and also weakened the priority to 0.8. So that stuff is not to be trusted;
instead I found a better way: When an ajax upload is *not* being made,
the Upload Attachment button will be used, so enable ajax if an upload
is being made without that button having been used.
Also, testing with firefox revealed it refused to process a response that
was type application/json, and checking the demo page for the jquery file
upload plugin, it actually returns the json with type text/html. Ugh.
Followed suite.
Now tested with: chromium, chromium (w/o js), firefox, firefox (w/o js),
and w3m.
Diffstat (limited to 'IkiWiki/Plugin/attachment.pm')
-rw-r--r-- | IkiWiki/Plugin/attachment.pm | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/IkiWiki/Plugin/attachment.pm b/IkiWiki/Plugin/attachment.pm index 490014a7e..4d6dee23e 100644 --- a/IkiWiki/Plugin/attachment.pm +++ b/IkiWiki/Plugin/attachment.pm @@ -228,7 +228,7 @@ sub attachment_store { check_canattach($session, $final_filename, $tempfile); }; if ($@) { - json_response($q, $dest."/".$filename, $@); + json_response($q, $form, $dest."/".$filename, $@); error $@; } @@ -259,7 +259,7 @@ sub attachment_store { }); } - json_response($q, $dest."/".$filename, stored_msg()); + json_response($q, $form, $dest."/".$filename, stored_msg()); } # Save all stored attachments for a page. @@ -360,17 +360,17 @@ sub stored_msg { gettext("just uploaded"); } -sub json_response ($$$) { +sub json_response ($$$$) { my $q=shift; + my $form=shift; my $filename=shift; my $stored_msg=shift; - # for the jquery file upload widget - if ($q->Accept("application/json") >= 1.0 && - grep { /application\/json/i } $q->Accept) { + if (! defined $form->submitted || + $form->submitted ne "Upload Attachment") { eval q{use JSON}; error $@ if $@; - print "Content-type: application/json\n\n"; + print "Content-type: text/html\n\n"; my $size=-s $filename; print to_json([ { |