This repository has been archived on 2024-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
yii2-private-messages/web/js/private_mess_cload.js
2015-09-16 11:01:34 +03:00

282 lines
9.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//Работа с окном сообщением
var visiPrivateMessages = (function() {
"use strict";
var di = {};
var enableLog = false;
function getUrl() {
var pathArray = location.href.split( '/' );
var protocol = pathArray[0];
var host = pathArray[2];
var url = protocol + '//' + host + '/' + baseUrlPrivateMessage + '/private-messages';
return url;
};
return function(id_block_) {
var id_block = typeof id_block_ != "undefined" ? id_block_ : '#message-container';
if(id_block in di) {
return di[id_block];
}
var self = this;
var init = function() {
self.base_url = getUrl();
self.mainBox = $(id_block);
self.box = self.mainBox.find('.message-container').eq(0);
self.form = self.mainBox.find('form.message-form').eq(0);
self.inputText = self.form.find('[name="input_message"]');
self.inputFromId = self.form.find('[name="message_id_user"]');
self.inputIsEmail = self.form.find('[name="send_mail"]');
self.lastId = 1;
};
init();
var updateMessage = function(action) {
var from_id = self.inputFromId.val();
if(!from_id) {
return null;
}
$.ajax({
type: "GET",
url: self.base_url,
data: {from_id:from_id, action:action},
success: function(msg){
if(msg.status) {
self.log(msg.data);
self.updateBox(msg.data);
} else {
self.log('error: ' + action);
self.log(msg);
}
}
});
};
//отправка сообщения
var sendMessage = function(whom_id, text) {
$.ajax({
type: "GET",
url: self.base_url,
data: {whom_id:whom_id, text:text, isEmail:self.isEmail, action:'sendMessage'},
success: function(msg){
if(msg.status) {
self.updateBox(msg.data);
self.inputText.val('');
} else {
self.log('error: ' + 'sendMessage');
self.log(msg);
}
}
});
};
var changeActiveUser = function(id) {
var currentId = self.inputFromId.val();
if(currentId != id) {
self.inputFromId.val(id);
self.mainBox.find('div.contact').removeClass('active');
self.mainBox.find('div.contact[data-user=' + id + ']').addClass('active');
}
};
this.reInit = function() {
init();
return self;
};
this.log = function(m) {
if(enableLog){
console.log(m);
}
return self;
};
this.getAllMessages = function () {
updateMessage('getMessage');
return self;
};
this.getNewMessages = function () {
updateMessage('getNewMessage');
return self;
};
//проверить на дублирование сообщение на почту
this.isEmail = function() {
return self.inputIsEmail.prop('checked');
};
//очистить окно сообщений
this.clearBox = function() {
self.box.html('');
self.lastId = 1;
return self;
};
//создать разметку нового сообщения
this.createHtmlMessage = function(n) {
var html = '';
html += '<div data-id="' + n['id'] +'" class="message message-table ' + (n['i_am_sender'] ? 'my-message' : '') + '">';
html += '<div class="message-row">';
html += '<div class="massage-cell">';
html += '<span class="delete-message">+</span>';
html += '<span class="massage-cell-wrapper">' + n['message'] + '</span>';
html += '</div></div></div>';
return html;
};
//обработка событий обновления данных pool
this.fromPooling = function(m) {
var current_id = self.inputFromId.val();
for(var k in m){
var arr = m[k];
self.setCountMessToList(arr['id'], arr['cnt_mess']);
if(arr['id'] == current_id) {
self.getNewMessages();
}
}
return self;
};
//Установить кол-во новых сообщений в списке пользователей
this.setCountMessToList = function(user_id, count) {
//self.mainBox.find('li.contact[data-user=' + user_id + '] #cnt').eq(0).html(count);
//return self;
return '';
};
this.deleteMessage = function(idMessage) {
$.ajax({
type: "GET",
url: self.base_url,
data: {id_message:idMessage, action:'deleteMessage'},
success: function(msg){
if(msg.status) {
self.mainBox.find('div.message[data-id=' + msg['data'] + ']').remove();
} else {
self.log('error: ' + 'deleteMessage');
self.log(msg);
}
}
});
return self;
};
//обновление блока сообщений
this.updateBox = function(data) {
var m = data.messages;
var fromId = data.from_id;
var html = '';
if(fromId != self.inputFromId.val()){
self.log('Error id user message and fromId');
return false;
}
m.forEach(function(h){
if(1*h['id'] > self.lastId) {
html += self.createHtmlMessage(h);
self.lastId = h['id'];
}else {
self.log('last id: ' + self.lastId + ', current id:' + h['id']);
self.log(h);
}
});
self.box.append(html);
self.Scroll();
self.setCountMessToList(fromId, ' ');
return self;
};
//отправка сообщения
this.form.submit(function() {
var text = self.inputText.val();
var id = self.inputFromId.val();
if(!id || !text) {
return false;
}
sendMessage(id, text);
return false;
});
//обработка кликов для удаления сообщений
self.mainBox.click(function(event) {
var target = $(event.target);
if(target.is('span.delete-message')) {
var idMessage = target.parents('div.message').data('id');
self.deleteMessage(idMessage);
return false;
}
});
//обработка клика по кнопке удаления диалога
self.mainBox.find('button.delete-friend').click(function(event){
var target = $(this).parent('div.contact');
var user_id = target.data('user');
if(user_id) {
$.ajax({
type: "GET",
url: self.base_url,
data: {user_id:user_id, action:'clearMessage'},
success: function(msg){
if(msg.status) {
target.trigger('click');
} else {
self.log('error: ' + 'deleteMessage');
self.log(msg);
}
}
});
}
return false;
})
//обработка кликов на контакты
this.mainBox.find('.contact').click(function(event){
var user_id = $(this).data('user');
if(user_id) {
self.clearBox();
changeActiveUser(user_id);
self.inputText.attr('disabled', false);
self.getAllMessages();
}
});
//resize tinyscrollbar
this.Scroll = function() {
scrollbar1.data("plugin_tinyscrollbar").update('bottom');
};
//Поиск по контактам
$('div.search input[type="search"]').keyup(function(){
var val = this.value;
$('.friends').each(function(){
var target = $(this);
var name = target.data('name');
var expr = new RegExp(val, 'i');
if(expr.test(name)){
target.show();
} else {
target.hide();
}
});
scrollbar3.data("plugin_tinyscrollbar").update();
});
di[id_block] = this;
this.pools = new privateMessPooling(self.lastId);
this.pools.addListener('newData', this.fromPooling);
this.pools.start();
var scrollbar1 = $('#scrollbar1');
scrollbar1.tinyscrollbar();
var scrollbar3 = $('#scrollbar3').tinyscrollbar();
}
})();