MediaWiki:SCalScript.js

From Istaria Lexica

Note: After saving, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Go to Menu → Settings (Opera → Preferences on a Mac) and then to Privacy & security → Clear browsing data → Cached images and files.
/**
 * Skeleton Key Calculator V 0.1
 * Elteria Shadowhand
 */
$(document).ready(function(){
  if(document.getElementById('SCalMain')) {
    let SCalBaseResources = [];
    let initialCount = 10;

    SCalPrintHeader();

    $('#SCalMain').append('<center><table>'
        + '<tr valign="top">'
          + '<td id="SCalResourcesrow1"></td>'
          + '<td id="SCalResourcesrow2"></td>'
        + '</tr>'
      + '</table></center>'
    );

    $('#SCalResourcesrow1').append('<div id="SCalResources"></div>');
    
    SCalCalculateNow();
    SCalPrintBaseResources();
    
    $('#SCalCountBtn').click(function(){
      SCalCalculateNow();
      SCalPrintBaseResources();
    });
    
    $('#SCalCountInput').keypress(function(event) {
      if(event.key === "Enter") {
        SCalCalculateNow();
        SCalPrintBaseResources();
      }
    });
    
    function SCalCalculateNow() {
      SCalValidate();
      var keyCount = $('#SCalCountInput').val();
      SCalBaseResources = [];
      $('#SCalResources').html('');
      $('#SCalResources').append('<h2><span id="mw-headline">Tree of needed products</span></h2>');
      $('#SCalResources').append('<ul>' 
        + '<li>' + SCalPrintResource('Enchanted Adamantium-Mithril Bar',keyCount*3,false,'SCalMainResource')
          + '<ul>'
            + '<li>' + SCalPrintResource('Gozar\'s Blessing',keyCount*6,false,'SCalSubResource')
              + '<ul>'
                + '<li>' + SCalPrintResource('Meltanis\' Prayer',keyCount*6,false,'SCalSubResource')
                  + '<ul>'
                    + '<li>' + SCalPrintResource('Travertine Spell Shard',keyCount*6,false,'SCalBaseResource')
                      + '<ul>'
                        + '<li>' + SCalPrintResource('Travertine Brick',keyCount*12,false,'SCalBaseResource')
                          + '<ul>'
                            + '<li>' + SCalPrintResource('Travertine Slab',keyCount*24,true,'SCalBaseResource') + '</li>'
                          + '</ul>'
                        + '</li>'
                      + '</ul>'
                    + '</li>'
                    + '<li>' + SCalPrintResource('Radiant Essence Orb',keyCount*24,false,'SCalBaseResource')
                      + '<ul>'
                        + '<li>' + SCalPrintResource('Radiant Essence',keyCount*48,true,'SCalBaseResource') + '</li>'
                      + '</ul>'
                    + '</li>'
                  + '</ul>'
                + '</li>'
                + '<li>' + SCalPrintResource('Primal Burst III',keyCount*6,false,'SCalSubResource')
                  + '<ul>'
                    + '<li>' + SCalPrintResource('Marble Spell Shard',keyCount*30,false,'SCalBaseResource')
                      + '<ul>'
                        + '<li>' + SCalPrintResource('Marble Brick',keyCount*60,false,'SCalBaseResource')
                          + '<ul>'
                            + '<li>' + SCalPrintResource('Marble Slab',keyCount*120,true,'SCalBaseResource') + '</li>'
                          + '</ul>'
                        + '</li>'
                      + '</ul>'
                    + '</li>'
                    + '<li>' + SCalPrintResource('Shining Essence Orb',keyCount*54,false,'SCalBaseResource')
                      + '<ul>'
                        + '<li>' + SCalPrintResource('Shining Essence',keyCount*108,true,'SCalBaseResource') + '</li>'
                      + '</ul>'
                    + '</li>'
                  + '</ul>'
                + '</li>'
                + '<li>' + SCalPrintResource('Gold Papyrus Sheet',keyCount*12,false,'SCalSubResource')
                  + '<ul>'
                    + '<li>' + SCalPrintResource('Gold Papyrus Stem',keyCount*24,true,'SCalBaseResource') + '</li>'
                  + '</ul>'
                + '</li>'
                + '<li>' + SCalPrintResource('Energy Strike V',keyCount*6,false,'SCalSubResource')
                  + '<ul>'
                    + '<li>' + SCalPrintResource('Marble Spell Shard',keyCount*24,false,'SCalBaseResource')
                      + '<ul>'
                        + '<li>' + SCalPrintResource('Marble Brick',keyCount*48,false,'SCalBaseResource')
                          + '<ul>'
                            + '<li>' + SCalPrintResource('Marble Slab',keyCount*96,true,'SCalBaseResource') + '</li>'
                          + '</ul>'
                        + '</li>'
                      + '</ul>'
                    + '</li>'
                    + '<li>' + SCalPrintResource('Shining Essence Orb',keyCount*42,false,'SCalBaseResource')
                      + '<ul>'
                        + '<li>' + SCalPrintResource('Shining Essence',keyCount*84,true,'SCalBaseResource') + '</li>'
                      + '</ul>'
                    + '</li>'
                  + '</ul>'
                + '</li>'
                + '<li>' + SCalPrintResource('Ice Bomb V',keyCount*6,false,'SCalSubResource')
                  + '<ul>'
                    + '<li>' + SCalPrintResource('Marble Spell Shard',keyCount*30,false,'SCalBaseResource')
                      + '<ul>'
                        + '<li>' + SCalPrintResource('Marble Brick',keyCount*60,false,'SCalBaseResource')
                          + '<ul>'
                            + '<li>' + SCalPrintResource('Marble Slab',keyCount*120,true,'SCalBaseResource') + '</li>'
                          + '</ul>'
                        + '</li>'
                      + '</ul>'
                    + '</li>'
                    + '<li>' + SCalPrintResource('Shining Essence Orb',keyCount*64,false,'SCalBaseResource')
                      + '<ul>'
                        + '<li>' + SCalPrintResource('Shining Essence',keyCount*108,true,'SCalBaseResource') + '</li>'
                      + '</ul>'
                    + '</li>'
                  + '</ul>'
                + '</li>'
                + '<li>' + SCalPrintResource('Fiery Strike V',keyCount*6,false,'SCalSubResource')
                  + '<ul>'
                    + '<li>' + SCalPrintResource('Marble Spell Shard',keyCount*36,false,'SCalBaseResource')
                      + '<ul>'
                        + '<li>' + SCalPrintResource('Marble Brick',keyCount*72,false,'SCalBaseResource')
                          + '<ul>'
                            + '<li>' + SCalPrintResource('Marble Slab',keyCount*144,true,'SCalBaseResource') + '</li>'
                          + '</ul>'
                        + '</li>'
                      + '</ul>'
                    + '</li>'
                    + '<li>' + SCalPrintResource('Shining Essence Orb',keyCount*66,false,'SCalBaseResource')
                      + '<ul>'
                        + '<li>' + SCalPrintResource('Shining Essence',keyCount*132,true,'SCalBaseResource') + '</li>'
                      + '</ul>'
                    + '</li>'
                  + '</ul>'
                + '</li>'
              + '</ul>'
            + '</li>'
            + '<li>' + SCalPrintResource('Hardened Adamantium-Mithril Bar',keyCount*6,false,'SCalSubResource')
              + '<ul>' 
                + '<li>' + SCalPrintResource('Solution of Majorita',keyCount*12,false,'SCalSubResource')
                  + '<ul>'
                    + '<li>' + SCalPrintResource('Thornwood Bowl',keyCount*12,false,'SCalBaseResource')
                      + '<ul>'
                        + '<li>' + SCalPrintResource('Thornwood Sap',keyCount*36,true,'SCalBaseResource')
                        + '<li>' + SCalPrintResource('Thornwood Board',keyCount*60,false,'SCalBaseResource')
                          + '<ul>'
                            + '<li>' + SCalPrintResource('Thornwood Log',keyCount*120,true,'SCalBaseResource') + '</li>'
                          + '</ul>'
                        + '</li>'
                      + '</ul>'
                    + '</li>'
                    + '<li>' + SCalPrintResource('Crystallized Travertine Brick',keyCount*60,false,'SCalBaseResource')
                      + '<ul>'
                        + '<li>' + SCalPrintResource('Unfocused Violet Azulyte Crystal',keyCount*60,true,'SCalBaseResource') + '</li>'
                        + '<li>' + SCalPrintResource('Travertine Slab',keyCount*60,true,'SCalBaseResource') + '</li>'
                      + '</ul>'
                    + '<li>' + SCalPrintResource('Purified Radiant Essence Orb',keyCount*12, false,'SCalBaseResource')
                      + '<ul>'
                        + '<li>' + SCalPrintResource('Radiant Essence Orb',keyCount*12, false,'SCalBaseResource')
                          + '<ul>'
                            + '<li>' + SCalPrintResource('Radiant Essence',keyCount*24, true,'SCalBaseResource') + '</li>'
                          + '</ul>'
                        + '</li>'
                      + '</ul>'
                    + '<li>' + SCalPrintResource('Water',keyCount*180, true) + '</li>'
                  + '</ul>'
                + '<li>' + SCalPrintResource('Adamantium-Mithril Bar',keyCount*6, false,'SCalBaseResource')
                  + '<ul>'
                    + '<li>' + SCalPrintResource('Mithril Ore',keyCount*18, true,'SCalBaseResource') + '</li>'
                    + '<li>' + SCalPrintResource('Adamantium Ore',keyCount*18, true,'SCalBaseResource') + '</li>'
                  + '</ul>'
                + '</li>'
              + '</ul>'
            + '</li>'
          + '</ul>'
        + '</li>'
        + '<li>' + SCalPrintResource('Skeleton Key Mold',keyCount*1,false,'SCalMainResource')
          + '<ul>'
            + '<li>' + SCalPrintResource('Skeleton Key Pattern',keyCount*1, true,'SCalBaseResource') + '</li>'
            + '<li>' + SCalPrintResource('Porcelain Clay Chunk',keyCount*2, true,'SCalBaseResource') + '</li>'
          + '</ul>'
        + '</li>'
      + '</ul>');
    }

    function SCalPrintHeader(){
      $('#SCalMain').append('<h1 id="SCalH1">The Calculator</h1>');
      $('#SCalMain').append('<center><label for="SCalCountInput" id="SCalCountInputLbl">How much Skeleton Keys would you want to create?</label></center>');
      $('#SCalMain').append('<center><input type="number" id="SCalCountInput" name="SCalCountInput" value="' + initialCount + '" size="6"><input type="button" id="SCalCountBtn" value="Calculate now!"></center>');
      $('#SCalMain').append('<div id="SCalErrorText"></div>');
      $('#SCalMain').append('<br />');
      $('#SCalMain').append('<br /></center>');
    };
    
    function SCalPrintResource(name, count, isbaseresource, cssclass){
      if(isbaseresource) {
        objIndex = SCalBaseResources.findIndex((obj => obj.name == name));
        if(objIndex == -1) {
          SCalBaseResources.push({
            'name' : name,
            'count' : count
          });
        } else {
          SCalBaseResources[objIndex].count += count;
        }
      }
      return '<span class="' + cssclass + '"><a href="' + mw.util.getUrl(name) + '">' + name + '</a>: ' + count + '</span>';
    };

    function SCalPrintBaseResources() {
      SCalBaseResources.sort(SCalCompare('name'))
      $('#SCalResourcesrow2').html('');
      $('#SCalResourcesrow2').append('<h2><span id="mw-headline">Overview of base resources</span></h2>');
      $('#SCalResourcesrow2').append('<table id="SCalBaseResourceTable" class="wikitable sortable jquery-tablesorter"><thead>'
        + '<tr>'
          + '<th class="headerSort" tabindex="0" role="columnheader button" title="Sort ascending" align="left">Resource</th>'
          + '<th class="headerSort" tabindex="0" role="columnheader button" title="Sort ascending" align="left">Need</th>'
        + '</tr></thead>'
      );
      
      var tablecontent = '<tbody>';

      for(var index in SCalBaseResources) {
        tablecontent += '<tr>'
            + '<td><a href="' + mw.util.getUrl(SCalBaseResources[index].name) + '">' + SCalBaseResources[index].name + '</a></td>'
            + '<td>' + SCalBaseResources[index].count + '</td>'
            + '</tr>';
      }

      tablecontent += '</tbody)';
      $('#SCalBaseResourceTable').append(tablecontent);
      $('#SCalResources').append('</table>');
    }

    function SCalCompare(prop) {    
        return function(a, b) {    
            if (a[prop] > b[prop]) {    
                return 1;    
            } else if (a[prop] < b[prop]) {    
                return -1;    
            }
            return 0;    
        }    
    }
    
    function SCalValidate() {
      var value = $('#SCalCountInput').val();
      $('#SCalErrorText').html('&nbsp;');
      if(!(!isNaN(value) && 
             parseInt(Number(value)) == value && 
             !isNaN(parseInt(value, 10)))) {
        $('#SCalErrorText').html('<center>This was not a number! I\'ve reset the counter to ' + initialCount + ' for you.</center>');
        $('#SCalCountInput').val(initialCount);
      } else {
        if(value < 1 || value > 5000) {
          $('#SCalErrorText').html('<center>Please provide a number between 1 and 5000</center>');
          $('#SCalCountInput').val(initialCount);
        }
      }
    }
  }
});