mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-07-08 01:14:24 +03:00
206 lines
5.5 KiB
JavaScript
206 lines
5.5 KiB
JavaScript
/**
|
||
* Пополняемый список пользователей
|
||
*
|
||
* @module ls/user_list_add
|
||
*
|
||
* @license GNU General Public License, version 2
|
||
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
|
||
* @author Denis Shakhov <denis.shakhov@gmail.com>
|
||
*/
|
||
|
||
(function($) {
|
||
"use strict";
|
||
|
||
$.widget( "livestreet.user_list_add", {
|
||
/**
|
||
* Дефолтные опции
|
||
*/
|
||
options: {
|
||
urls: {
|
||
add: null,
|
||
remove: null
|
||
},
|
||
// Селекторы
|
||
selectors: {
|
||
// Блок со списком объектов
|
||
list: '.js-user-list-add-users',
|
||
// Объект
|
||
item: '.js-user-list-small-item',
|
||
// Кнопка удаления объекта
|
||
item_remove: '.js-user-list-add-user-remove',
|
||
// Сообщение о пустом списке
|
||
empty: '.js-user-list-small-empty',
|
||
// Форма добавления
|
||
form: '.js-user-list-add-form'
|
||
},
|
||
// Анимация при скрытии объекта
|
||
hide: {
|
||
effect: 'slide',
|
||
duration: 200,
|
||
direction: 'left'
|
||
},
|
||
// Кастомные аякс параметры
|
||
params: {}
|
||
},
|
||
|
||
/**
|
||
* Конструктор
|
||
*
|
||
* @constructor
|
||
* @private
|
||
*/
|
||
_create: function () {
|
||
var _this = this;
|
||
|
||
// Получаем список элементов
|
||
this.elements = {};
|
||
this.elements.container = this.element;
|
||
this.elements.list = this.elements.container.find(this.options.selectors.list);
|
||
this.elements.empty = this.elements.container.find(this.options.selectors.empty);
|
||
this.elements.form = this.elements.container.find(this.options.selectors.form);
|
||
this.elements.form_text = this.elements.form.find('input[type=text]');
|
||
|
||
// Получаем кастомные аякс параметры
|
||
this.options.params = $.extend({}, this.options.params, ls.utils.getDataOptions(this.elements.container, 'param'));
|
||
|
||
// Ивент удаления
|
||
this.elements.list.on('click', this.options.selectors.item_remove, function (e) {
|
||
_this.remove( $(this).data('user-id') );
|
||
e.preventDefault();
|
||
});
|
||
|
||
// Ивент добавления
|
||
this.elements.form.on('submit', function (e) {
|
||
var aItemList = _this.getItems();
|
||
|
||
if ( aItemList.length ) {
|
||
ls.utils.formLock(_this.elements.form);
|
||
_this.add( aItemList );
|
||
}
|
||
|
||
e.preventDefault();
|
||
});
|
||
},
|
||
|
||
/**
|
||
* Получает объекты для добавления
|
||
*
|
||
* @return {Array} Массив с объектами
|
||
*/
|
||
getItems: function () {
|
||
var sValue = this.elements.form_text.val();
|
||
|
||
return $.map(sValue.split(','), function(sItem, iIndex) {
|
||
return $.trim(sItem) || null;
|
||
});
|
||
},
|
||
|
||
/**
|
||
* Добавление объекта
|
||
*/
|
||
add: function(aUserList) {
|
||
if ( ! aUserList ) return;
|
||
|
||
var oParams = {
|
||
aUserList: aUserList,
|
||
};
|
||
|
||
oParams = $.extend({}, oParams, this.options.params);
|
||
|
||
ls.ajax.load(this.options.urls.add, oParams, function(oResponse) {
|
||
this._onAdd(oResponse);
|
||
|
||
this._trigger("afteradd", null, { context: this, response: oResponse });
|
||
}.bind(this));
|
||
},
|
||
|
||
_onUserAdd: function (oItem) {
|
||
return;
|
||
},
|
||
|
||
/**
|
||
*
|
||
*/
|
||
_onAdd: function (oResponse) {
|
||
var aUsers = this._getUsersAll();
|
||
|
||
// Составляем список добавляемых объектов
|
||
var sItemsHtml = $.map(oResponse.aUserList, function (oItem, iIndex) {
|
||
if (oItem.bStateError) {
|
||
ls.msg.error(null, oItem.sMsg);
|
||
} else {
|
||
ls.msg.notice(null, ls.lang.get('common.success.add'));
|
||
|
||
this._trigger("afterobjectadd", null, { context: this, oItem: oItem, response: oResponse });
|
||
|
||
this._onUserAdd(oItem);
|
||
|
||
// Не добавляем юзера если он уже есть в списке
|
||
if ( aUsers.filter('[data-user-id=' + oItem.iUserId + ']').length ) {
|
||
return null;
|
||
} else {
|
||
return oItem.sHtml;
|
||
}
|
||
}
|
||
}.bind(this)).join('');
|
||
|
||
if ( sItemsHtml ) {
|
||
// Скрываем сообщение о пустом списке
|
||
this.elements.empty.hide();
|
||
// Добавляем объекты
|
||
this.elements.list.show().prepend(sItemsHtml);
|
||
}
|
||
|
||
ls.utils.formUnlock( this.elements.form );
|
||
this.elements.form_text.focus().val('');
|
||
},
|
||
|
||
/**
|
||
* Удаление объекта
|
||
*/
|
||
remove: function(iUserId) {
|
||
if ( ! this.options.urls.remove ) return;
|
||
|
||
var _this = this,
|
||
oParams = {
|
||
iUserId: iUserId
|
||
};
|
||
|
||
oParams = $.extend({}, oParams, this.options.params);
|
||
|
||
ls.ajax.load(this.options.urls.remove, oParams, function(oResponse) {
|
||
ls.msg.notice(null, ls.lang.get('common.success.remove'));
|
||
|
||
this._hide( this._getUserById( iUserId ), this.options.hide, function () {
|
||
$(this).remove();
|
||
|
||
// Скрываем список если объектов в нем больше нет
|
||
if ( ! _this.elements.list.find(_this.options.selectors.item).length ) {
|
||
_this.elements.list.hide();
|
||
_this.elements.empty.show();
|
||
}
|
||
});
|
||
|
||
this._trigger("afterremove", null, { context: this, response: oResponse, oParams: oParams });
|
||
}.bind(this));
|
||
},
|
||
|
||
/**
|
||
* Получает пользователя по ID
|
||
*
|
||
* @private
|
||
* @param {Number} iUserId , ID объекта
|
||
* @return {jQuery} Объект
|
||
*/
|
||
_getUserById: function(iUserId) {
|
||
return this.elements.list.find(this.options.selectors.item + '[data-user-id=' + iUserId + ']');
|
||
},
|
||
|
||
/**
|
||
* Получает всех пользователей
|
||
*/
|
||
_getUsersAll: function() {
|
||
return this.elements.list.find(this.options.selectors.item);
|
||
}
|
||
});
|
||
})(jQuery); |