MediaWiki:Common.js — различия между версиями

Материал из UOGames/UOGuide - Энциклопедия Ultima Online на русском
Перейти к: навигация, поиск
Строка 1: Строка 1:
var hasClass = (function () {
 
    var reCache = {};
 
    return function (element, className) {
 
        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp('(?:\\s|^)' + className + '(?:\\s|$)'))).test(element.className);
 
    };
 
})();
 
 
/**
 
* Determines if a given value is a number.
 
*/
 
function isNumeric(value) {
 
    return new RegExp(/(^\d+$)|(^\d+\.\d+$)/).test(value);
 
}
 
 
/**
 
* Removes all children from an element.
 
*/
 
function removeChildren(element) {
 
    while (element.hasChildNodes()) {
 
        element.removeChild(element.firstChild);
 
    }
 
}
 
 
/**
 
/**
 
  * Code for calculators.
 
  * Code for calculators.

Версия 12:10, 25 августа 2019

/**
 * Code for calculators.
 */
function Calculator(content, id, title, columns) {
    var location = document.getElementById(id);

    var table = document.createElement('table');
    table.className = 'uoguidetable open';

    var calcTableBody = document.createElement('tbody');
    table.appendChild(calcTableBody);

    var calcTableRow = document.createElement('tr');
    calcTableBody.appendChild(calcTableRow);

    var calcTableHeader = document.createElement('th');
    calcTableHeader.colSpan = columns;
    calcTableHeader.appendChild(document.createTextNode(title));
    calcTableRow.appendChild(calcTableHeader);

    calcTableRow = content;
    calcTableBody.appendChild(calcTableRow);

    location.appendChild(table);
}

switch (wgPageName) {
    case 'Luck':
        importScript('MediaWiki:Calculator.js/Luck.js');
        break;
    case 'Mana_Regeneration':
        importScript('MediaWiki:Calculator.js/Mana_Regeneration.js');
        break;
    case 'Swing_Speed':
    case 'Swing_Speed_Increase':
        importScript('MediaWiki:Calculator.js/Swing_Speed_Increase.js');
        break;
}
function SwingSpeedCalculator() {

    var calculate = function(stamina, ssi, weap, label) {

            var stam_val = Number(stamina.value);
            var ssi_val = Number(ssi.value);
            var weap_val = Number(weap.value);
            var Final_SSI = 0;

            if (ssi_val > 60) {
                    ssi_val = 60;
            }

            if (stam_val >= 10 &&  ssi_val >= 0 && weap_val > 0) {

                Final_SSI = Math.floor(((weap_val * 4) - Math.floor(stam_val / 30)) * (100 / (100 + ssi_val)))/4;

                if (Final_SSI < 1.25) {
                    Final_SSI = 1.25;
                }

                label.removeChild(label.lastChild);
                label.appendChild(document.createTextNode(Final_SSI.toString() + ' Seconds/Swing'));
            }
	    else {
                label.removeChild(label.lastChild);
                label.appendChild(document.createTextNode('--- Seconds/Swing'));
	    }
    };

    var calcTableRow = document.createElement('tr');
    var calcTableCell = document.createElement('td');
    var Stamina = document.createElement('input');
    var SSI_Bonus = document.createElement('input');
    var totalPriceInput = document.createElement('input');
    var Weap_List = document.createElement("select");
    var calculateButton = document.createElement('input');
    var Final_SSI_Label = document.createElement('div');

    calcTableCell.style.textAlign = 'right';
    calcTableCell.appendChild(document.createTextNode('Weapon:'));
    calcTableRow.appendChild(calcTableCell);

    var Weapons = new Array("Select Weapon","Bare Hands","Assassin Spike","Axe","Bardiche","Battle Axe","Black Staff","Bladed Staff","Bloodblade","Bokuto","Bone Harvester","Boomerang","Bow","Broadsword","Butcher Knife","Cleaver","Club","Composite Bow","Crescent Blade","Crossbow","Cutlass","Cyclone","Dagger","Daisho","Diamond Mace","Disc Mace","Double Axe","Double Bladed Staff","Dread Sword","Dual Pointed Spear","Dual Short Axes","Elven Composite Longbow","Elven Machete","Elven Spellblade","Executioner's Axe","Gargish Axe","Gargish Bardiche","Gargish Battle Axe","Gargish Bone Harvester","Gargish Butcher Knife","Gargish Cleaver","Gargish Dagger","Gargish Daisho","Gargish Gnarled Staff","Gargish Katana","Gargish Kryss","Gargish Lance","Gargish Maul","Gargish Pike","Gargish Scythe","Gargish Talwar","Gargish Tekagi","Gargish Tessen","Gargish War Fork","Gargish War Hammer","Glass Staff","Glass Sword","Gnarled Staff","Halberd","Hammer Pick","Hatchet","Heavy Crossbow","Kama","Katana","Kryss","Lajatang","Lance","Large Battle Axe","Leafblade","Longsword","Mace","Magical Shortbow","Maul","No-Dachi","Nunchaku","Ornate Axe","Pickaxe","Pike","Pitchfork","Quarter Staff","Radiant Scimitar","Repeating Crossbow","Rune Blade","Sai","Scepter","Scimitar","Scythe","Serpentstone Staff","Shepherd's Crook","Short Spear","Shortblade","Skinning Knife","Sledge Hammer","Smith's Hammer","Soul Glaive","Spear","Stone War Sword","Tekagi","Tessen","Tetsubo","Two-Handed Axe","Viking Sword","Wakizashi","Wand","War Axe","War Cleaver","War Fork","War Hammer","War Mace","Wild Staff","Yumi"); 
    
    var Speeds = new Array(0,2.5,2,3,3.75,3.5,2.75,3,2,2,3,2,4.25,3.25,2.25,2.5,2.25,4,2.5,4.5,2.5,3,2,2.75,3,2.75,3.25,2.25,3.5,2.25,3,4,2.75,2.5,3.25,3,3.75,3.5,3,2.25,2.5,2,2.75,3.25,2.5,2,4.5,3.5,3,3.5,3.5,2,2,2.5,3.75,2.25,2.75,3.25,4.25,3.75,2.75,5,2,2.5,2,3.5,4.5,3.75,2.75,3.5,2.75,3,3.5,3.5,2.5,3.5,3,3,2.5,2.25,2.5,2.75,3,2,3.5,3,3.5,3.25,2.75,2,2,2.25,3.25,3.25,4,2.75,3.75,2,2,2.5,3.5,3.75,2.5,2.75,3.25,2.25,2.5,3.75,4,2.25,4.5);


    for (var i=0; i < Weapons.length;++i){
        var optn = document.createElement("OPTION");
        optn.text = Weapons[i];
        optn.value = Speeds[i];
        Weap_List.options.add(optn);

    }

    calcTableCell = document.createElement('td');
    calcTableCell.appendChild(Weap_List);
    calcTableRow.appendChild(calcTableCell);

    calcTableCell.style.textAlign = 'right';
    calcTableCell.appendChild(document.createTextNode(' SSI Bonus (%):'));
    calcTableRow.appendChild(calcTableCell);

    SSI_Bonus.id = 'SSI_Bonus';
    SSI_Bonus.maxLength = '3';
    SSI_Bonus.type = 'text';
    SSI_Bonus.value = '0';
    SSI_Bonus.style.width = '30px';

    calcTableCell = document.createElement('td');
    calcTableCell.appendChild(SSI_Bonus);
    calcTableRow.appendChild(calcTableCell);


    calcTableCell.style.textAlign = 'right';
    calcTableCell.appendChild(document.createTextNode(' Stamina:'));
    calcTableRow.appendChild(calcTableCell);

    Stamina.id = 'Stamina';
    Stamina.maxLength = '3';
    Stamina.type = 'text';
    Stamina.value = '100';
    Stamina.style.width = '30px';
  

    calcTableCell = document.createElement('td');
    calcTableCell.appendChild(Stamina);
    calcTableRow.appendChild(calcTableCell);


    calculateButton.type = 'button';
    calculateButton.value = 'Calculate';
    calculateButton.style.width = '70px';
    calculateButton.onclick = function() {
        calculate(Stamina, SSI_Bonus, Weap_List, Final_SSI_Label);
    };
    calcTableCell = document.createElement('td');
    calcTableCell.appendChild(calculateButton);
    calcTableRow.appendChild(calcTableCell);

    Final_SSI_Label.appendChild(document.createTextNode('Seconds/Swing'));
    Final_SSI_Label.style.textAlign = 'right';
    Final_SSI_Label.style.width = '90px';
    calcTableCell = document.createElement('td');
    calcTableCell.appendChild(Final_SSI_Label);
    calcTableRow.appendChild(calcTableCell);

    return calcTableRow;
}

function searchForCalculators() {
    var calculators = document.getElementsByTagName('div');

    for (var i in calculators) {
         if (calculators[i].id == 'SwingSpeed') {
             Calculator(SwingSpeedCalculator(), 'SwingSpeed', 'Swing Speed Calculator', 9);
         }
    }
}

addOnloadHook(searchForCalculators);