dunkon / sc2tv-free-smiles.dev2-FIREFOX

/**
 * Created by Dunkon on 13.05.15.
 */
// ==UserScript==
// @name        sc2tv-free-smiles.dev2-FIREFOX
// @namespace   http://chat.sc2tv.ru/*
// @description sc2tv-free-smiles for firefox
// @include     http://chat.sc2tv.ru/*
// @version     1
// @grant       none
// @require     http://chat.sc2tv.ru/js/smiles.js
// ==/UserScript==

$(document).ready(function() {
	var clone = function (obj) {
	if (null == obj || "object" != typeof obj) return obj;
	var copy = obj.constructor();
	for (var attr in obj) {
		if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
	}
	return copy;
}

var freeSmiles = [];
var tmp;
var chatNewMessageInFocus = false;

for (var i = 0; i < smiles.length; i++)
{
	tmp = clone(smiles[i]);
	tmp['code'] = ':free-' + tmp['code'].substr(1);

	freeSmiles.push(tmp);
}


var freeSmileImg = function (smile) {
	return '<img src="http://chat.sc2tv.ru/img/' + smile.img + '" width="' + smile.width + '" height="' + smile.height + '" class="chat-smile"/>'
}

var countChatHeight = function (){
	var h = 0;
	var msgs = $('#chat > *');

	msgs.each(function(index, msg){
		h += $(msg).outerHeight(false);
	});

	return h;
};

var changeFreeSmiles = function () {
	var messages = $('#chat p.text')
	// var summHeight = 0;
	// var chatDiv = document.getElementById('chat');
	// console.log('scrollHeight 1', chatDiv.scrollHeight);
	
	var chat = $('#chat');
	var chatHeightBefore = countChatHeight();
	// console.log('chatHeightBefore', chatHeightBefore, chat.scrollTop() + chat.height());


	var scroll = false;
	var diff = chatHeightBefore - (chat.scrollTop() + chat.height());
	if ( diff < 100 ){
		scroll = true;
	}

	messages.each(function(index, message){
		message = $(message);

		for (var i = 0; i < freeSmiles.length; i++) {
			if (message.html().search(freeSmiles[i]['code']) != - 1) {
				message.html( message.html().replace(new RegExp(freeSmiles[i]['code'], 'g'), freeSmileImg(freeSmiles[i])) );
				// summHeight += parseInt(freeSmiles[i]['height']) - 12;
			}
		}
	});

	if (scroll){
		chat.scrollTop(99999999);
	}

	if (chatNewMessageInFocus){
		$('#chat-form form input').focus();
	}

	chatNewMessageInFocus = false;


	// var chatHeightAfter = countChatHeight();
	// console.log('chatHeightAfter', chatHeightAfter);

	// if (chatHeightBefore < (chatHeightAfter - 110)){
	// 	chat.scrollTop(99999999);
	// }


	// var st2 = chat.scrollTop();
	// console.log('scrollHeight 2', chatDiv.scrollHeight);
	// console.log('scrollHeight 2', chat.scrollTop());

	// console.log(chat.scrollTop(), summHeight)

	// chat.scrollTop( chat.scrollTop() + (chatHeightAfter - chatHeightBefore) );

	// var chatDiv = document.getElementById('chat');
	// chatDiv.scrollTop = chatDiv.scrollHeight;
};

changeFreeSmiles()
$('#chat').scrollTop(99999999);

var mo = new MutationObserver(changeFreeSmiles);

options = {
	'childList': true,
	'subtree': true
}

mo.observe(document.body, options);




function addImageToSmilePanel()
{
	var smileImg = document.getElementById('chat-smile-panel').getElementsByTagName('img');
	for (var i = 0; i <= smileImg.length; i++) {
		if (smileImg[i] && $(smileImg[i]).hasClass('chat-smile-not-available')){
			smileImg[i].title = changeSmileTitle(smileImg[i]);
			smileImg[i].innerHTML = smileImg[i].innerHTML.replace(new RegExp('<img>', 'g'), '<img class="chat-smile" src="http://chat.sc2tv.ru/img/' + smileImg[i].img + '" width="' + smileImg[i].width + '" height="' + smileImg[i].height + '" title="' + smileImg[i].title + '"/>')
		}
	};
}

function changeSmileTitle(img)
{
	return ':free-' + img.title.substr(1, img.title.length - 2) + ':';
}

addImageToSmilePanel();


jQuery(function ($) {
	$('#chat-form form input').bind('keydown', function(e){
		if (e.keyCode == 13){ // enter is pressed
			chatNewMessageInFocus = true;
		}
	});
});


// Открываем все смайлы и заменяем их с нужным префиксом
jQuery(function ($) {
	$('#chat-smile-panel img.chat-smile-not-available').removeClass('chat-smile-not-available').addClass('chat-smile');
	$('#chat-smile-panel img.chat-smile', this).click(function () {
		if ($(this).parents().attr('id') == 'smile-panel-tab-0' || $(this).parents().attr('id') == 'smile-panel-tab-6') {
			if ($(this).index() == 46) {
				//todo fix this shit
				if ($('input.chat-text').val()) {
					var a = $('input.chat-text').val() + ' ' + $(this).attr('title') + ' ';
					$('input.chat-text').val(a)
					$('#chat-smile-panel').hide();
					$('input.chat-text').focus();
					return true;
				} else {
					$('input.chat-text').val($(this).attr('title') + ' ');
					$('#chat-smile-panel').hide();
					$('input.chat-text').focus();
					return true;
				}
			}
			return false;
		} else {
			if ($('input.chat-text').val()) {
				var a = $('input.chat-text').val() + ' ' + $(this).attr('title') + ' ';
				$('input.chat-text').val(a)
				$('#chat-smile-panel').hide();
				$('input.chat-text').focus();
				return true;
			} else {
				$('input.chat-text').val($(this).attr('title') + ' ');
				$('#chat-smile-panel').hide();
				$('input.chat-text').focus();
				return true;
			}
		}
	})
})
})