FIX: can no longer paste image in Chrome post editor

This commit is contained in:
Régis Hanol 2013-07-04 00:39:23 +02:00
parent 44cd5505d3
commit 5a56af03bc
5 changed files with 25 additions and 5 deletions

View file

@ -172,6 +172,8 @@ Discourse.Utilities = {
return false; return false;
} else if (files.length > 0) { } else if (files.length > 0) {
var upload = files[0]; var upload = files[0];
// if the image was pasted, sets its name to a default one
if (upload instanceof Blob && !(upload instanceof File) && upload.type === "image/png") { upload.name = "blob.png"; }
// check that the uploaded file is authorized // check that the uploaded file is authorized
if (!Discourse.Utilities.isAuthorizedUpload(upload)) { if (!Discourse.Utilities.isAuthorizedUpload(upload)) {
var extensions = Discourse.SiteSettings.authorized_extensions.replace(/\|/g, ", "); var extensions = Discourse.SiteSettings.authorized_extensions.replace(/\|/g, ", ");

View file

@ -154,7 +154,7 @@ class CookedPostProcessor
def get_filename(upload, src) def get_filename(upload, src)
return File.basename(src) unless upload return File.basename(src) unless upload
return upload.original_filename unless upload.original_filename == "blob" return upload.original_filename unless upload.original_filename =~ /^blob(\.png)?$/i
return I18n.t('upload.pasted_image_filename') return I18n.t('upload.pasted_image_filename')
end end

View file

@ -230,7 +230,7 @@ describe CookedPostProcessor do
end end
it "returns a generic name for pasted images" do it "returns a generic name for pasted images" do
upload = Fabricate.build(:upload, { original_filename: "blob" }) upload = Fabricate.build(:upload, { original_filename: "blob.png" })
cpp.get_filename(upload, "http://domain.com/image.png").should == I18n.t('upload.pasted_image_filename') cpp.get_filename(upload, "http://domain.com/image.png").should == I18n.t('upload.pasted_image_filename')
end end

View file

@ -41,12 +41,28 @@ test("prevents files that are too big from being uploaded", function() {
ok(bootbox.alert.calledWith(Em.String.i18n('post.errors.upload_too_large', { max_size_kb: 5 }))); ok(bootbox.alert.calledWith(Em.String.i18n('post.errors.upload_too_large', { max_size_kb: 5 })));
}); });
var dummyBlob = function() {
window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;
if (window.BlobBuilder) {
var bb = new window.BlobBuilder();
bb.append([1]);
return bb.getBlob("image/png");
} else {
return new Blob([1], { "type" : "image\/png" });
}
};
test("allows valid uploads to go through", function() { test("allows valid uploads to go through", function() {
var image = { name: "image.png", size: 10 * 1024 };
Discourse.SiteSettings.max_upload_size_kb = 15; Discourse.SiteSettings.max_upload_size_kb = 15;
this.stub(bootbox, "alert"); this.stub(bootbox, "alert");
// image
var image = { name: "image.png", size: 10 * 1024 };
ok(validUpload([image])); ok(validUpload([image]));
// pasted image
var pastedImage = dummyBlob();
ok(validUpload([pastedImage]));
ok(!bootbox.alert.calledOnce); ok(!bootbox.alert.calledOnce);
}); });

View file

@ -125,7 +125,9 @@ var jsHintOpts = {
"controllerFor", "controllerFor",
"containsInstance", "containsInstance",
"deepEqual", "deepEqual",
"resolvingPromiseWith"], "resolvingPromiseWith",
"Blob",
"File"],
"node" : false, "node" : false,
"browser" : true, "browser" : true,
"boss" : true, "boss" : true,
@ -183,4 +185,4 @@ var jsHintOpts = {
/external_development\//, /external_development\//,
/external_production\//, /external_production\//,
/defer\//, /defer\//,
/locales\//]) %> /locales\//]) %>