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
This commit is contained in:
parent
621a7cb36d
commit
9fcad91d8d
55
js/util.js
55
js/util.js
|
@ -718,8 +718,16 @@ var SN = { // StatusNet
|
||||||
*/
|
*/
|
||||||
NoticeDataAttach: function() {
|
NoticeDataAttach: function() {
|
||||||
NDA = $('#'+SN.C.S.NoticeDataAttach);
|
NDA = $('#'+SN.C.S.NoticeDataAttach);
|
||||||
NDA.change(function() {
|
NDA.change(function(event) {
|
||||||
S = '<div id="'+SN.C.S.NoticeDataAttachSelected+'" class="'+SN.C.S.Success+'"><code>'+$(this).val()+'</code> <button class="close">×</button></div>';
|
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">×</button></div>';
|
||||||
NDAS = $('#'+SN.C.S.NoticeDataAttachSelected);
|
NDAS = $('#'+SN.C.S.NoticeDataAttachSelected);
|
||||||
if (NDAS.length > 0) {
|
if (NDAS.length > 0) {
|
||||||
NDAS.replaceWith(S);
|
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,
|
* For browsers with FileAPI support: make a thumbnail if possible,
|
||||||
* and append it into the attachment display widget.
|
* and append it into the attachment display widget.
|
||||||
|
@ -1217,6 +1241,32 @@ var SN = { // StatusNet
|
||||||
SN.U.StatusNetInstance.Set({Nickname: $('#form_login #nickname').val()});
|
SN.U.StatusNetInstance.Set({Nickname: $('#form_login #nickname').val()});
|
||||||
return true;
|
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!
|
* don't start them loading until after DOM-ready time!
|
||||||
*/
|
*/
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
|
SN.Init.UploadForms();
|
||||||
if ($('.'+SN.C.S.FormNotice).length > 0) {
|
if ($('.'+SN.C.S.FormNotice).length > 0) {
|
||||||
SN.Init.NoticeForm();
|
SN.Init.NoticeForm();
|
||||||
}
|
}
|
||||||
|
|
2
js/util.min.js
vendored
2
js/util.min.js
vendored
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user