Your IP : 18.219.40.177
/**
* Upload files
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
*/
App.SendFormWithFiles = function(window, $, EventMgr, App) {
'use strict';
var init = function() {
EventMgr.bind('setBrandSettings', sendFormWithFiles);
EventMgr.on('#main-wrapper', '.i-button-form-send-cancel', 'click',
abortFormSending);
},
abortFormSending = function(e) {
var id = this.getAttribute('data-id');
EventMgr.trigger('ajaxRequestAbort', { id: id });
},
sendFormWithFiles = function(e, data) {
if (window.FormData) {
sendLikeFormData(data);
} else {
sendLikeFrame(data);
}
},
sendLikeFormData = function(data) {
var formData = new FormData(),
param = data.param,
tabId = data.tabId,
options = data.options,
id = new Date().getTime();
resetHiddenInput(tabId);
/* jshint forin:false */
for (var key in param) {
formData.append(key, param[key]);
}
$('#frm-' + tabId + ' input[type="file"]').each(function() {
if (this.files) {
var l = this.files.length, name = this.name;
if (l > 1) {
name += '[]';
}
while (l--) {
formData.append(name, this.files[l]);
}
}
});
//formData.append('sok', 'ok');
options.formData = formData;
options.reqType = 'xhr';
options.id = id;
//clear class for setvalues
var $progressbar = $('#' + tabId +
'-progressbar'),
$loader = $progressbar.find('.b-progressbar__loader'),
$btn = $progressbar.find('.b-progressbar__btn-wr');
$loader.removeClass('b-progressbar__loader_type_static');
if ($btn.length) {
$btn.remove();
}
options.progressCb = function(e) {
if (e.lengthComputable) {
var per = Math.round((e.loaded * 100) / e.total) ,
width = per * (0.98);
// loader = App.u.selectorCache('#' + tabId +
// '-progressbar .b-progressbar__loader');
//add static class & rewrite comment & add cancel btn
if (!$loader.hasClass('b-progressbar__loader_type_static')) {
//add class for small bottom padding
$('#' + tabId + '-progressbar')
.addClass('b-progressbar_type_withbtn');
//remove animated
$loader.removeClass('b-progressbar__loader_type_animate');
//add static color
$loader.addClass('b-progressbar__loader_type_static');
//add cancel btn
$('#' + tabId + '-progressbar .b-progressbar__inner')
.append('<div class="b-progressbar__btn-wr">' +
'<div class="b-button b-button_style_small i-button-form-send-cancel" data-id="' +
id + '">' + pageInfo.msgCancel + '</div>' +
'</div>');
//rewite comment
$('#' + tabId + '-progressbar .b-progressbar__comment')
.html(window.pageInfo.formSending);
}
//set progress
$loader.css('width', width + '%');
if (per > 7) {
$loader.html(per + '%');
} else {
$loader.html('');
}
}
};
EventMgr.trigger('ajaxRequest', options);
EventMgr.trigger('tabLoading', { tabId: tabId });
},
sendLikeFrame = function(data) {
var tabId = data.tabId,
parent = data.parent,
frameId = 'iframe-' + Math.round(new Date().getTime() / 1000),
$form, sForm, action;
//find hidden by if/else input@type=hidden & reset it
resetHiddenInput(tabId);
$('body').after('<iframe width="0" height="0" style="display:none;" name="' +
frameId + '" id="' + frameId + '"></iframe>');
sForm = document['frm-' + tabId];
action = sForm.getAttribute('action');
$('#form-wrapper-' + tabId).wrap(function() { return '<form action="' +
action + '" id="form-' + frameId +
'" method="POST" enctype="multipart/form-data" target="' +
frameId + '"/>'; });
$form = $('#form-' + frameId);
if (data.addParams) {
/* jshint forin: false */
for (var key in data.addParams) {
$form.append('<input type="hidden" name="' + key + '" value="' + data.addParams[key] + '"/>');
}
}
//$form.append('<input type="hidden" value="ok" name="sok"/>');
//$form.append('<input type="hidden" value="ajax" name="sfrom"/>');
// $form.append('<input type="hidden" value="' + data.pid +
// '" name="progressid"/>');
// $form.append('<input type="hidden" value="' + data.name +
// '" name="clicked_button"/>');
$('#' + frameId).load(function() {
handleResponse(this, frameId, data, parent);
});
$form.submit();
EventMgr.trigger('showLoader');
},
resetHiddenInput = function(tabId) {
//find hidden by if/else input@type=hidden & reset it
$('#form-wrapper-' + tabId).find('.l-form__row_hidden_yes input[type="file"]').each(function() {
var $self = $(this);
$self.wrap('<form>').closest('form').get(0).reset();
$self.unwrap();
});
},
handleResponse = function(loadedFrame, frameId, data, parent) {
var response = {},
responseStr = loadedFrame.contentWindow.document.body.innerHTML,
tabId = data.tabId;
try {
//replace ' with ""
responseStr = responseStr.replace(/\\'/g, "'");
//remove doctype
responseStr = responseStr.replace(/<![\w\s\"-\/]*>/g, '');
//remove html tags
responseStr = responseStr.replace(/(<([^>]+)>)/g, '');
//check for 503 error
if (responseStr.match(/^long\/+/)) {
EventMgr.trigger('ajaxRequest', {
url: pageInfo.host + responseStr,
invar: {
iType: 'replace',
dataSaved: true,
tabId: tabId,
targetTabId: tabId,
parent: parent
},
type: 'post',
outtype: 'json',
trfunc: 'ajaxFormResponse',
queue: 'noqueue',
failfunc: 'failFormAjaxResponse'
});
return;
} else {
response = $.parseJSON($.trim(responseStr));
}
} catch (e) {
response = responseStr;
EventMgr.trigger('hideLoader');
EventMgr.trigger('pullMsg', { msg: 'JSON Parse Error.' });
}
//@TODO run formHandler
//@TODO remove iframe and wrapper
if (response) {
$('#form-wrapper-' + tabId).unwrap();
$('#' + frameId).remove();
response.tabId = tabId;
response.parent = parent;
var resp = $.extend(response, data.options.invar);
EventMgr.trigger(data.options.trfunc, resp);
//EventMgr.trigger('ajaxFormResponse', response);
EventMgr.trigger('hideLoader');
}
};
return {
init: init,
handleResponse: handleResponse
};
}(window, $, EventMgr, App);