We are no longer offering accounts on this server. Consider https://gitlab.freedesktop.org/ as a place to host projects.

Commit 9fcad91d authored by Brion Vibber's avatar Brion Vibber

Ticket #3014: check upload size limits client-side in supporting browsers

Tested successfully in:
* Firefox 4.0b9
* Safari 5.0.5
* Chrome 8.0.522
parent 621a7cb3
......@@ -718,8 +718,16 @@ var SN = { // StatusNet
*/
NoticeDataAttach: function() {
NDA = $('#'+SN.C.S.NoticeDataAttach);
NDA.change(function() {
S = '<div id="'+SN.C.S.NoticeDataAttachSelected+'" class="'+SN.C.S.Success+'"><code>'+$(this).val()+'</code> <button class="close">&#215;</button></div>';
NDA.change(function(event) {
var filename = $(this).val();
if (!filename) {
// No file -- we've been tricked!
$('#'+SN.C.S.NoticeDataAttachSelected).remove();
return false;
}
// @fixme appending filename straight in is potentially unsafe
S = '<div id="'+SN.C.S.NoticeDataAttachSelected+'" class="'+SN.C.S.Success+'"><code>'+filename+'</code> <button class="close">&#215;</button></div>';
NDAS = $('#'+SN.C.S.NoticeDataAttachSelected);
if (NDAS.length > 0) {
NDAS.replaceWith(S);
......@@ -742,6 +750,22 @@ var SN = { // StatusNet
});
},
/**
* Get PHP's MAX_FILE_SIZE setting for this form;
* used to apply client-side file size limit checks.
*
* @param {jQuery} form
* @return int max size in bytes; 0 or negative means no limit
*/
maxFileSize: function(form) {
var max = $(form).find('input[name=MAX_FILE_SIZE]').attr('value');
if (max) {
return parseInt(max);
} else {
return 0;
}
},
/**
* For browsers with FileAPI support: make a thumbnail if possible,
* and append it into the attachment display widget.
......@@ -1217,6 +1241,32 @@ var SN = { // StatusNet
SN.U.StatusNetInstance.Set({Nickname: $('#form_login #nickname').val()});
return true;
});
},
/**
* Add logic to any file upload forms to handle file size limits,
* on browsers that support basic FileAPI.
*/
UploadForms: function () {
$('input[type=file]').change(function(event) {
if (typeof this.files == "object" && this.files.length > 0) {
var size = 0;
for (var i = 0; i < this.files.length; i++) {
size += this.files[i].size;
}
var max = SN.U.maxFileSize($(this.form));
if (max > 0 && size > max) {
var msg = 'File too large: maximum upload size is %d bytes.';
alert(msg.replace('%d', max));
// Clear the files.
$(this).val('');
event.preventDefault();
return false;
}
}
});
}
}
};
......@@ -1229,6 +1279,7 @@ var SN = { // StatusNet
* don't start them loading until after DOM-ready time!
*/
$(document).ready(function(){
SN.Init.UploadForms();
if ($('.'+SN.C.S.FormNotice).length > 0) {
SN.Init.NoticeForm();
}
......
This diff is collapsed.
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