// ==UserScript== // @name RC-FPV // @version 0.16.11 // @description Przydatne usprawnienia do forum rc-fpv.pl. Ignorowanie tematów na podstawie http://www.home-barista.com/news/ignore-this-thread-t3646.html#p158066 // @author kamilborkowski, pawelsky, markac // @match https://rc-fpv.pl/* // @match http://rc-fpv.pl/* // @require https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js // @require https://raw.github.com/sizzlemctwizzle/GM_config/master/gm_config.js // @grant GM_getValue // @grant GM_setValue // @grant GM_log // @grant GM_registerMenuCommand // @updateURL https://rc-fpv.pl/jrd/rcfpv.user.js // @downloadURL https://rc-fpv.pl/jrd/rcfpv.user.js // ==/UserScript== var rcfpv_script_settings; var rcfpvconfig = {}; rcfpvconfig.devmode = { 'label': 'Tryb developerski (w konsoli)', 'type': 'checkbox', 'default': false }; rcfpvconfig.ignore = { 'label': 'Ignorowanie tematów', 'type': 'checkbox', 'default': true }; rcfpvconfig.resetignored = { 'label': 'Zresetuj wszystkie ignorowane tematy', 'type': 'checkbox', 'default': false }; rcfpvconfig.resetignoredspecified = { 'label': 'Zresetuj ignorowany wybrany tematy', 'type': 'select', 'options': [''] }; rcfpvconfig.postignoreurl = { 'label': 'Przejdź do strony po zignorowaniu tematu', 'type': 'text', 'default': '' }; rcfpvconfig.radiation = { 'label': 'Pokaż wykres promieniowania', 'type': 'checkbox', 'default': true }; rcfpvconfig.setreadleft = { 'label': '"Oznacz wszystkie fora jako przeczytane" przesuwaj na lewo', 'type': 'checkbox', 'default': true }; rcfpvconfig.movethreadsearchup = { 'label': 'Przenieś do góry okno wyszukiwania w wątku', 'type': 'checkbox', 'default': true }; rcfpvconfig.unreadcount = { 'label': 'Pokazuj ilość nieprzeczytanych postów', 'type': 'checkbox', 'default': true }; rcfpvconfig.printview = { 'label': 'Dodaj link "Podgląd wydruku całego tematu"', 'type': 'checkbox', 'default': true }; rcfpvconfig.emoticons = { 'label': 'Pokazuj emotikony w szybkiej odpowiedzi', 'type': 'checkbox', 'default': true }; rcfpvconfig.showallunread = { 'label': 'Pokazuj nieprzeczytane na jednej stronie', 'type': 'checkbox', 'default': true }; rcfpvconfig.openallintabs = { 'label': 'Dodawaj link "Otwórz wszystkie w nowych oknach"', 'type': 'checkbox', 'default': true }; rcfpvconfig.tapatalktrollenable = { 'label': 'Troluj użyszkodników Tapatalka zdaniem', 'type': 'checkbox', 'default': true }; rcfpvconfig.tapatalktroll = { 'label': '', 'type': 'text', 'default': '
Latam Phantomem bez fixa w CTR!!! Trololololo!@!1@
' }; rcfpvconfig.drontrollenable = { 'label': 'Troluj drona słowem', 'type': 'checkbox', 'default': false }; rcfpvconfig.drontroll = { 'label': '', 'type': 'text', 'default': 'puzon' }; rcfpvconfig.bbcodeurl = { 'label': 'Dodaj BBCode [ URL= ]', 'type': 'checkbox', 'default': 'true' }; rcfpvconfig.limitcodebox = { 'label': 'Ogranicz rozmiar okien z kodem (BBCode "Code")', 'type': 'checkbox', 'default': 'true' }; rcfpvconfig.limitcodeboxsize = { 'label': 'maksymalna wysokość w pikselach (co najmniej 50)', 'type': 'int', 'min': 50, 'default': '300' }; rcfpvconfig.limitquotebox = { 'label': 'Ogranicz rozmiar okien z cytatem (BBCode "Quote")', 'type': 'checkbox', 'default': 'true' }; rcfpvconfig.limitquoteboxsize = { 'label': 'maksymalna wysokość okna w pikselach (co najmniej 50)', 'type': 'int', 'min': 50, 'default': '300' }; rcfpvconfig.mytopicsprefix = { 'label': 'Oznacz tematy z moim udziałem prefixem', 'type': 'text', 'default': '***' }; rcfpvconfig.headerbackground = { 'label': 'Tło nagłówka', 'type': 'text', 'default': '' }; rcfpvconfig.additionalcss = { 'label': 'Dodatkowy css', 'type': 'textarea' }; //debugLog("Begin userscript execution"); jQuery(document).ready(function() { GM_config.init( { 'id': 'rcfpv_config', 'title': 'Ustawienia skryptu RC-FPV', 'fields': rcfpvconfig, 'css': '.config_var input[type="checkbox"] { float:left;margin: 0 4px; } .config_var{border-bottom: 1px solid #eee;padding-bottom: 4px;} #rcfpv_config_additionalcss_field_label{display: block;float: left;}', 'events': {'save': function() { if(GM_config.get('resetignored') == true) { debugLog("reset ignore list"); GM_setValue("rcfpv_script_settings",{hiddenTopics:{}}) GM_config.fields['resetignored'].value = false; GM_config.fields['resetignored'].reload(); GM_config.save(); } if(GM_config.get('resetignoredspecified') != '') { debugLog("resetignoredspecified"); for(item in rcfpv_script_settings.hiddenTopics) { if(rcfpv_script_settings.hiddenTopics[item] == GM_config.get('resetignoredspecified')) { delete rcfpv_script_settings.hiddenTopics[item]; GM_setValue("rcfpv_script_settings", rcfpv_script_settings.toSource()); } } GM_config.fields['resetignoredspecified'].value = ''; GM_config.fields['resetignoredspecified'].reload(); } GM_config.close(); }} }); ///////////////////////// Ignorowanie tematów ///////////////////////// if(GM_config.get('ignore')) { try{ debugLog("Ready"); var regex = /t=(\d+)/g; debugLog("Loading blocked thread list"); rcfpv_script_settings = eval(GM_getValue("rcfpv_script_settings",{hiddenTopics:{}})); // dynamiczne dodawanie listy ignorowanych tematów var $options = ['']; for(item in rcfpv_script_settings.hiddenTopics) { $options.push(rcfpv_script_settings.hiddenTopics[item]); } rcfpvconfig.resetignoredspecified = { 'label': 'Zresetuj ignorowany wybrany tematy', 'type': 'select', 'options': $options }; GM_config.init({'id': 'rcfpv_config', 'fields': rcfpvconfig}); //////////////////////////////////////////// GM_log(rcfpv_script_settings.toSource()); debugLog("Searching for threads"); jQuery("tr").filter(function() { return jQuery(this).find('a.topictitle').length; }).each(function() { addIgnoreToTopic(jQuery(this)); }); if(jQuery("input[name='t']").length) { var topicId = jQuery("input[name='t']").val(); jQuery('th:contains("Wiadomość")').append("[x]"); } jQuery(document).on('click', 'a.pbe', function() { try{ var $topicTitle = jQuery(this).parents('td').find('a.topictitle').text(); var $url = ""; if($topicTitle == '') { $topicTitle = jQuery('#pageheader .titles').text(); $url = GM_config.get('postignoreurl'); } if(confirm('Na pewno chcesz ignorować temat "' + $topicTitle + '"?')) { jQuery(this).parents("tr").hide("slow"); rcfpv_script_settings.hiddenTopics[jQuery(this).attr("href")] = $topicTitle; GM_setValue("rcfpv_script_settings", rcfpv_script_settings.toSource()); if($url != '') window.location = $url; } } catch (err) {GM_log(err.toSource());} return false; }); } catch (err) {GM_log("Fatal exception inspecting topic:" + err.toSource());} } //////////////////////////// Promieniowanie /////////////////////////// if(GM_config.get('radiation')) { jQuery('#logodesc').append(''); } //////////////////////////// "Oznacz (...)" na lewo /////////////////////////// if(GM_config.get('setreadleft')) { if(jQuery('span.titles:contains("Nieprzeczytane posty")').length > 0) { jQuery('a:contains("Oznacz wszystkie fora jako przeczytane")').parent().css('text-align','left'); } } //////////////////////////// Okno wyszukiwania w wątku na górę /////////////////////////// if(GM_config.get('movethreadsearchup')) { jQuery('#pageheader').before(jQuery('input[type="hidden"][name="sf"][value="msgonly"]').parent().css('float', 'right')); } //////////////////////////// Prefix moich tematów /////////////////////////// if(!GM_config.get('showallunread')) { setPrefix(); } //////////////////////////// Ilość nieprzeczytanych /////////////////////////// if(GM_config.get('unreadcount')) { jQuery.ajax({ url: "/search.php?search_id=unreadposts", context: document.body }).done(function(data) { var text = jQuery(data).find('.gensmall:contains("Znalezione wyniki")').text(); if(text === '') { var number = 1; } else { var number = text.replace(/^.+Znalezione wyniki: /,'').replace( /[^\d.]/g, '' ); } jQuery('a:contains("Nieprzeczytane posty")').text('Nieprzeczytane posty (' + number + ')'); }); } //////////////////////////// Printview całego tematu /////////////////////////// if(GM_config.get('printview')) { if(getUrlParameter('printview') == '1') { var $pages = jQuery('table:first tr:last td:last strong:last').text(); for($i=1;$i < $pages;$i++) { jQuery('table:last').before(''); var $url = document.location.href + '&start=' + ($i*15); jQuery("#loadedContent" + $i).load($url + " table:not(:first):not(:last)"); } } else { if(jQuery('[title="Podgląd wydruku"]').length > 0) jQuery('[title="Powiadom znajomego o tym temacie"]').after(' | Podgląd wydruku całego tematu'); } } //////////////////////////// Emotikony /////////////////////////// if(GM_config.get('emoticons')) { jQuery('textarea[name="message"]').parents('td').prev().load('/posting.php?mode=reply&f=2&t=' + getUrlParameter('t') + ' table:contains("Emotikony"):eq(1)'); } //////////////////////////// Wszystkie nieprzeczytane na jednej stronie /////////////////////////// if(GM_config.get('showallunread')) { jQuery('a:contains("Nieprzeczytane posty")').attr('href',jQuery('a:contains("Nieprzeczytane posty")').attr('href') + '&viewall=1'); var $pages = jQuery('.nav .page-sep').length; if($pages > 0) { var $nextpage_url = jQuery('.nav a[href!="#"]:first').attr('href').split('?')[1]; var $start_param = getUrlParameter('start',$nextpage_url); if(getUrlParameter('viewall') == '1') { loadNextPage($pages,$start_param); jQuery('div.nav').remove(); } else { setPrefix(); } } else { setPrefix(); } } //////////////////////////// Tło nagłówka /////////////////////////// if(GM_config.get('headerbackground')) { var $background = 'url("' + GM_config.get('headerbackground') + '") no-repeat'; jQuery('#logodesc table').css('background',$background); } //////////////////////////// Dodatkowy css /////////////////////////// if(GM_config.get('additionalcss')) { jQuery('body').append(''); } //////////////////////////// Otwórz wszystkie w nowych zakładkach /////////////////////////// if(GM_config.get('openallintabs')) { jQuery('a:contains("Oznacz wszystkie fora jako przeczytane")').after(' | Otwórz wszystkie w nowych oknach'); jQuery('#openallintabs').click(function() { jQuery('.topictitle:visible').each(function( index, item ) {window.open(jQuery(item).attr('href'))}); }); } //////////////////////////// Tapatalk troll /////////////////////////// if(GM_config.get('tapatalktroll') && GM_config.get('tapatalktrollenable')) { // var regex = new RegExp(/Wys.ane za? .*Tapatalka?\.?$/i); // var regex = new RegExp(/Wys.an[eo] za? .*Tapatalka?\.?$/i); // var regex = new RegExp(/(Sen[dt]|Wys.an[eo]) (by|from|za?) .*Tapatalka?\.?$/i); // var regex = new RegExp(/(Sen[dt]|Wysy?.an[eoy]) (by|from|za?) .*Tapatalk.{0,4}$/i); var regex = new RegExp(/(Sen[dt]|Wysy?.an[eoy]|Gesendet) (by|from|za?|von) .*Tapatalk.{0,4}$/i); var comp = new RegExp('href="(.)*' + location.host); jQuery('.postbody').filter(function () { return regex.test(jQuery(this).text()); }).each(function() { jQuery(this).html(jQuery(this).html() .replace(regex,GM_config.get('tapatalktroll')) ); }); } //////////////////////////// Dron troll /////////////////////////// if(GM_config.get('drontroll') && GM_config.get('drontrollenable')) { var regex = new RegExp('(?!<.*?)\(dron)\(?![^<>]*?>)', 'gi'); jQuery('.postbody').filter(function () { return regex.test(jQuery(this).text()); }).each(function() { jQuery(this).html(jQuery(this).html() .replace(regex,GM_config.get('drontroll')) ); }); } //////////////////////////// BBCode [ URL= ]/////////////////////////// if(GM_config.get('bbcodeurl')) { var $button = jQuery('input[name="addbbcode16"]'); var $copy = $button.clone(true).attr({value: 'URL=', onclick: 'var url = prompt(\'Podaj URL\'); bbfontstyle(\'[url=\' + url + \']\', \'[/url]\');'}); $button.after("\n", $copy); } //////////////////////////// Limit code box size /////////////////////////// if(GM_config.get('limitcodebox')) { jQuery('div.codecontent').attr({style: "overflow: auto; max-height: " + GM_config.get('limitcodeboxsize') + "px"}).each(function() { if(jQuery(this).prop('scrollHeight') > jQuery(this).prop('clientHeight')) { jQuery(this).prev('div.codetitle').append(" (przewiń aby zobaczyć całość)"); } }); } //////////////////////////// Limit quote box size /////////////////////////// if(GM_config.get('limitquotebox')) { jQuery('div.quotecontent').attr({style: "overflow: auto; max-height: " + GM_config.get('limitquoteboxsize') + "px"}).each(function() { if(jQuery(this).prop('scrollHeight') > jQuery(this).prop('clientHeight')) { jQuery(this).prev('div.quotetitle').append(" (przewiń aby zobaczyć całość)"); } }); } //////////////////////////// Fix external links /////////////////////////// if((GM_config.get('tapatalktroll') && GM_config.get('tapatalktrollenable')) || (GM_config.get('drontroll') && GM_config.get('drontrollenable'))) { jQuery.expr[':'].external = function (a) { var PATTERN_FOR_EXTERNAL_URLS = /^(\w+:)?\/\//; var href = jQuery(a).attr('href'); return href !== undefined && href.search(PATTERN_FOR_EXTERNAL_URLS) !== -1; }; jQuery('.postbody').each(function() {jQuery(this).find('a:external').attr('target','_blank')}); } ////////////////////////////// GM_config ////////////////////////////// jQuery('#menubar a:last').after(" | [Ustawienia skryptu]"); jQuery("a.rcfpv_menu").click(function(e) { try{ GM_config.open(); } catch (err) {GM_log(err.toSource());} return false; }); ////////////////////////////// postimage.org ////////////////////////////// var script = document.createElement("SCRIPT"); script.type ="text/javascript"; script.src ="http://mod.postimage.org/phpbb3-polish.js"; script.charset = "utf-8"; document.head.appendChild(script); setTimeout(function(){postimage_insert();},3000); }); /////////////////////////////// Funkcje /////////////////////////////// function debugLog(msg) { if (GM_config.get('devmode')) { GM_log("RC-FPV debug: " + msg); } } function getUrlParameter(sParam,sPageURL) { if(typeof sPageURL == 'undefined') var sPageURL = window.location.search.substring(1); var sURLVariables = sPageURL.split('&'); for (var i = 0; i < sURLVariables.length; i++) { var sParameterName = sURLVariables[i].split('='); if (sParameterName[0] == sParam) { return sParameterName[1]; } } } function setPrefix() { if(GM_config.get('mytopicsprefix')) { jQuery('a.topictitle,p.topictitle a').each(function(i,item) { if(jQuery(item).parents('tr').find('img[src*="mine.gif"]').length > 0) { jQuery(item).html(GM_config.get('mytopicsprefix') + ' ' + jQuery(item).text()); } }); } } function loadNextPage($limit,$start_param,$current) { if(typeof $current == 'undefined') $current = 1; if($current > $limit) { setPrefix(); return false; } jQuery.ajax({ url: "/search.php?search_id=unreadposts&start=" + $current*$start_param, context: document.body }).done(function(data) { var rows = jQuery(data).find('table:contains("Oznacz wszystkie fora jako przeczytane") tr[valign="middle"]'); for($i2=0;$i2 < rows.length;$i2++) { jQuery('table:contains("Oznacz wszystkie fora jako przeczytane") tr:eq(-2)').after('