Files

114 lines
3.7 KiB
JavaScript

/**
* Контрол выбора сайта для импорта.
* Вывод user-friendly сообщение об ошибке
*/
Friends.RegImportSiteControl = function(element, params) {
// инициируем некоторые переменные
this.control = element;
this.params = params;
this.__listeners = [];
this.sheets = {};
this.init();
};
Friends.RegImportSiteControl.prototype = {
init: function() {
_this = this;
var sheets_list = y5.Dom.getDescendants(this.control, 'div', 'sheet');
for (var i = 0, l = sheets_list.length; i < l; i++) {
var sheetName = getParams(sheets_list[i])[0];
this.sheets[sheetName] = sheets_list[i];
};
this._currentSheet = {};
var selector = y5.Dom.getDescendant(this.control, 'ul', 'selector');
var selectors = selector.getElementsByTagName('input');
this.__listeners.push(new y5.AEventListener('submit', checkInput, this.control, true, this));
onSelect = [];
for (var i = 0, l = selectors.length; i < l; i++) {
var currentSheetName = getParams(selectors[i])[0];
onSelect[i] = function(sheetName) {
return function(e) {
if (e.target.checked) {
showSheet(sheetName);
}
};
}(currentSheetName);
if (selectors[i].checked) {
showSheet(currentSheetName);
}
y5.Events.create('click', onSelect[i], selectors[i], true);
y5.Events.create('change', onSelect[i], selectors[i], true);
};
/**
* Показывает лист с выбранным именем, остальные скрывает.
* @memberOf friends.RegImportSiteControl
* @param {String} sheetName
*/
function showSheet(sheetName) {
for (var i in _this.sheets) {
var sheet = _this.sheets[i];
var sheetElements = y5.FormCollector.getTagsArray(sheet);
var needShow = (i == sheetName);
y5.Classes[needShow ? 'remove' : 'add'](sheet, 'i-hidden');
if (needShow) {
_this._currentSheet.sheet = sheet;
_this._currentSheet.input = null;
_this._currentSheet.message = y5.Dom.getDescendant(_this._currentSheet.sheet, 'b', 'b-note b-note-attention');
}
for (var j = sheetElements.length - 1; j >= 0 ; j--) {
var input = sheetElements[j];
input.disabled = !needShow;
if (needShow && input.type && input.type == 'text') {
input.focus();
_this._currentSheet.input = input;
}
}
}
};
function checkInput(e) {
if (this._currentSheet.input && y5.Strings.isVoid(this._currentSheet.input.value)) {
e.preventDefault();
//показываем ноду с ошибкой
y5.Classes.remove(this._currentSheet.message, 'i-hidden');
this._currentSheet.input.focus();
// начинаем следить, не изменилось содержание поля
this.__listeners.push(new y5.InputObserver(createToggleMessage(this._currentSheet), this._currentSheet.input, true, this));
}
};
function createToggleMessage(oSheet) {
return function() {
if (!y5.Strings.isVoid(oSheet.input.value)) {
y5.Classes.add(oSheet.message, 'i-hidden')
}
}
};
},
destruct: function() {
for (var i = 0, l = this.__listeners.length; i < l; i++) {
this.__listeners[i].remove();
}
}
}
y5.require(['Dom', 'Events', 'Classes', 'FormCollector', 'EventsExt'], function() {
y5.loaded('{Friends}.RegImportSiteControl');
});