mirror of
https://gitverse.ru/kpa39l/yaru.nixg.ru.git
synced 2026-09-29 09:55:06 +00:00
114 lines
3.7 KiB
JavaScript
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');
|
|
});
|
|
|