NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name forums.bgdev.org // @author TNT // @description Add ajax functionality to mark forums as read. // @icon https://raw.github.com/sizzlemctwizzle/GM_config/master/gm_config_icon_large.png // @include http://forums.bgdev.org/ // @include http://forums.bgdev.org/index.php? // @include http://forums.bgdev.org/index.php?showforum* // @include http://forums.bgdev.org/index.php?act=idx // @include http://forums.bgdev.org/index.php?showtopic* // @require http://tnt-soft.net/GreaseMonkey/js/jquery-1.11.1.min.js // @require http://tnt-soft.net/GreaseMonkey/js/jquery.timers.js // @resource 0 http://tnt-soft.net/GreaseMonkey/img/numbers/0.gif // @resource 1 http://tnt-soft.net/GreaseMonkey/img/numbers/1.gif // @resource 2 http://tnt-soft.net/GreaseMonkey/img/numbers/2.gif // @resource 3 http://tnt-soft.net/GreaseMonkey/img/numbers/3.gif // @resource 4 http://tnt-soft.net/GreaseMonkey/img/numbers/4.gif // @resource 5 http://tnt-soft.net/GreaseMonkey/img/numbers/5.gif // @resource 6 http://tnt-soft.net/GreaseMonkey/img/numbers/6.gif // @resource 7 http://tnt-soft.net/GreaseMonkey/img/numbers/7.gif // @resource 8 http://tnt-soft.net/GreaseMonkey/img/numbers/8.gif // @resource 9 http://tnt-soft.net/GreaseMonkey/img/numbers/9.gif // @resource left http://tnt-soft.net/GreaseMonkey/img/numbers/left.gif // @resource right http://tnt-soft.net/GreaseMonkey/img/numbers/right.gif // @resource loading http://tnt-soft.net/GreaseMonkey/img/loading.gif // @resource settings http://tnt-soft.net/GreaseMonkey/img/icon-settings-small.png // @resource pin http://tnt-soft.net/GreaseMonkey/img/pins/pin.png // @resource pin1 http://tnt-soft.net/GreaseMonkey/img/pins/pin1.png // @grant GM_getResourceURL // @version 1.0.5 // @run-at document-end // ==/UserScript== forums = []; title = ''; new_title = ''; selector = '#ipbwrapper > form > div.tableborder > table > tbody > tr > td.row4:nth-child(3) > a[href$="getnewpost"]'; forum_url = ''; match = ''; load_index = 0; process_index = 0; cnt = 0; cnt_str = ''; timeout = 250; // minimum is 250 links = $('table[id^="cat_"] > tbody > tr > td:first-child.row4 > a:first-child'); // check for new messages $(document.body).oneTime(500, 'check_messages', checkMessages); function checkMessages(){ _parent = $('#userlinks'); link = $('#userlinks > tbody > tr:first-child > td:last-child > a').eq(2); if(link.length > 0){ txt = link.text(); tmp = txt.split(' '); if(parseInt(tmp[0]) > 0){ _parent.css({ 'background-color': '#ff9260' }); link.css({ 'color': 'red', 'font-weight': 'bold' }); } else{ _parent.removeAttr('style'); link.removeAttr('style'); } } } // -- start: cache loading_icon = $('<img />'); loading_icon.attr('width', 28); loading_icon.attr('height', 28); loading_icon.attr('src', GM_getResourceURL('loading')); loading_icon.css('display', 'none'); $(document.body).prepend(loading_icon); // -- end: cache if(links.length > 0){ links.each(function(index, el){ // mark forum as read $(el).on('click', click_handler); title = $(el).attr('title'); new_title = title + ' (via AJAX)'; $(el).attr('title', new_title); // badges forum_url = $(el).parent('td.row4').next('td.row4').find('b:first-child > a').attr('href'); match = forum_url.match(/showforum=([\d]+)$/m); forum_url += '&rand='+Math.random(); if (match != null) { forums[forums.length] = { id: match[1], url: forum_url }; $(el).attr('link', match[1]); } }); if(forums.length > 0){ // start processing badges $(document.body).everyTime(timeout, 'load', load_results); } } keyword = 'rvc'; trs = $('body > div#ipbwrapper > div.tableborder > div.maintitle + div.postlinksbar ~ table[border=0] > tbody > tr:nth-child(2)'); tds = trs.find('td:nth-child(2).post1, td:nth-child(2).post2'); elements = tds.find("div.postcolor:not(table,tbody,tr,td#QUOTE,span.edit):contains('"+keyword+"')"); console.log(elements); if(elements.length > 0){ elements.each(function(index, el){ cont = $(el).html(); re = new RegExp("("+keyword+")", "i"); // wrap keywords r = cont.replace(re, "<span style='position: relative;' rel='keyword_wrapper'>$1</span>"); //console.log(r); $(el).html(r); }); } wrapers = $('span[rel="keyword_wrapper"]'); wrapers_cnt = 0; if(wrapers.length > 0){ // check if wraper is in last "edited container" wrapers.each(function(index, el){ // if wraper is not in last "edited container" if($(el).parents('span.edit').length == 0){ wrapers_cnt++; wraper_width = parseInt($(el).css('width')); var img = $('<img />'); img.attr('id', 'pin_'+wrapers_cnt); img.attr('src', GM_getResourceURL('pin1')); img.attr('rel', 'keyword_pin'); img.css({ 'position': 'absolute', 'top': '-35px', 'left': ((wraper_width / 2) - 15)+'px', 'cursor': 'pointer' }); $(el).append(img); } }); } if(wrapers_cnt > 0){ for(i=1; i<=wrapers_cnt; i++){ var span = $('<span />'), i_str = i.toString(); for(j=0; j<i_str.length; j++){ img = $('<img />'); img.attr('src', GM_getResourceURL(i_str.charAt(j))); span.append(img); } span.attr('rel', 'clicker'); span.attr('pin', 'pin_'+i); span.css({ 'display': 'inline-block', 'position': 'fixed', 'top': (i*22)+'px', 'left': '0px', 'padding': '5px', 'background-color': '#660000', 'cursor': 'pointer' }); $(document.body).append(span); } } $('span[rel="clicker"]').on('click', function(e){ pin = '#'+$(this).attr('pin'); ofs = $(pin).offset(); console.log(ofs.top); $('html').animate({ scrollTop: ofs.top-20 }, 1000); }); $('img[rel="keyword_pin"]').on('click', function(e){ pin = $(this).attr('id'); $(this).remove(); $('span[rel="clicker"][pin="'+pin+'"]').animate({ 'left': '-=20px' }, 1000); }); function click_handler(e){ var this_el, url, img, img_url, match, loader; e.preventDefault(); this_el = $(this); url = this_el.attr('href'); img = this_el.children('img'); img_url = img.attr('src'); match = img_url.match(/^(.+\/)([\w]+)_(\w+\.\w+)$/m); if(match != null){ loader = $('<img />'); loader.attr('id', 'loader'); loader.attr('width', 28); loader.attr('height', 28); loader.attr('src', GM_getResourceURL('loading')); this_el.css('display', 'none').after(loader); $.ajax({ url: url, type: 'GET', global: false, success: function(){ this_el.remove(); loader.attr('border', 0); loader.attr('alt', 'No New Posts'); loader.attr('src', match[1]+match[2]+'_no'+match[3]); }, error: function(){ loader.remove(); this_el.css('display', 'inline').removeAttr('style'); } }); } } function load_results(){ var result_div; if(forums[load_index] != undefined){ result_div = $('<div />'); result_div.attr('id', 'result_div_'+forums[load_index]['id']); result_div.css('display', 'none'); $(document.body).append(result_div); // load page fragment result_div.load(forums[load_index]['url']+' '+selector); load_index++; } else{ // stop processing badges $(document.body).stopTime('load', load_results); // start processing results $(document.body).everyTime(timeout, 'process', process_results); } } function process_results(){ var result_div, counter, tmp_img; if(forums[process_index] != undefined){ result_div = $('#result_div_'+forums[process_index]['id']); cnt = result_div.children('a').length; if(cnt > 0){ cnt_str = cnt.toString(); if(typeof cnt_str == 'string'){ counter = $('<div />'); counter.css({ 'position': 'absolute', 'top': '-6px', 'left': '0px' }); tmp_img = $('<img />'); tmp_img.attr('src', GM_getResourceURL('left')); counter.append(tmp_img); for(i=0; i<cnt_str.length; i++){ tmp_img = $('<img />'); tmp_img.attr('src', GM_getResourceURL(cnt_str.charAt(i))); counter.append(tmp_img); } tmp_img = $('<img />'); tmp_img.attr('src', GM_getResourceURL('right')); counter.append(tmp_img); $('a[link="'+forums[process_index]['id']+'"]').css('position', 'relative').append(counter); } } process_index++; } else{ // stop processing results $(document.body).stopTime('process', process_results); // start cleanup process process_index = 0; $(document.body).everyTime(timeout, 'cleanup', cleanup); } } function cleanup(){ var _div; if(forums[process_index] != undefined){ _div = $('#result_div_'+forums[process_index]['id']); _div.remove(); forums[process_index] = null; process_index++; } else{ $(document.body).stopTime('cleanup', cleanup); } }