iks: virtonomica форум

Добавление кнопки ответить как прочитанные на верх страницы. Так-же скрывает сообщения, подпись и информацию пользователя под spoiler, в зависимости от ваших настроек.

// ==UserScript==
// @name        iks: virtonomica форум
// @namespace   virtonomica
// @description Добавление кнопки ответить как прочитанные на верх страницы. Так-же скрывает сообщения, подпись и информацию пользователя под spoiler, в зависимости от ваших настроек.
// @include     http*://*virtonomic*.*/*/forum/forum_new/*/view*
// @include     http*://*virtonomic*.*/*/forum/forum_new/*/topic/*/view*
// @version     1.33
// @grant       none
// ==/UserScript==

var run = function() {
    $("div#content > table").each(function() {
        if($(this).html().indexOf('Создать тему') + 1 )
            $(this).append( $('div#content > table.pagingContainer > tbody > tr').html() );
    });
},

strCss = '.forumIks_exit { background: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\' width=\'10\' height=\'10\'><path fill=\'none\' stroke=\'rgb(142,143,143)\' stroke-width=\'2\' d=\'M0,0 L10,10 M0,10 L10,0\' /></svg>") no-repeat;'
            +' position: absolute; top:-5px; right:0; margin:0; padding:0; width:10px; height:10px; border: 4px solid gray; border-radius:50%; font-size:18px; color:darkred; cursor:pointer}'
        +' .forumIks_but { width:50%;  margin-top:10px; cursor:pointer; color:white; border:1px solid #708090; border-radius: 10px; background: #708090;'
            +' background: linear-gradient(top, #e1e1e1, #708090, #e1e1e1);'
            +' background: -webkit-linear-gradient(top, #e1e1e1, #708090, #e1e1e1);'
            +' background: -moz-linear-gradient(top, #e1e1e1, #708090, #e1e1e1);'
            +' background: -ms-linear-gradient(top, #e1e1e1, #708090, #e1e1e1);'
            +' background: -o-linear-gradient(top, #e1e1e1, #708090, #e1e1e1) }',
str = '<div id="forumSettings" style="position:fixed; margin:0 auto; padding:0; display:none; background: #EEE none repeat;'
     +' border: 2px solid #b4b4b4; box-shadow: 0 0 0 2px #708090, 0 0 0 4px #b4b4b4; border-radius:11px;"><div style="position:relative; margin:0; padding:0">'
     +'<h1 style="width:100%; text-align:center">Настройки форума</h1><table style="margin:5px">'
     +'<tr><td>Скрывать большие сообщения в форуме:</td><td>'
         +'<select name="topic">'
             +'<option value=0>Не скрывать</option>'
             +'<option value=1>Только первое</option>'
             +'<option value=2>По всему форуму</option>'
         +'</select>'
     +'</td></tr>'
     +'<tr name="topic"><td>Сколько символов скрывать:</td><td>'
             +'<input type="text" name="topic1" size="4" value="250" style="width:95%; border:2px solid #708090; border-radius:3px; background:#e1e1e1; text-align:right">'
     +'</td></tr>'
     +'<tr><td>Скрывать информацию об авторе:</td><td>'
         +'<select name="user">'
             +'<option value=0>Не скрывать</option>'
             +'<option value=1>Только первое</option>'
             +'<option value=2>По всему форуму</option>'
         +'</select>'
     +'</td></tr>'
     +'<tr name="user"><td>Как скрывать информацию об авторе:</td><td>'
         +'<select name="user1" style="width:100%">'
             +'<option value=0>С аватором</option>'
             +'<option value=1>Ниже аватора</option>'
         +'</select>'
     +'</td></tr>'
     +'<tr><td>Подпись:</td><td>'
         +'<select name="signature" style="width:100%">'
             +'<option value=0>Не скрывать</option>'
             +'<option value=1>Скрывать</option>'
             +'<option value=2>Удалять</option>'
         +'</select>'
     +'</td></tr>'
     +'</td></tr>'
     +'<tr><td align="center" colspan="2"><input type="button" value="Сохранить" class="forumIks_but"></td></tr>'
     +'</table>'
     +'<div id="forumExitBloc" title="Закрыть" class="forumIks_exit"></div>'
     +'</div></div>',

topic = function(){
    var str, str1,
        o = { 'top': '5px', 'left': '5px', 'topic': 1, 'topic1': 250, 'user': 2, 'user1': 1, 'signature': 0 },
        workTopic = function(id, p) {
            str = $(id).html();
            if(str.length > o['topic1']) {
                $(id).html( '<div class="bbSpoiler" style="padding:0; border:none"><div class="bbSpoilerTitle">'
                           +'<a href="#" onclick="return xbbSpoiler(this)" style="text-decoration:none"><span><strong><u>[+] Развернуть</u></strong>'
                           +'<p style="color:#000; font-weight:normal">' + str.replace(/<[^>]+>/g,'').replace(/\[\+\] spoiler/g,'').replace(/\[-\] spoiler/g,' ').substring(0, o['topic1']) + '...</p>'
                           +'</span><span style="display:none"><strong><u>[-] Свернуть</u></strong></span></a></div>'
                           +'<div class="bbSpoilerText" style="display: none"><hr>'+ str + '</div></div>');
            }
        },
        work = function(id, p) {
            str = '';
            $(id).find('script').remove();
            $(id).parent().css('width','170');
            if(o['user1']==1 && p) {
                str = '<table width="164" cellspacing="0" cellpadding="0" border="0" style="margin-left:4px;margin-bottom:5px;">' + $(id).find('table:first').html() + '</table>';
                $(id).find('table:first').remove();
            }
            $(id).html( str +'<div class="bbSpoiler" style="padding:0; border:none"><div class="bbSpoilerTitle">'
                       +'<a href="#" onclick="return xbbSpoiler(this)" style="text-decoration:none"><span><small><u>[+] Показать</u></small>'
                       +'</span><span style="display:none"><small><u>[-] Скрыть</u></small></span></a></div>'
                       +'<div class="bbSpoilerText" style="padding:0; display: none;">' + $(id).html() + '</div></div>' );
        };
    
    if( window.localStorage.getItem('forumSettings') ) {
        o = JSON.parse( window.localStorage.getItem('forumSettings') );
        if(!o.signature) o.signature = 0;
    }
    
    // Сообщения
    switch ( o['topic'] ) {
        case '1':
            workTopic( $('table.message_color2:first tr:nth-child(3) > td[id]'), true );
            break;
        case '2':
            $('table.message_color2 tr:nth-child(3) > td[id]').each(function(){
                workTopic( $(this), true );
            });
            break;
        default:
    }
    // Автор соообщения
    switch ( o['user'] ) {
        case '1':
            work( $('table.message_color2:first tr:nth-child(2) > td:nth-child(1) > noindex'), true );
            break;
        case '2':
            $('table.message_color2 tr:nth-child(2) > td:nth-child(1) > noindex').each(function() {
                work( $(this), true );
            });
            break;
        default:
    }
    // Подпись
    switch ( o['signature'] ) {
        case '1':
            $('table.message_color2 tr:nth-child(4) > td.signature').each(function(){
                work( $(this), false );
            });
            break;
        case '2':
            $('table.message_color2 tr:nth-child(4)').remove();
            break;
        default:
    }
    
    /* Настройки */
    $('#forumSettings').css({'top': ($('body').height()/2-$('#forumSettings').height()/2-5) + 'px',
                             'left': ($('body').width()/2-$('#forumSettings').width()/2-5) + 'px',
                             'display':'none'});
    $('#forumSettings select[name="topic"]').val(o['topic']).change();
    $('#forumSettings input[name="topic1"]').val(o['topic1']);
    $('#forumSettings select[name="user"]').val(o['user']).change();
    $('#forumSettings select[name="user1"]').val(o['user1']).change();
    $('#forumSettings select[name="signature"]').val(o['signature']).change();
    if( $('#forumSettings select[name="topic"]').val() == 0 ) $('#forumSettings tr[name="topic"]').css('display', 'none');
    if( $('#forumSettings select[name="user"]').val() == 0 ) $('#forumSettings tr[name="user"]').css('display', 'none');
    
    // Показать/Скрыть
    $('div.forumIks_exit').click( function() {
        $('#forumSettings').css('display', 'none');
    });
    $('#forumLinkSettings').click( function() {
        if( $('#forumSettings').css('display') == 'block' ) $('#forumSettings').css('display', 'none');
        else $('#forumSettings').css('display', 'block');
    });
    // Только цифры
    $('#forumSettings inputnput[name]').bind("change keyup input click", function() {
        $(this).val( parseInt( $(this).val().replace(/[^0-9]/g, '') ) | 0 );
    });
    // Отследим выбор select
    $('#forumSettings select').change(function() {
        switch ( $(this).attr('name') ) {
            case 'topic':
                if( $(this).val() > 0 ) $('#forumSettings tr[name="topic"]').removeAttr('style');
                else  $('#forumSettings tr[name="topic"]').css('display', 'none');
                break;
            case 'user':
                if( $(this).val() > 0 ) $('#forumSettings tr[name="user"]').removeAttr('style');
                else  $('#forumSettings tr[name="user"]').css('display', 'none');
                break;
            case 'signature':
                if( $(this).val() > 0 ) $('#forumSettings tr[name="signature"]').removeAttr('style');
                else  $('#forumSettings tr[name="signature"]').css('display', 'none');
                break;
            default:
        }
    });
    // Сохранить
    $('#forumSettings input.forumIks_but').click( function() {
        window.localStorage.setItem('forumSettings',
                                    JSON.stringify( {'top': $('#forumSettings').css('top') + 'px',
                                                     'left': $('#forumSettings').css('left') + 'px',
                                                     'topic': $('#forumSettings select[name="topic"]').val(),
                                                     'topic1': $('#forumSettings input[name]').val(),
                                                     'user': $('#forumSettings select[name="user"]').val(),
                                                     'user1': $('#forumSettings select[name="user1"]').val(),
                                                     'signature': $('#forumSettings select[name="signature"]').val()
                                                    } ));
        $('#forumSettings').css('display', 'none');
        location.reload();
    });
}

if(window.top == window) {
    if( window.location.href.indexOf('/topic') + 1 ) {
        $( '<style/>', {text: strCss } ).appendTo('head');
        $('#user_info.relams.user > div.floatright > span.menu').append('<span class="linka"><a id="forumLinkSettings" href="#">Настройки форума</a></span>');
        $('body').append( str );
        $( '<script/>', { text: '(' + topic.toString() + ')()' } ).appendTo('head');
    } else
        $( '<script/>', { text: '(' + run.toString() + ')()' } ).appendTo('head');
}