Greasy Fork is available in English.

HWM_WH_Helper

Сохранение последних введенных данных по артам, работа без перезагрузки при сохранении новых параметров или взятии артов со склада, сохраненение всего одной кнопкой, и другое.

Versione datata 29/09/2015. Vedi la nuova versione l'ultima versione.

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

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

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==UserScript==
// @name        HWM_WH_Helper
// @namespace   Рианти
// @description Сохранение последних введенных данных по артам, работа без перезагрузки при сохранении новых параметров или взятии артов со склада, сохраненение всего одной кнопкой, и другое.
// @include     http://www.heroeswm.ru/sklad_info.php?id=*&cat=*
// @version     1.2
// @grant       GM_getValue
// @grant       GM_setValue
// @grant       GM_xmlhttpRequest
// ==/UserScript==

// Когда цена оранжевая - значит, что сохраненная в скрипте цифра отличается от текущей на складе. Оранжевая - та что сохранена у тебя. Чтоб узнать текущую нужно навести мышку на поле с ценой, она будет в подсказке

///settings
var elementColorOnDifference = '#E97300';
var defaultAccessLevel = 0;
var checkerTimeout = 50; //ms
//\settings

var saveStack = [], removeStack = [], stackBusy = 0, dissasembly = 0;

var constants = {
    disabledAccessLevel: '1000'
};

function serialize (form) {
    if (!form || form.nodeName !== "FORM") {
        return;
    }
    var i, j, q = [];
    for (i = form.elements.length - 1; i >= 0; i = i - 1) {
        if (form.elements[i].name === "") {
            continue;
        }
        switch (form.elements[i].nodeName) {
            case 'INPUT':
                switch (form.elements[i].type) {
                    case 'text':
                    case 'hidden':
                    case 'password':
                    case 'button':
                    case 'reset':
                    case 'submit':
                        q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));
                        break;
                    case 'checkbox':
                    case 'radio':
                        if (form.elements[i].checked) {
                            q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));
                        }
                        break;
                }
                break;
            case 'file':
                break;
            case 'TEXTAREA':
                q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));
                break;
            case 'SELECT':
                switch (form.elements[i].type) {
                    case 'select-one':
                        q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));
                        break;
                    case 'select-multiple':
                        for (j = form.elements[i].options.length - 1; j >= 0; j = j - 1) {
                            if (form.elements[i].options[j].selected) {
                                q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].options[j].value));
                            }
                        }
                        break;
                }
                break;
            case 'BUTTON':
                switch (form.elements[i].type) {
                    case 'reset':
                    case 'submit':
                    case 'button':
                        q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));
                        break;
                }
                break;
        }
    }
    return q.join("&");
}

var buttons = document.querySelectorAll('input[type="submit"][value="Сохранить"]');
for(var i = 0; i < buttons.length; i++){
    buttons[i].onclick = function(e){
        e.preventDefault();
        e.target.value = 'Сохраняем..';
        e.target.disabled = true;
        stackBusy = 1;
        GM_xmlhttpRequest({
            overrideMimeType: 'text/plain; charset=windows-1251',
            synchronous: false,
            url: 'http://www.heroeswm.ru/sklad_info.php?' + serialize(e.target.form),
            method: "GET",
            onload: function(response){
                e.target.value = 'Сохранено';
                stackBusy = 0;
            }
        });
    };
    saveStack.push(buttons[i]);
}

buttons = document.querySelectorAll('input[type="submit"][value="Разобрать"]');
for(i = 0; i < buttons.length; i++){
    var t = buttons[i].parentElement.parentElement.parentElement.innerHTML.split('uid=');
    var st = [], uid;
    for (var j = 1; j < t.length; j++){
        uid = t[j].substr(0, t[j].indexOf('&'));
        if(st.indexOf(uid) == -1) st.push(uid);
    }
    buttons[i].id = '-1|' + st.join('|');
    buttons[i].onclick = function(e){
        if (!e.ctrlKey && !dissasembly){
            e.traget.form.submit();
            return;
        }
        e.preventDefault();
        stackBusy = 1;
        e.target.value = 'Забираем..';
        e.target.disabled = true;
        disassemble(e);
    };
    removeStack.push(buttons[i]);
}

function disassemble(e) {
    if (e.target.id == '') {
        e.target.value = 'Забрано';
        stackBusy = 0;
        return;
    }

    var ids = e.target.id.split('|');
    var curId = ids.shift();
    e.target.id = ids.join('|');

    if (curId == '-1') {
        GM_xmlhttpRequest({
            overrideMimeType: 'text/plain; charset=windows-1251',
            synchronous: false,
            url: 'http://www.heroeswm.ru/sklad_info.php?' + serialize(e.target.form),
            method: "GET",
            onload: function (response) {
                disassemble(e);
            }
        });
    } else {
        var se = 'set_id=0&inv_id=' + curId + '&action=get_art&cat=0&sign=' + serialize(e.target.form).split('sign=')[1];
        GM_xmlhttpRequest({
            overrideMimeType: 'text/plain; charset=windows-1251',
            synchronous: false,
            url: 'http://www.heroeswm.ru/sklad_info.php?' + se,
            method: "GET",
            onload: function (response) {
                disassemble(e);
            }
        });
    }
}

buttons = document.querySelectorAll('input[type="submit"][value="Забрать"]');
for(i = 0; i < buttons.length; i++){
    buttons[i].onclick = function(e){
        e.preventDefault();
        e.target.value = 'Забираем..';
        e.target.disabled = true;
        stackBusy = 1;
        GM_xmlhttpRequest({
            overrideMimeType: 'text/plain; charset=windows-1251',
            synchronous: false,
            url: 'http://www.heroeswm.ru/sklad_info.php?' + serialize(e.target.form),
            method: "GET",
            onload: function(response){
                e.target.value = 'Забрано';
                stackBusy = 0;
            }
        });
    };
    removeStack.push(buttons[i]);
}

var forms = document.querySelectorAll('input[type="submit"][value="Сохранить"]');
for(i = 0; i < forms.length - 1; i++){
    var form = forms[i].parentElement.parentElement;
    var artId = form.querySelector('input[name="inv_id"]').value;
    var blimit = form.querySelector('select[name="blimit"]');
    var bcost = form.querySelector('input[name="bcost"]');
    var al = form.querySelector('select[name="al"]');

    var saved = JSON.parse(GM_getValue('saved' + artId, 'null'));
    if (saved){
        if(saved.blimit != null && blimit.selectedIndex != saved.blimit){
            blimit.title = 'Сейчас выставлено за: ' + blimit[blimit.selectedIndex].innerHTML;
            blimit.value = saved.blimit;
            blimit.style.color = elementColorOnDifference;
        }
        if(saved.bcost != null && bcost.value != saved.bcost){
            bcost.title = 'Текущее: ' + bcost.value;
            bcost.value = saved.bcost;
            bcost.style.color = elementColorOnDifference;
        }
        if(saved.al == constants.disabledAccessLevel) saved.al = 0;
        if(al.value == constants.disabledAccessLevel || (saved.al != null && al.value != saved.al)){
            al.title = 'Текущее: ' + al[al.selectedIndex].innerHTML;
            al.value = (saved.al != null ? saved.al : defaultAccessLevel);
            al.style.color = elementColorOnDifference;
        }
    }

    blimit.onchange = bcost.onchange = al.onchange = function(e){
        var form = e.target.form;
        var artId = form.parentNode.querySelector('input[name="inv_id"]').value;
        var saved = JSON.parse(GM_getValue('saved' + artId, '{}'));
        saved[e.target.name] = e.target.value;
        GM_setValue('saved' + artId, JSON.stringify(saved));
    }
}
if(document.location.href.indexOf('cat=4') == -1){
    var cell = document.querySelector('td[align="left"][colspan="3"]');
    var cellParent = cell.parentElement;
    cellParent.removeChild(cell);

    var td = document.createElement('td');
    cellParent.appendChild(td);
    td.align = 'center';
    td.innerHTML = '<input type="button" value="Сохр. всё" id="scr_save_all">';

    td = document.createElement('td');
    cellParent.appendChild(td);

    td = document.createElement('td');
    cellParent.appendChild(td);
    td.align = 'center';
    td.innerHTML = '<input type="button" value="Забр. всё" id="scr_remove_all">';

    document.getElementById('scr_save_all').onclick = saveAll;

    document.getElementById('scr_remove_all').onclick = removeAll;
} else {
    var cell = document.querySelector('table.wb:nth-child(5) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(5)');
    cell.innerHTML = '<input type="button" value="Сохр. всё" id="scr_save_all">';
    cell.align = 'center';
    document.getElementById('scr_save_all').onclick = saveAll;
}
function saveAll(){
    if (!saveStack.length){
        document.location.reload();
        return;
    }
    if(stackBusy){
        setTimeout(saveAll, checkerTimeout);
        return;
    }

    var but = saveStack.shift();
    but.click();
    setTimeout(saveAll, checkerTimeout);
}

function removeAll(){
    if (!removeStack.length){
        document.location.reload();
        return;
    }
    if(stackBusy){
        setTimeout(removeAll, checkerTimeout);
        return;
    }
    dissasembly = 1;
    var but = removeStack.shift();
    but.click();
    setTimeout(removeAll, checkerTimeout);
}

document.onkeydown = function(e){
    if (e.ctrlKey) {
        var buttons = document.querySelectorAll('input[type="submit"][value="Разобрать"]');
        for (var i = 0; i < buttons.length; i++){
            buttons[i].className = 'dissassembly';
            buttons[i].value = 'Забрать';
        }
    }
};
document.onkeyup=function(e){
    if (!e.ctrlKey) {
        var buttons = document.querySelectorAll('input[type="submit"][value="Забрать"][class="dissassembly"]');
        for (var i = 0; i < buttons.length; i++){
            buttons[i].value = 'Разобрать';
        }
    }
};