View file mail/resource/js/mailScript.js

File size: 8.46Kb
/**
 * Author - koder_alex
 * ISQ - 669906617
 * VK - https://vk.com/koder_alex
 * It is forbidden to give, sell, modify.
 */

	function des2num(int, array) {var cases = [2, 0, 1, 1, 1, 2];return int + array[ (int % 100 > 4 && int % 100 < 20) ? 2 : cases[Math.min(int % 10, 5)] ]}
	function isObject(e){return"object" === typeof e}
	var request = {update: 5E3, limit: 10};

	var node = $('#messages');
	if(node.length == 1)
	{
		request.limit = parseInt(node.attr('data-limit'));
		request.update = parseInt(node.attr('data-update'));
	}
	function messageBox(type, text)
	{
		$('#service_msg_box').remove();
		var node = $('.vk_mail');
		node.prepend('<div id="service_msg_box" class="service_msg_box"><div class="service_msg service_msg_' + type + '">' + text + '</div></div>');
		setTimeout(function(){
			node = $('#service_msg_box');
			node.slideUp(1e3, function(e){
				node.remove();
			})
		}, 2e3)
		return node;
	}

	MessagesActions = function()
	{
		return {
			BoxClose: function(d)
			{
				d = $(d.parentNode);
				d.slideUp(400, function(e){
					d.remove();
				})
			},
			actionsOpened: function(t, e)
			{
				cancelEvent(e);
				$(t.parentNode).toggleClass('head_actions_opened');
			},
			onMessageClick:function(e, t)
			{
				if("A"==e.target.tagName || "VIDEO"==e.target.tagName)
					return true;
				var n = $('.messagesActions').css('width', t.parentNode.clientWidth + "px");
				if(!n.hasClass('resizePanel'))
					n.addClass('resizePanel vk_messages_actions_visible');
				n = $('.vk_mail');
				if(!n.hasClass('vk_messages_actions_visible'))
					n.addClass('vk_messages_actions_visible');
				$(t).toggleClass('mi_selected');
				var count = $('.mi_selected').length;
				if(count >= 1)
					$('.messagesActions__row_counter').text('Выбрано ' + des2num(count, [' сообщение', ' сообщения', ' сообщений']));
				else
					this.close();
			},
			close: function()
			{
				var n = $('.vk_mail');
				if(n.hasClass('vk_messages_actions_visible'))
				{
					n.removeClass('vk_messages_actions_visible');
					n = $('.mi_selected');
					n.removeClass('mi_selected');
				}
				return false;
			}, 
			remove: function(peer_id)
			{
				var n = $('.vk_mail'), data = [];
				if(n.hasClass('vk_messages_actions_visible'))
				{
					n = $('.mi_selected');
					for (var i = 0; i < n.length; i++)
						data.push($(n[i]).attr('data-id'));
					$.post('/mail/?act=dataSend&func=remove', {im_ajax: true, peer: peer_id, dataID: data.join(',')}, function(){
						window.location = '/mail/?act=show&peer=' + peer_id;
					});
				}
			},
			toggleImportant: function(peer_id)
			{
				var n = $('.vk_mail'), data = [];
				if(n.hasClass('vk_messages_actions_visible'))
				{
					n = $('.mi_selected');
					for (var i = 0; i < n.length; i++)
					{
						var s = $(n[i]);
						data.push(s.attr('data-id'));
						s.toggleClass('msg_item_important');
					}
					this.close();
					$.post('/mail/?act=dataSend&func=important', {im_ajax: true, peer: peer_id, dataID: data.join(',')});
				}
			},
			reply: function(t, peer_id)
			{
				t = $(t);
				var n = $('.vk_mail'), data = [], text = t.text();
				if(n.hasClass('vk_messages_actions_visible'))
				{
					n = $('.mi_selected');
					for (var i = 0; i < n.length; i++)
						data.push($(n[i]).attr('data-id'));
					t.html('<span class="button_locked"><b class="button_locked_label">'+text+'</b></span>');
					setTimeout(function(){
						MessagesActions.close();
						t.html(text);
						$.post('/mail/?act=dataSend&func=reply', {im_ajax: true, peer: peer_id, dataID: data.join(',')}, function(){
							window.location = '/mail/?act=show&peer=' + peer_id;
						});
					}, 500);
				}
			},
			reset: function(t, peer_id, type = false)
			{
				$('#attachments').slideUp(400, function(e){
					$(this).remove();
				});
				$('.cp_attach_btn_sel').removeClass('cp_attach_btn_sel');
				$.post('/mail/?act=dataSend&func=reset', {im_ajax: true, peer: peer_id}, function(data){
					if(isObject(data) === false)
					{
						window.location = '/mail/?act=show&peer=' + peer_id;
						return true;
					}
					if(data.location)
						window.location = data.location;
				}, 'json');
			}
		}
	}(), mail = function(){
		var interval = (new Date).getTime() + request.update;
		function generateMess(node, data, deleteNode = true)
		{
			var tmpNode = '<div class="msg_item' + data.mess.mi_unread + '" data-id="' + data.mess.id + '" onclick="return MessagesActions.onMessageClick(event, this);">' + 
					'<div class="mi_iwrap"><a href="/id' + data.user.id_user + '">' + data.user.avatar + '</a></div>' + 
					'<div class="mi_cont"><div class="mi_head">' + 
		          	'<a class="mi_date" href="/mail?act=msg&amp;id=' + data.mess.id + '">' + data.mess.time + '</a>' + 
		          	'<a class="mi_author" href="/id' + data.user.id_user + '">' + data.user.group +  data.user.nick +  data.user.medal +  data.user.online +  '</a>' +
		          	'</div><div class="mi_body"><div class="mi_text">' + data.mess.msg + '</div>' +
		          	(data.mess.attachments === undefined ? '' : data.mess.attachments) +
		          	'</div></div></div>';
		    tmpNode = $(tmpNode).hide().fadeIn(400);
		    node.first().before(tmpNode);
		    if(deleteNode === true)
		    {
				if(request.limit <= node.length)
					node.last().fadeOut(400, function(){
						$(this).remove();
					});
			}
			return tmpNode;
		}
		return {
			keyup: function(e,t)
			{
				var a=$(e).val()||"";
				(a.length > 0) && (this.myTyping(t))
			},
			myTyping:function(peer_id)
			{
				var date = (new Date).getTime();
				if(interval <= date)
				{
					interval = date + 2e3;
					$.post('/mail/?act=dataSend&func=myTyping', {im_ajax: true, peer: peer_id});
					return false
				}
			},
			send: function(t, peer_id)
			{
				var config = $('#data-text'), attachments = $('#attachments'), text = $('textarea'), n = $('.vk_mail');
				var data = {min: config.attr('data-min'), max: config.attr('data-max'), textLength: text.val().length};
				if(attachments.length == 0 && data.textLength < data.min || data.textLength > data.max)
				{
					messageBox('warning', 'Сообщение должно быть длиной не менее ' + des2num(data.min, ['-го', '-х', '-ти']) + ' и не более ' + des2num(data.max, ['-го', '-х', '-ти']) + ' символов.</div>');
					return false;
				}
				t = $(t);
				t.before(ce('button', {className: 'button', id: 'nowrite_submit', innerHTML:'<span class="button_locked"><b class="button_locked_label">Отправить</b></span>', disabled:"disabled"}));
				t.hide();
				var node = $('#messages').children();

				$.post('/mail/?act=dataSend&func=dialog', {im_ajax: true, to: peer_id, from: 'dialog', message: text.val()}, function(data,textStatus, jqXHR){

					$('#nowrite_submit').remove();
					t.show();
					if(!data.mail)
						messageBox('error', 'Неизвестная ошибка.');

					if(textStatus != 'success' || isObject(data) === false)
					{
						messageBox('error', 'Неизвестная ошибка.');
						return false;
					}

					if(data.msg_box && data.type)
						messageBox(data.type, data.msg_box);

					if('ok' == data.type)
					{
						text.val('');
						attachments.length >= 1 && (attachments.slideUp(400, function(e){
							$(this).remove();
							$('.cp_attach_btn_sel').removeClass('cp_attach_btn_sel');
						}));
						generateMess(node, data);
						
					}
				}, 'json');
				return false;
			},
			updateMail: function(peer_id)
			{
				$.post('/mail/?act=dataSend&func=update', {im_ajax: true, peer: peer_id}, function(data){
					if(isObject(data) === false)
						return false;
					if(data.typing)
					        $('.near_btn').addClass('di_typing_now di_typing_animated');
					    else
					        $('.near_btn').removeClass('di_typing_now di_typing_animated');
					if(data.read)
						$('.mi_unread').removeClass('mi_unread');
					if(data.message.length > 0)
					{
						var node = $('#messages').children();
						for (var i = 0; i < data.message.length; i++)
							generateMess(node, data.message[i], false);
						$('#messages').children().each(function(key, item){
							if(request.limit <= key)
								$(item).fadeOut(400, function(){
									$(this).remove();
								});
						});
						node = $('#show_msg_box');
						node.length > 0 &&(node.remove());
					}
				}, 'json');
			}
		}
	}();