in kitsune/sumo/static/sumo/js/gallery.js [85:187]
$modal: $('#gallery-upload-modal'),
// some mapping here for what to show/hide and when
/*
* -- check if a draft exists and open the modal if so
* -- set up DOM events: selecting media type, click to cancel upload
* ajax uploads, require metadata, bind modal close event
*/
init: function() {
var self = this;
self.forms.$image.showFade();
// Bind cancel upload event.
$('.progress a', self.$modal).on("click", function cancelUpload(ev) {
var type = $(this).data('type');
ev.preventDefault();
self.cancelUpload($(this));
self.setInputMessage(
$(this).closest('.upload-form').find('input[name="' + type + '"]'),
'cancelled'
);
return false;
});
// Bind ajax uploads for inputs
$('input[type="file"]', self.$modal).each(function() {
var $file = $(this), $form = $file.closest('.upload-form');
$file.ajaxSubmitInput({
url: $form.data('post-url'),
beforeSubmit: function($input) {
if (!self.isValidFile($file)) {
self.uploadError($file, 'invalid');
return false;
}
if (self.isTooLarge($file)) {
self.uploadError($file, 'toolarge');
return false;
}
return self.startUpload($file);
},
onComplete: function($input, iframeContent, options) {
$input.closest('form')
.trigger('ajaxComplete')[0].reset();
self.uploadComplete($file, iframeContent, options);
}
});
});
// Deleting uploaded files sends ajax request.
jQuery.fn.makeCancelUpload = function(options) {
var $input = this,
field_name = $input.data('name');
if (!$input.is('input')) {
return $input;
}
if ($input.length > 1) {
// Apply to each individually.
$input.each(function() {
$(this).makeCancelUpload();
});
return $input;
}
var $form = $input.wrap('<form class="inline" method="POST" ' +
'action=""/>').closest('form');
// Also send the csrf token.
$form.append($('input[name="csrfmiddlewaretoken"]')
.first().clone());
$input.on('click', function deleteField(ev) {
ev.preventDefault();
self.deleteUpload($input);
return false;
});
};
// Metadata should be required.
self.$modal.find('.metadata input,.metadata textarea')
.attr('required', 'required');
// Closing the modal with top-right X cancels upload drafts
self.$modal.on('click', 'a.close', function(e) {
self.$modal.find('input[name="cancel"]:last').trigger("click");
});
// Submitting the form should call for validation first.
function validateSubmit(ev) {
if (!self.validateForm($(ev.target))) {
ev.preventDefault();
return false;
}
}
self.forms.$image.find('input[name="upload"]').on("click", validateSubmit);
if (self.forms.$image.hasClass('draft')) {
// draft
self.draftSetup();
} else {
// not draft
self.modalReset();
}
},