NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name SC2TV Features // @namespace sc2tv // @description Почему не добавить чуток фич на ск2тв // @include http://sc2tv.ru/* // @version 8 // @grant none // @grant GM_info // @require http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js // ==/UserScript== var tyanList = [ 'Parovozzik', 'Nika_Shin', 'Holly_Forve', 'vetakrot', 'dikaro4ka', 'octopuseva', 'kittyklawtv', 'hell_girl', ]; /* GM hax?... */ var GM_getValue = function (key,def) { return JSON.parse(localStorage[key] || '""') || def; }; var GM_setValue = function (key,value) { return localStorage[key]=JSON.stringify(value); }; /* jquery workarounds ? */ if ( window != null && window.jQuery != null ) { var $ = window.jQuery; } else if( unsafeWindow != null && unsafeWindow.jQuery != null ) { var $ = unsafeWindow.jQuery; } $.expr[':'].containsIgnoreCase = function (n, i, m) { return jQuery(n).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0; }; /**/ /* functions */ var setStreamClasses = function () { $('#streams_list_div > div').attr('class', 'stream_s'); $('#streams_list_div > div:visible:eq(0)').attr('class', 'stream_l'); $('#streams_list_div > div:visible:eq(1)').attr('class', 'stream_l'); for( var j=2; j<=7; j++ ) { $('#streams_list_div > div:visible:eq('+j+')').attr('class', 'stream_m'); } $('#streams_list_div > div').each(function() { var modList = $(this).attr('class').match(/stream_(\w)/); var mod = 's'; if( modList != null && modList[1] ) { mod = modList[1]; } $(this).find('a > img:first').attr('class', 'p_'+mod); $(this).find('a > div').attr('class', 'over_'+mod); $(this).find('a > div > div').attr('class', 'o_'+mod+'_bot'); }); }; var addStreamButtons = function () { var ignoredStreams = GM_getValue('ignored_streams_2', []); $("#streams_list_div > div").each(function() { var isIgnoredStream = $.inArray($(this).find(".st_nm").text().replace(/,\s(.+)$/, ''), ignoredStreams) === -1; if( isIgnoredStream && $(this).find(".js-remove-stream").length <= 0 ) { $(this).find(".st_nm").append("<span class='js-remove-stream' style='color:red;font-size:8pt;cursor:pointer;' title='Убрать стрим'> ×</span>"); $(this).find(".js-add-stream").remove(); } else if( !isIgnoredStream && $(this).find(".js-add-stream").length <= 0 ) { $(this).find(".st_nm").append("<span class='js-add-stream' style='color:green;font-size:8pt;cursor:pointer;' title='Вернуть стрим'> ✓</span>"); $(this).find(".js-remove-stream").remove(); } }); }; var addRemoveCategoryButtons = function () { $("#new_filter .g_list li").each(function() { if( $(this).find(".js-remove-category").length <= 0 ) { $(this).append(" <span class='js-remove-category' style='color:red;font-size:12pt;cursor:pointer;' title='Убрать категорию'>×</span>"); } }); $("#hidden_categories_ul li").each(function() { if( $(this).find(".js-remove-category").length <= 0 ) { $(this).append(" <span class='js-remove-category' style='color:red;font-size:12pt;cursor:pointer;' title='Убрать категорию'>×</span>"); } }); }; var filterStreams = function () { var val = document.getElementById("filter-streams").value; if( val.length <= 0 ) { $('#streams_list_div > div').show(); } else { $('#streams_list_div > div').hide(); $('#streams_list_div > div:containsIgnoreCase("'+val+'")').show(); } var ignoredCategories = GM_getValue('ignored_categories_2', []); $("#new_filter .g_list li").show(); $("#hidden_categories_ul li").show(); $.each(ignoredCategories, function(i, v) { $("#new_filter .g_list li a:containsIgnoreCase('"+v+"')").closest("li").hide(); $("#hidden_categories_ul li a:containsIgnoreCase('"+v+"')").closest("li").hide(); $("#streams_list_div > div").filter(function(){ return $.trim($(this).find(".st_cat").text()) == v; }).hide(); }); updateOtherCatsCount(); var ignoredStreams = GM_getValue('ignored_streams_2', []); $.each(ignoredStreams, function(i, v) { $("#streams_list_div > div:containsIgnoreCase('"+v+"')").each(function() { $(this).remove().insertAfter($("#streams_list_div > div:last")); }); }); var tnn = GM_getValue('tnn', 0); if( tnn === 1 ) { $.each(tyanList, function(i, v) { $("#streams_list_div > div:containsIgnoreCase('"+v+"')").hide(); }); } setStreamClasses(); }; var setIgnoredCategoriesList = function () { var html = '<div class="js-ignored-cats-wrap" style="width: 92%;margin: 0 auto;color: #fff;padding: 10px;"><span class="js-toggle-ignored-cats" style="cursor:pointer">« Игнорирумые категории</span><div class="js-ignored-cats" style="display:none;"></div></div>'; $("#new_filter").css({ height: "auto", "min-height": "90px" }); if( $(".js-ignored-cats-wrap").length <= 0 ) { $("#new_filter").append(html); } var ignoredCategories = GM_getValue('ignored_categories_2', []); $(".js-ignored-cats").html('Здесь ничего нет :('); if( ignoredCategories.length > 0 ) { $(".js-ignored-cats").html(''); $.each(ignoredCategories, function(i, v) { $(".js-ignored-cats").append("<div><span class=\"js-cat-title\">"+v+"</span> <span class=\"js-remove-from-ignored\" style='color:green;font-size:12pt;cursor:pointer;' title='Вернуть категорию'>✓</span></div>"); }); } }; var balanceCategoriesLists = function() { var mainCatsNumber = 5-$(".g_list li:visible").length; if( mainCatsNumber > 0 ) { $("#hidden_categories_ul li:lt("+mainCatsNumber+")").remove().insertAfter($(".g_list li:last")); } else if ( mainCatsNumber < 0 ) { var otherNumber = 5-$(".g_list li:visible").length; if( otherNumber < 0 ) { $(".g_list li:visible").slice(otherNumber).remove().appendTo($("#hidden_categories_ul")); } } updateOtherCatsCount(); }; var updateOtherCatsCount = function () { $("#hidden_categories_count").text($("#hidden_categories_ul li[style!='display: none;']").length); }; var init = function () { $("#filter-streams").keyup(); balanceCategoriesLists(); addRemoveCategoryButtons(); addStreamButtons(); setIgnoredCategoriesList(); }; /**/ $(function(){ if( document.getElementById("new_filter") != null ) { var filterStreamsValue = GM_getValue('filter_2-streams', ""); var searchBlock = document.createElement('div'); searchBlock.style.position = 'absolute'; searchBlock.style.top = '5px'; searchBlock.style.left = '40px'; searchBlock.innerHTML = '<input type="text" value="'+filterStreamsValue+'" id="filter-streams" placeholder="Фильтр стримов.." style="padding:1px 6px;">'; document.getElementById("new_filter").style.position = 'relative'; document.getElementById("new_filter").appendChild(searchBlock); var tnn = GM_getValue('tnn', 0); tyanButtonsHtml = '<div style="position: absolute;right: 10px;top: 10px;color: #fafafa;"><label><input type="checkbox" id="tnn_checkbox"'+(tnn===1?' checked="checked"':'')+'> ТНН</label></div>'; $("#new_filter").append(tyanButtonsHtml); $(document).on("keyup", "#filter-streams", function() { filterStreams(); GM_setValue('filter_2-streams', document.getElementById("filter-streams").value); }); $(document).on("click", ".js-remove-category", function() { var ignoredCategories = GM_getValue('ignored_categories_2', []); ignoredCategories.push($(this).parent("li").find('a').text().replace(/\s\(\d+\)$/, '')); GM_setValue('ignored_categories_2', ignoredCategories); init(); }); $(document).on("click", ".js-toggle-ignored-cats", function() { $(".js-ignored-cats").slideToggle(); }); $(document).on("click", ".js-remove-from-ignored", function() { var ignoredCategories = GM_getValue('ignored_categories_2', []); ignoredCategories = _.without(ignoredCategories, $(this).closest("div").find(".js-cat-title").text()); GM_setValue('ignored_categories_2', ignoredCategories); init(); $(this).parent("div").fadeOut(); }); $(document).on("click", ".js-remove-stream", function() { var ignoredStreams = GM_getValue('ignored_streams_2', []); ignoredStreams.push($(this).closest(".st_nm").text().replace(/,\s(.+)$/, '')); ignoredStreams = $.unique(ignoredStreams); GM_setValue('ignored_streams_2', ignoredStreams); init(); }); $(document).on("click", ".js-add-stream", function() { var ignoredStreams = GM_getValue('ignored_streams_2', []); ignoredStreams = _.without(ignoredStreams, $(this).closest(".st_nm").text().replace(/,\s(.+)$/, '')); ignoredStreams = $.unique(ignoredStreams); GM_setValue('ignored_streams_2', ignoredStreams); init(); }); $(document).on("click", "#tnn_checkbox", function() { GM_setValue('tnn', +$(this).is(':checked')); init(); }); init(); setInterval(init, 3000); } });