NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
/** * 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; } } }) }) })