mirror of
https://gitverse.ru/kpa39l/yaru.nixg.ru.git
synced 2026-09-29 09:55:06 +00:00
Initial commit: проект документации YARU
This commit is contained in:
@@ -0,0 +1,214 @@
|
||||
/*
|
||||
* компонент поиска Я-пользователя
|
||||
*/
|
||||
Friends.YauserSearch = function(element, params) {
|
||||
if (arguments.length > 0) {
|
||||
this.init.apply(this, arguments);
|
||||
}
|
||||
};
|
||||
|
||||
Friends.YauserSearch.prototype = {
|
||||
init: function(element, params) {
|
||||
/** control container. */
|
||||
this.control = element;
|
||||
this.control.YauserSearchControl = this;
|
||||
this.params = params;
|
||||
|
||||
this.searchError_b = y5.Dom.getDescendants(this.control, 'b', 'b-note-attention')[0];
|
||||
this.search_input = y5.Dom.getDescendant(this.control, 'input', 'text');
|
||||
this.usersList_table = y5.Dom.getDescendant(this.control, 'table', 'b-write-users-list');
|
||||
|
||||
this.search_btn = y5.Dom.getDescendants(this.control, 'input', 'submit')[0];
|
||||
this.myFriends_link = y5.Dom.getDescendant(this.control, 'a', 'my-friends');
|
||||
|
||||
this.friendControl = new Friends.FriendControl(this.control);
|
||||
this.search_btn.disabled = false;
|
||||
|
||||
this.INVALID_SEARCH_TEXT = 'Логин или имя пользователя должны быть заданы';
|
||||
|
||||
// ajax-метод поиска пользователя
|
||||
this.ajaxMethod_search = 'ajax/search_users_by_name_not_me';
|
||||
// ajax-метод получения определенного списка пользовтаелей
|
||||
if (this.params) {
|
||||
this.ajaxMethod_get = 'ajax/' + this.params.ajaxMethod_get;
|
||||
}
|
||||
|
||||
this.setEvents();
|
||||
},
|
||||
|
||||
// навешиваем обработчики событий
|
||||
setEvents: function() {
|
||||
var self = this;
|
||||
$(this.control).find(".my-friends").die("click.yausersearch").live("click.yausersearch", function(e){
|
||||
self.hideErrorMessages();
|
||||
self.resetSearchResults();
|
||||
e.preventDefault();
|
||||
|
||||
self.friendControl.setStatusMessage('Идёт загрузка пользователей<br /><img src="' + g_globals.img_base + 'bar.gif" alt=""/>');
|
||||
y5.Events.notify('y5:usersAreFound', self.friendControl, true);
|
||||
|
||||
if (self.friendsHTML) {
|
||||
self.onFriendsSearch(self.friendsHTML);
|
||||
return;
|
||||
}
|
||||
|
||||
var _self = self;
|
||||
|
||||
// функция на успех запроса
|
||||
function responseOK(request, trace) {
|
||||
_self.onFriendsSearch(request.html);
|
||||
_self.friendsHTML = request.html; // запоминаем список друзей
|
||||
}
|
||||
|
||||
// функция на успех запроса
|
||||
function responseError(trace) {
|
||||
self.friendControl.setStatusMessage("ошибка " + trace);
|
||||
}
|
||||
|
||||
var url = friendsURL(self.ajaxMethod_get);
|
||||
|
||||
// загружаем список друзей
|
||||
jQuery.ajax({
|
||||
url: url,
|
||||
dataType: 'json',
|
||||
success: responseOK,
|
||||
error: responseError
|
||||
});
|
||||
});
|
||||
|
||||
y5.ShortCut.down([{key: y5.ShortCut.ENTER}],
|
||||
function(e) {
|
||||
// dispatch'им click по кнопке 'Найти'
|
||||
return new y5.Event('click', this.search_btn, true);
|
||||
},
|
||||
this.search_input, {checkTarget: false, context: this});
|
||||
},
|
||||
|
||||
// при поиске друзей
|
||||
onFriendsSearch: function(html) {
|
||||
this.fillUsers_select(html);
|
||||
if (this.users_select.options.length === 0){
|
||||
this.friendControl.setStatusMessage("никого не найдено");
|
||||
return;
|
||||
}
|
||||
|
||||
this.users_select.selectedIndex = 0;
|
||||
|
||||
this.friendControl.setStatusMessage("← выберите человека");
|
||||
this.friendControl.list = this.users_select;
|
||||
this.friendControl.showUserInfo();
|
||||
y5.Events.notify('y5:userIsSelected', this.friendControl, true);
|
||||
new y5.AEventListener('change', function() {
|
||||
this.friendControl.list = this.users_select;
|
||||
this.friendControl.showUserInfo();
|
||||
y5.Events.notify('y5:userIsSelected', this.friendControl, true);
|
||||
}, this.users_select, true, this);
|
||||
},
|
||||
|
||||
// заполняем список найденных пользователей
|
||||
fillUsers_select: function(html) {
|
||||
this.users_select = y5.Dom.getDescendant(this.control, 'td', 'list').getElementsByTagName('select')[0];
|
||||
var parent = this.users_select.parentNode;
|
||||
//' ставится стандартной xscript'овой функцией xmlescape
|
||||
//в IE6 такой html вызывает ошибку, вот замена на ucp-шное значение выручает
|
||||
html = html.replace(/'/g,'\x27');
|
||||
parent.innerHTML = html;
|
||||
this.users_select = parent.firstChild;
|
||||
},
|
||||
|
||||
// при поиске пользователя
|
||||
onSearch: function() {
|
||||
this.resetSearchResults();
|
||||
|
||||
if (!this.isYauserLogin()) {
|
||||
this.showErrorMessage(this.searchError_b, this.INVALID_SEARCH_TEXT);
|
||||
return false;
|
||||
}
|
||||
y5.Events.notify('y5:usersAreFound', this.friendControl, true);
|
||||
return true;
|
||||
},
|
||||
|
||||
// проверяем, задана ли строка поиска
|
||||
isYauserLogin: function() {
|
||||
return !y5.Strings.isVoid(this.search_input.value);
|
||||
},
|
||||
|
||||
// показываем сообщения об ошибках
|
||||
showErrorMessage: function (errorNote, msg) {
|
||||
if (msg) {
|
||||
errorNote.innerHTML = msg;
|
||||
}
|
||||
y5.Classes.remove(errorNote, 'i-hidden');
|
||||
},
|
||||
|
||||
// прячем сообщения об ошибках
|
||||
hideErrorMessages: function(errorNote) {
|
||||
y5.Classes.add(this.searchError_b, 'i-hidden');
|
||||
y5.Events.notify('y5:hideErrorMessages', this.friendControl, true);
|
||||
},
|
||||
|
||||
// сбрасываем результаты поиска
|
||||
resetSearchResults: function() {
|
||||
this.hideErrorMessages();
|
||||
y5.Events.notify('y5:resetSearchResults', this.friendControl, true);
|
||||
},
|
||||
|
||||
// инициализируем список найденных пользователей
|
||||
initUsers_select: function() {
|
||||
this.users_select = y5.Dom.getDescendant(this.control, 'td', 'list').getElementsByTagName('select')[0];
|
||||
new y5.AEventListener('change', function() {
|
||||
y5.Events.notify('y5:userIsSelected', this.friendControl, true);
|
||||
}, this.users_select, true, this);
|
||||
}
|
||||
};
|
||||
|
||||
y5.require (
|
||||
['Dom', 'Events', 'ShortCuts', '{Friends}.FriendControl'],
|
||||
function() {
|
||||
y5.loaded('{Friends}.YauserSearch');
|
||||
|
||||
Friends.FriendControl.prototype.searchResponseOKOld = Friends.FriendControl.prototype.searchResponseOK;
|
||||
Friends.FriendControl.prototype.searchResponseOK = function (request, trace) {
|
||||
var _this = trace.parent;
|
||||
_this.searchResponseOKOld(request, trace);
|
||||
if (_this.list.length) {
|
||||
_this.list.selectedIndex = 0;
|
||||
_this.showUserInfo();
|
||||
|
||||
_this.control.YauserSearchControl.initUsers_select();
|
||||
y5.Events.notify('y5:userIsSelected', _this.control.YauserSearchControl.friendControl, true);
|
||||
}
|
||||
};
|
||||
|
||||
Friends.FriendControl.prototype.searchResponseError = function (trace) {
|
||||
var _this = trace.parent;
|
||||
_this.setStatusMessage("ошбика " + trace);
|
||||
};
|
||||
|
||||
Friends.FriendControl.prototype.onSearch = function() {
|
||||
if (!this.control.YauserSearchControl.onSearch()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var _this = this;
|
||||
|
||||
this.setStatusMessage('Идёт загрузка пользователей<br /><img src="' + g_globals.img_base + 'bar.gif" alt=""/>');
|
||||
|
||||
var fields = getByTagName("input", this.submit.form);
|
||||
var url = friendsURL(this.control.YauserSearchControl.ajaxMethod_search, y5.FormCollector.collectTags(this.control));
|
||||
// загружаем список пользователей
|
||||
jQuery.ajax({
|
||||
url: url,
|
||||
dataType: "json",
|
||||
success: function(response){
|
||||
_this.searchResponseOK(response, {parent:_this} );
|
||||
},
|
||||
error: function(response){
|
||||
_this.searchResponseError(response, {parent:_this} );
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
};
|
||||
}
|
||||
);
|
||||
Reference in New Issue
Block a user