您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
sc2tv.ru chat extra features
// ==UserScript== // @name peka2tv chat v1.x // @namespace sc2tv.ru // @description sc2tv.ru chat extra features // @author Winns // @copyright 27.04.2013, Winns // @include http://chat.sc2tv.ru/* // @version 1.1.5 // @grant GM_getValue // @grant GM_setValue // @grant GM_addStyle // @grant GM_getResourceText // @require http://code.jquery.com/jquery-2.0.2.min.js // @resource peka2tv_chat_style https://raw.github.com/Winns/p2tv/master/peka2tv_chat/peka2tv_chat.css // ==/UserScript== GM_addStyle (GM_getResourceText ("peka2tv_chat_style")); $(document).ready(function() { // variables var msgsLimit = 20, linksLimit = 20, uMsgLimit = 20, doScroll = true, chatHeight = $('#chat').height(); // variables end // functions begin // handle chat config box open/close function p2tv_chat_box_openclose(e) { var e = $( e ); if ( e.is(':visible') ) { e.fadeOut(150); } else { e.fadeIn(150); } } function p2tv_chat_checkInputLength() { if ( ($('[name="chat-text"]').val().length) > 21 ) { $('#chat').css('height', (chatHeight - 36) + 'px'); $('#chat').scrollTop( $('#chat').prop('scrollHeight') ); $('[name="chat-text"]').css('height', '54px'); } else { $('#chat').stop().css('height', chatHeight + 'px'); $('#chat').scrollTop( $('#chat').prop('scrollHeight') ); $('[name="chat-text"]').css('height', '18px'); } } function p2tv_chat_setCursorToEnd() { var e = $('[name="chat-text"]'); e.focus(); e[0].setSelectionRange(e.val().length, e.val().length); } // functions end // handle chat input size // get chat height on fullscreen button click $('#chat-switch-screen-btn').on('mouseup', function(){ chatHeight = $('#chat').height(); }); // replace chat input with textarea $('[name="chat-text"]').replaceWith('<textarea name="chat-text" class="chat-text"></textarea>'); // handle input size $('[name="chat-text"]').on('keyup keypress blur focus change', function(){ p2tv_chat_checkInputLength(); }); // force textarea message submit on enter $('[name="chat-text"]').on('keypress', function(e){ if(e.which == 13){ e.preventDefault(); unsafeWindow.WriteMessage(); return false; } }); // config frame // create config box $('<div id="p2tv_chat_config_wrapper" class="p2tv_chat_widget_wrapper">' +'<div id="p2tv_chat_config_close" class="p2tv_chat_widget_close"><em>CONFIG</em>CLOSE</div>' +'</div>' ).appendTo( '#chat-form' ); $('#chat-form').contents().not('form', '#p2tv_chat_config_wrapper').appendTo('#p2tv_chat_config_wrapper'); // create config button $('<a href="javascript:// config" id="p2tv_chat_configbox_btn" class="p2tv_chat_widget_btn" data-target="#p2tv_chat_config_wrapper" title="open/close">CFG</a>') .appendTo( '#chat-form' ); // handle chat config box open/close $('#p2tv_chat_configbox_btn').on('click', function() { p2tv_chat_box_openclose( '#p2tv_chat_config_wrapper' ); }); // handle chat config box close $('#p2tv_chat_config_close').on('click', function() { $('#p2tv_chat_config_wrapper').fadeOut(300); }); // admins msg's frame // create admins msg's button $('<a href="javascript:// config" id="p2tv_chat_adminsbox_btn" class="p2tv_chat_widget_btn" data-target="#p2tv_chat_adminsbox_wrapper" title="open/close">COL. MSG\'S</a>') .appendTo( '#chat-form' ); // create admins msg's box $('<div id="p2tv_chat_adminsbox_wrapper" class="p2tv_chat_widget_wrapper">' +'<div id="p2tv_chat_adminsbox_close" class="p2tv_chat_widget_close"><em>"COLORED NICKS" MESSAGES</em>CLOSE</div>' +'<div id="p2tv_chat_adminsbox" class="p2tv_chat_widget_content"></div>' +'</div>' ).appendTo( '#chat-form' ); function p2tv_getAdminsMsgsFromChat( scroll ) { if ( typeof(scroll)==='undefined' ) { scroll = doScroll; } // push adms msgs var msgsSelect = $('#chat .mess .nick').not('.role-user'); msgsSelect.each(function() { $('<div class="p2tv_chat_adminsbox_msg p2tv_chat_widget_msg" data-unique="'+ $(this).parent().attr('class') +'">' +$(this).prop('outerHTML') +$(this).parent().find('.text').prop('outerHTML') +'</div>' ).appendTo( '#p2tv_chat_adminsbox' ); }); // remove duplicates if ( msgsSelect.length < msgsLimit ) { var p2tv_adminsmsgs_duplicateCheck = {}; $( $('.p2tv_chat_adminsbox_msg').get().reverse() ).each (function () { if (p2tv_adminsmsgs_duplicateCheck.hasOwnProperty( $(this).attr('data-unique') )) { $(this).remove(); } else { p2tv_adminsmsgs_duplicateCheck[ $(this).attr('data-unique') ] = true; } }); } // delete amd msgs if over limit var msgsInFrame = $('.p2tv_chat_adminsbox_msg'); if ( msgsInFrame.length > msgsLimit ) { msgsInFrame.slice(0, msgsInFrame.length - msgsLimit).remove(); } if ( scroll == true ) { $('#p2tv_chat_adminsbox').scrollTop( $('#p2tv_chat_adminsbox').prop('scrollHeight') ); } } // handle chat admins msg's box open/close $('#p2tv_chat_adminsbox_btn').on('click', function() { p2tv_chat_box_openclose( '#p2tv_chat_adminsbox_wrapper' ); p2tv_getAdminsMsgsFromChat(); }); // handle chat admins msg's box close $('#p2tv_chat_adminsbox_close').on('click', function() { $('#p2tv_chat_adminsbox_wrapper').fadeOut(300); }); // links frame // create links button $('<a href="javascript:// config" id="p2tv_chat_linksbox_btn" class="p2tv_chat_widget_btn" data-target="#p2tv_chat_links_wrapper" title="open/close">LINKS</a>') .appendTo( '#chat-form' ); // create links box $('<div id="p2tv_chat_links_wrapper" class="p2tv_chat_widget_wrapper">' +'<div id="p2tv_chat_links_close" class="p2tv_chat_widget_close"><em>LINKS</em>CLOSE</div>' +'<div id="p2tv_chat_links" class="p2tv_chat_widget_content"></div>' +'</div>' ).appendTo( '#chat-form' ); // get links from chat function p2tv_getLinksFromChat( scroll ) { if ( typeof(scroll)==='undefined' ) { scroll = doScroll; } // push links var linksSelect = $('#chat .mess .text a'); linksSelect.each(function() { $('<div class="p2tv_chat_link_msg p2tv_chat_widget_msg" data-unique="'+ $(this).parent().parent().attr('class') +'">' +$(this).parent().parent().find('.nick').prop('outerHTML') +'<a href="'+ $(this).attr('href') +'" target="_blank">'+ $(this).attr('href') +'</a>' +'</div>' ).appendTo( '#p2tv_chat_links' ); }); // remove duplicates if ( linksSelect.length < linksLimit ) { var p2tv_links_duplicateCheck = {}; $( $('.p2tv_chat_link_msg').get().reverse() ).each (function () { if (p2tv_links_duplicateCheck.hasOwnProperty( $(this).attr('data-unique') )) { $(this).remove(); } else { p2tv_links_duplicateCheck[ $(this).attr('data-unique') ] = true; } }); } // delete links if over limit var linksInFrame = $('.p2tv_chat_link_msg'); if (linksInFrame.length > linksLimit) { linksInFrame.slice(0, linksInFrame.length - linksLimit).remove(); } if ( scroll == true ) { $('#p2tv_chat_links').scrollTop( $('#p2tv_chat_links').prop('scrollHeight') ); } } // handle chat links box open/close $('#p2tv_chat_linksbox_btn').on('click', function() { p2tv_chat_box_openclose( '#p2tv_chat_links_wrapper' ); p2tv_getLinksFromChat(); }); // handle chat links box close $('#p2tv_chat_links_close').on('click', function() { $('#p2tv_chat_links_wrapper').fadeOut(300); }); // msg's for user frame // msg's for user button $('<a href="javascript:// config" id="p2tv_chat_usermsg_btn" class="p2tv_chat_widget_btn" data-target="#p2tv_chat_usermsg_wrapper" title="open/close">4 YOU</a>') .appendTo( '#chat-form' ); // msg's for user box $('<div id="p2tv_chat_usermsg_wrapper" class="p2tv_chat_widget_wrapper">' +'<div id="p2tv_chat_usermsg_close" class="p2tv_chat_widget_close"><em>MESSAGES FOR YOU</em>CLOSE</div>' +'<div id="p2tv_chat_usermsg" class="p2tv_chat_widget_content"></div>' +'</div>' ).appendTo( '#chat-form' ); // get msgs from chat function p2tv_getUserMsgFromChat( scroll ) { if ( typeof(scroll)==='undefined' ) { scroll = doScroll; } // push user msgs var uMsgSelect = $('#chat .mess .message-to-user'); uMsgSelect.each(function() { $('<div class="p2tv_chat_usermsg_msg p2tv_chat_widget_msg" data-unique="'+ $(this).parent().attr('class') +'">' +$(this).parent().find('.nick').prop('outerHTML') +$(this).prop('outerHTML') +'</div>' ).appendTo( '#p2tv_chat_usermsg' ); }); // remove duplicates if ( uMsgSelect.length < uMsgLimit ) { var p2tv_uMsg_duplicateCheck = {}; $( $('.p2tv_chat_usermsg_msg').get().reverse() ).each (function () { if (p2tv_uMsg_duplicateCheck.hasOwnProperty( $(this).attr('data-unique') )) { $(this).remove(); } else { p2tv_uMsg_duplicateCheck[ $(this).attr('data-unique') ] = true; } }); } // delete user msgs if over limit var uMsgInFrame = $('.p2tv_chat_usermsg_msg'); if (uMsgInFrame.length > uMsgLimit) { uMsgInFrame.slice(0, uMsgInFrame.length - uMsgLimit).remove(); } if ( scroll == true ) { $('#p2tv_chat_usermsg').scrollTop( $('#p2tv_chat_usermsg').prop('scrollHeight') ); } } // handle msg's for user box open/close $('#p2tv_chat_usermsg_btn').on('click', function() { p2tv_chat_box_openclose( '#p2tv_chat_usermsg_wrapper' ); p2tv_getUserMsgFromChat(); }); // handle chat links box close $('#p2tv_chat_usermsg_close').on('click', function() { $('#p2tv_chat_usermsg_wrapper').fadeOut(300); }); // smiles frame // create new siles box $('<div id="p2tv_chat_smiles_wrapper" class="p2tv_chat_widget_wrapper">' +'<div id="p2tv_chat_smiles_close" class="p2tv_chat_widget_close"><em>SMILES</em>CLOSE</div>' +'<div id="p2tv_chat_smiles"></div>' +'</div>' ).appendTo( '#chat-form' ); // insert smiles to new siles box $('#chat-smile-panel img').each(function() { $(this).appendTo('#p2tv_chat_smiles'); }); // del old smile button and insert new $('#smile-btn').remove(); $('<a href="javascript:// view smiles" id="p2tv_chat_smilesbox_btn" class="p2tv_chat_widget_btn" data-target="#p2tv_chat_smiles_wrapper" title="open/close">SML</a>') .appendTo( '#chat-form' ); // handle chat smile box open/close $('#p2tv_chat_smilesbox_btn').on('click', function() { p2tv_chat_box_openclose( '#p2tv_chat_smiles_wrapper' ); }); // handle chat smile box close $('#p2tv_chat_smiles_close').on('click', function() { $('#p2tv_chat_smiles_wrapper').fadeOut(300); }); // handle smile insert on click $('#p2tv_chat_smiles img').on('click', function() { $('#p2tv_chat_smiles_wrapper').fadeOut(300); p2tv_chat_checkInputLength(); p2tv_chat_setCursorToEnd(); }); // handle widgets close $('.p2tv_chat_widget_btn').on('click', function() { $('.p2tv_chat_widget_wrapper').not( $($(this).attr('data-target')) ).hide(); }); // handele widgets scroll $('.p2tv_chat_widget_content').scroll( function(){ if ( $(this).outerHeight() == ($(this).get(0).scrollHeight - $(this).scrollTop())) { doScroll = false; } else { doScroll = true; } }); // modify chat default function to update widgets unsafeWindow.PutDataToChat = function( data ) { unsafeWindow.channelId = unsafeWindow.GetChannelId( unsafeWindow.chat_channel_id ); if( unsafeWindow.$.cookie( 'is_moderator') ) { data = data.replace('class="censured"', 'class="red"'); unsafeWindow.$( '#chat' ).html( data ); unsafeWindow.AddChannelTitles(); channelClassPath = 'div.channel-' + unsafeWindow.channelId; unsafeWindow.$( channelClassPath ).attr( 'style', 'background-color:#333333 !important;' ); } else { DIV = document.createElement( 'DIV' ); DIV.innerHTML = data; unsafeWindow.$( '#chat' ).html( $( 'div.channel-' + unsafeWindow.channelId, DIV) ); } if (unsafeWindow.autoScroll == 1) { unsafeWindow.$("#chat").scrollTop(10000000); } // new p2tv_getAdminsMsgsFromChat( false ); p2tv_getLinksFromChat( false ); p2tv_getUserMsgFromChat( false ); } // chrome cursor position fix (textarea) var orgFocus = unsafeWindow.$.fn.focus; unsafeWindow.$.fn.focus = function( arg1, arg2 ){ // call original Function var result = orgFocus.apply( this, arguments ); // do additional functionality p2tv_chat_checkInputLength(); p2tv_chat_setCursorToEnd(); return result; } });