Your IP : 18.219.40.177
/**
* ExtFormHelper
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} api API functions
*/
/*global App:true*/
App.ExtFormHelper = function(window, $, EventMgr, App) {
'use strict';
var self = '';
// отправка формы по клику по кнопке
var clickedButton = false;
//convert rules for if/else in default format
function convertIfRules(value, template) {
var attrName = String(template).replace('__VALUE__', window.hash(value));
// self.removeAttribute('data-init-func');
self.setAttribute(attrName, 'yes');
}
//convert data-handler
function convertDataHandler(value) {
// self.removeAttribute('data-init-func');
self.setAttribute('data-handler-val', window.hash(String(value)));
}
//run init function from attribute
function initFunc() {
var elems = $('*[data-init-func]'),
l = elems.length,
funcArr;
while (l--) {
self = elems[l];
funcArr = String(self.getAttribute('data-init-func')).split('||');
var funcLen = funcArr.length;
for (var i = 0; i < funcLen; i++) {
var func = funcArr[i].replace(/\s/g, '');
try {
/*jslint evil: true */
eval('App.ExtFormHelper.' + func);
} catch (e) {
console.log('undefined function:', func);
}
}
//remove attribute
self.removeAttribute('data-init-func');
}
EventMgr.trigger('appendForm', { tabId: 'tab0' });
setTimeout(function() {
setRequiredField();
}, 0);
}
function checkRequired() {
var ok = true;
$('#frm-tab0').find('input[required], textarea[required]').each(function() {
var empty = (this.value === ''),
hide = this.offsetWidth === 0;
if (empty && !hide) {
ok = false;
return false;
}
});
return ok;
}
function checkConfirm() {
var field = $('#frm-tab0 input[data-confirm="yes"]'),
confirmed = true;
if (field.length > 0) {
field.each(function() {
var confirmField = this.getAttribute('data-check-field'),
value1 = this.value,
confirmFieldElem = App.Dom.byId(confirmField + '-tab0'),
confirmFieldElemFake = App.Dom.byId(confirmField + '-' +
'tab0-fake'),
value2;
if (confirmFieldElem !== null) {
value2 = confirmFieldElem.value;
}
if (value1 !== value2 && (confirmFieldElem.offsetWidth !== 0 ||
confirmFieldElemFake.offsetWidth !== 0)) {
this.focus();
confirmed = false;
}
});
}
return confirmed;
}
/**
* Обработчик отправки формы по кнопке
* @param { object } e объект события
* @return { boolean } флаг отправки формы
* @this button
*/
function submitFormAction(e) {
var name = this.getAttribute('name'),
func = this.getAttribute('data-func'),
isRequiredOk = checkRequired(),
isPasswdConfirmed = checkConfirm();
if (func) {
e.preventDefault();
window.location = pageInfo.host + pageInfo.binary + '?func=' + func;
} else if (isRequiredOk && isPasswdConfirmed) {
$('#i-clicked-button-input').val(name);
this.value = this.getAttribute('data-disabled');
this.className += ' b-button_st_disabled';
clickedButton = true;
$('#frm-tab0').submit();
return false;
} else if (!isPasswdConfirmed) {
return false;
}
}
/**
* Обработчик отправки формы по ENTER
*/
function formSubmitHandler() {
var name = $('#i-default-button').attr('data-name');
if (name && !clickedButton) {
$('#i-clicked-button-input').val(name);
}
}
/**
* Убирать у скрытых полей атрибут required, у видимых добавлять
*/
function setRequiredField() {
$('#frm-tab0').find('input[data-required], textarea[data-required]').each(function() {
var hide = this.offsetWidth === 0;
if (hide) {
this.removeAttribute('required');
} else if (!this.hasAttribute('required')) {
this.setAttribute('required', 'required');
}
});
}
/**
* Обработчик изменений полей, которые управляют скрытием других полей
*/
function changeControlFieldHandler() {
setTimeout(function() {
setRequiredField();
}, 0);
}
function init() {
EventMgr.bind('pageLoad', initFunc);
EventMgr.obind('.i-button-extform', 'click', submitFormAction);
EventMgr.obind('#frm-tab0', 'submit', formSubmitHandler);
EventMgr.obind('.control-field input[type="hidden"], .control-field .b-input, .control-field .b-input_type_file, .control-field .b-textarea', 'change', changeControlFieldHandler);
}
var api = {
init: init,
convertIfRules: convertIfRules,
convertDataHandler: convertDataHandler
};
return api;
} (window, $, EventMgr, App);