BombManual.com improvements

Improvements for the BombManual

Du musst eine Erweiterung wie Tampermonkey, Greasemonkey oder Violentmonkey installieren, um dieses Skript zu installieren.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

Sie müssten eine Skript Manager Erweiterung installieren damit sie dieses Skript installieren können

(Ich habe schon ein Skript Manager, Lass mich es installieren!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name            BombManual.com improvements
// @version         1.08
// @description     Improvements for the BombManual
// @author          Hexterity
// @match           http://www.bombmanual.com/manual/1/html/index.html
// @grant           none
// @namespace https://greasyfork.org/users/18430
// ==/UserScript==

$(document).ready(function () {
    
    $.fn.changeElementType = function(newType) {
        var newElements = [];

        $(this).each(function() {
            var attrs = {};

            $.each(this.attributes, function(idx, attr) {
                attrs[attr.nodeName] = attr.nodeValue;
            });

            var newElement = $("<" + newType + "/>", attrs).append($(this).contents());

            $(this).replaceWith(newElement);

            newElements.push(newElement);
        });

        return $(newElements);
    };
    
    $('body').append('<style>.highlight {background: green} .greyed {background: grey !important} .bold {font-weight: bold} .navigation_item, .sort, .click {cursor: pointer} .center {text-align: center}</style>');
   
    $('<div id="navigation" style="position:fixed;top:16px;left:16px;width: 256px;background:white;border:solid 2px #000;padding:2px"></div>').appendTo('body');
    
    $('.page-header-section-title').each(function () {       
        $('#navigation').append('<a class="navigation_item">' + $(this).html() + '</a><br />');
    });
    
    $('.navigation_item').click(function() {
        navigation_item = $(this).html();
        $('.page-header-section-title').each(function () {
            if (navigation_item == $(this).html()) {                
                $('html, body').animate({
                    scrollTop: $(this).offset().top
                });
            }
        });
    });
  
    $('.keypad-symbol-image').addClass('click').click(function() {
        src = $(this).attr('src');
        if ($(this).parent().hasClass('highlight')) highlight = false;
        else highlight = true;
        $('.keypad-symbol-image').each(function() {
            if (src == $(this).attr('src')) {
                if (highlight) $(this).parent().addClass('highlight');
                else $(this).parent().removeClass('highlight');
            }
        });
        column_highlighted = false;
        for (i = 1; i < 7; i++) {
            count = 0;
            $('body').find('.column_' + i).each(function () {
                if ($(this).hasClass('highlight')) count++;
                if (count == 4) {
                    for (j = 1; j < 7; j++) {
                        if (i != j) $('.column_' + j).addClass('greyed');
                    }
                    column_highlighted = true;
                }
            });
        }
        console.log('column_highlighted', column_highlighted);
        if ( ! column_highlighted) {
            for (i = 1; i < 7; i++) {
                if ($('.column_' + i).hasClass('greyed')) $('.column_' + i).removeClass('greyed');
            }
        }
    });
    
    keypad_column_count = 1;    
    $('body').find('.keypad-table-column').each(function() {
        $(this).addClass('column_' + keypad_column_count);
        keypad_column_count++;
        if (keypad_column_count == 7) keypad_column_count = 1;
    });
    
    $('body').append('<button id="reset_keypad">Reset</button>');
    keypad_table_position = $('.keypad-table').position();
    $('#reset_keypad').offset({top: keypad_table_position.top, left: keypad_table_position.left});
    $('#reset_keypad').click(function() {
       for (i = 1; i < 7; i++) {
           $('.column_' + i).removeClass('greyed').removeClass('highlight');
       }
    });
    
    $('.whos-on-first-step2-table th').each(function () {
        $(this).addClass('bold').changeElementType('td');
    });
    
    $('.whos-on-first-step2-table').css({background: 'white'});
    
    $('.whos-on-first-step2-table tbody').prepend('<tr class="sort"><th>Sort</th><td>Sort</td></tr>');
    
    $('.sort th, .sort td').click(function(){
        var table = $(this).parents('table').eq(0)
        var rows = table.find('tr:gt(0)').toArray().sort(comparer($(this).index()))
        this.asc = !this.asc
        if (!this.asc){rows = rows.reverse()}
        for (var i = 0; i < rows.length; i++){table.append(rows[i])}
    })
    
    $('.repeaters-table:eq(1)').after('<div id="simon_says_help" style="margin-top: 8px"><button id="reset_simon_says_help">Reset</button><br /><div id="simon_says_help_list"></div></div>');
    
    $('.repeaters-table td').addClass('click').click(function() {
        console.log($(this).html());
        $('#simon_says_help_list').append($(this).html() + ' ');
    });
    
    $('#reset_simon_says_help').click(function() {
        $('#simon_says_help_list').html('');
    });
    
    $('.red-table td').css({background: '#ffeeee'});
    $('.blue-table td').css({background: '#eeeeff'});
    $('.black-table td').css({background: '#eeeee'});
    
    $('.red-table tr, .blue-table tr, .black-table tr').click(function() {
        $(this).find('td').toggleClass('greyed');
    });
    
    $('.red-table td, .blue-table td, .black-table td').addClass('click');
    
    $('.red-table').prev().before('<button id="reset_sequences">Reset</button>');
    
    $('#reset_sequences').click(function () {
        $('.red-table td, .blue-table td, .black-table td').removeClass('greyed');
    });
    
    $('.password-table').after('<div class="center"><input type="text" id="password_help" /></div>');
    
    $('#password_help').keyup(function() {
        $('.password-table td').removeClass('greyed');
        columns = $(this).val().split(' ');
        $('.password-table td').each(function(key) {
            for (column_key = 0; column_key < columns.length; column_key++) {
                if (columns[column_key].indexOf($(this).html()[column_key]) == -1) $(this).addClass('greyed');
            }
        });
    });
    
    $('.password-table td').addClass('greyed');
    
});

var complicated_red = 0;
var complicated_blue = 0;
var complicated_star = 0;
var complicated_led = 0;

if (document.readyState != 'complete') $(window).load(window_load);
else window_load();
    
function window_load() {
    
    $('svg', $('#vennlegend')[0].contentDocument).find('text').each(function() {
        $(this).attr('text-decoration', 'line-through');
        $(this).click(function() {
            
            if ($(this).attr('text-decoration')) {
                status = 1;
                $(this).removeAttr('text-decoration');
            }
            else {
                status = 0;
                $(this).attr('text-decoration', 'line-through');
            }
            
            button_text = $(this).find('tspan:first').html();
           
            if (button_text == 'Wire has red') complicated_red = status;
            if (button_text == 'Wire has blue') complicated_blue = status;
            if (button_text.indexOf('symbol') > 0) complicated_star = status;
            if (button_text == 'LED is on') complicated_led = status;
            
            array_key = complicated_red.toString() + complicated_blue.toString() + complicated_star.toString() + complicated_led.toString();
            
            complicated_array = {
                '0000': 'C',
                '1000': 'S',
                '0100': 'S',
                '1100': 'S',
                '0010': 'C',
                '1010': 'C',
                '0110': 'D',
                '1110': 'P',
                '0001': 'D',
                '1001': 'B',
                '0101': 'P',
                '1101': 'S',
                '0011': 'B',
                '1011': 'B',
                '0111': 'P',
                '1111': 'D'
            }
            
            $('#venntable td').removeClass('highlight');
            
            $('#venntable td').each(function() {
                if ($(this).html() == complicated_array[array_key]) $(this).addClass('highlight');
            });
            
        });
         
    });
    $('#venntable td:eq(0)').addClass('highlight');
        
}

function comparer(index) {
    return function(a, b) {
        var valA = getCellValue(a, index), valB = getCellValue(b, index)
        return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.localeCompare(valB)
    }
}
function getCellValue(row, index){ return $(row).children('td').eq(index).html() }