Commit f9aecb27 by Peter Fogg

Add support for PNGs as course images.

Also change the file uploader to accept multiple file types.
parent c626c773
...@@ -28,6 +28,6 @@ describe "CMS.Models.FileUpload", -> ...@@ -28,6 +28,6 @@ describe "CMS.Models.FileUpload", ->
it "can accept non-PDF files when explicitly set", -> it "can accept non-PDF files when explicitly set", ->
file = {"type": "image/png"} file = {"type": "image/png"}
@model.set("mimeType": "image/png") @model.set("mimeTypes": ["image/png"])
@model.set("selectedFile", file) @model.set("selectedFile", file)
expect(@model.isValid()).toBeTruthy() expect(@model.isValid()).toBeTruthy()
...@@ -7,22 +7,53 @@ CMS.Models.FileUpload = Backbone.Model.extend({ ...@@ -7,22 +7,53 @@ CMS.Models.FileUpload = Backbone.Model.extend({
"uploadedBytes": 0, "uploadedBytes": 0,
"totalBytes": 0, "totalBytes": 0,
"finished": false, "finished": false,
"mimeType": "application/pdf", "mimeTypes": ["application/pdf"]
"fileType": "PDF"
}, },
// NOTE: validation functions should return non-internationalized error
// messages. The messages will be passed through gettext in the template.
validate: function(attrs, options) { validate: function(attrs, options) {
if(attrs.selectedFile && attrs.selectedFile.type !== this.attributes.mimeType) { if(attrs.selectedFile && !_.contains(this.attributes.mimeTypes, attrs.selectedFile.type)) {
return { return {
message: _.template( message: _.template(
gettext("Only {fileType} files can be uploaded. Please select a file ending in .{fileExtension} to upload."), gettext("Only <%= fileTypes %> files can be uploaded. Please select a file ending in <%= fileExtensions %> to upload."),
{ this.formatValidTypes()
fileType: this.attributes.fileType, ),
fileExtension: this.attributes.fileType.toLowerCase()
}),
attributes: {selectedFile: true} attributes: {selectedFile: true}
}; };
} }
},
// Return a list of this uploader's valid file types
fileTypes: function() {
return _.map(
this.attributes.mimeTypes,
function(type) {
return type.split('/')[1].toUpperCase();
}
);
},
// Return strings for the valid file types and extensions this
// uploader accepts, formatted as natural language
formatValidTypes: function() {
if(this.attributes.mimeTypes.length === 1) {
return {
fileTypes: this.fileTypes()[0],
fileExtensions: this.fileTypes()[0].toLowerCase()
};
}
var or = gettext('or');
var formatTypes = function(types) {
return _.template('<%= initial %> <%= or %> <%= last %>', {
initial: _.initial(types).join(', '),
or: or,
last: _.last(types)
});
};
return {
fileTypes: formatTypes(this.fileTypes()),
fileExtensions: formatTypes(
_.map(this.fileTypes(),
function(type) {
return '.' + type.toLowerCase();
})
)
};
} }
}); });
...@@ -239,8 +239,7 @@ CMS.Views.Settings.Details = CMS.Views.ValidatingView.extend({ ...@@ -239,8 +239,7 @@ CMS.Views.Settings.Details = CMS.Views.ValidatingView.extend({
var upload = new CMS.Models.FileUpload({ var upload = new CMS.Models.FileUpload({
title: gettext("Upload your course image."), title: gettext("Upload your course image."),
message: gettext("Files must be in JPG format."), message: gettext("Files must be in JPG format."),
mimeType: "image/jpeg", mimeTypes: ['image/jpeg', 'image/png']
fileType: "JPG"
}); });
var self = this; var self = this;
var modal = new CMS.Views.UploadDialog({ var modal = new CMS.Views.UploadDialog({
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment