/**
* @author Rafael Ostertag <rafael.ostertag@math.uzh.ch>
*/
/* global $ */
/* global EventEmitter */
/* @depend QfqEvents.js */
/**
* Qfq Namespace
*
* @namespace QfqNS
*/
var QfqNS = QfqNS || {};
(function (n) {
'use strict';
/**
*
* @param formSelector
* @param targetUrl
* @constructor
*
* @name QfqNS.FileDelete
*/
n.FileDelete = function (formSelector, targetUrl) {
this.formSelector = formSelector;
this.targetUrl = targetUrl;
this.eventEmitter = new EventEmitter();
this.setupOnClickHandler();
};
n.FileDelete.prototype.on = n.EventEmitter.onMixin;
n.FileDelete.prototype.setupOnClickHandler = function () {
$(this.formSelector + " button.delete-file").click(this.buttonClicked.bind(this));
};
n.FileDelete.prototype.buttonClicked = function (event) {
event.preventDefault();
var alert = new n.Alert({
message: "Do you want to delete the file?",
type: "warning",
modal: true,
buttons: [
{label: "OK", eventName: "ok"},
{label: "Cancel", eventName: "cancel", focus: true}
]
});
alert.on('alert.ok', function () {
this.performFileDelete(event);
}.bind(this));
alert.show();
};
n.FileDelete.prototype.performFileDelete = function (event) {
this.eventEmitter.emitEvent('filedelete.started', n.EventEmitter.makePayload(event.target, null));
var data = this.prepareData(event.target);
$.ajax({
url: this.targetUrl,
type: 'POST',
data: data,
cache: false
})
.done(this.ajaxSuccessHandler.bind(this, event.target))
.fail(this.ajaxErrorHandler.bind(this, event.target));
};
n.FileDelete.prototype.prepareData = function (htmlButton) {
if (!htmlButton.hasAttribute("name")) {
throw new Error("File delete button element requires 'name' attribute");
}
var fileDeleteName = htmlButton.getAttribute('name');
var data = {
s: $(htmlButton).data('sip'),
name: fileDeleteName
};
return data;
};
n.FileDelete.prototype.ajaxSuccessHandler = function (uploadTriggeredBy, data, textStatus, jqXHR) {
var eventData = n.EventEmitter.makePayload(uploadTriggeredBy, data, {
textStatus: textStatus,
jqXHR: jqXHR
});
this.eventEmitter.emitEvent('filedelete.delete.successful', eventData);
this.eventEmitter.emitEvent('filedelete.ended', eventData);
};
n.FileDelete.prototype.ajaxErrorHandler = function (uploadTriggeredBy, jqXHR, textStatus, errorThrown) {
var eventData = n.EventEmitter.makePayload(uploadTriggeredBy, null, {
textStatus: textStatus,
errorThrown: errorThrown,
jqXHR: jqXHR
});
this.eventEmitter.emitEvent('filedelete.delete.failed', eventData);
this.eventEmitter.emitEvent('filedelete.ended', eventData);
};
})(QfqNS);