/** * Контрол выбора сайта для импорта. * Вывод 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'); });