Welcome to IOPWiki, Commander.
We are searching for new editors to keep track of Girls' Frontline 2 content, as well as veteran players to complete the data of Girls' Frontline and Project Neural Cloud characters.
You can contribute without an account. Learn how to contribute and join our Discord server.

MediaWiki:Gadget-SkillForm.js: Difference between revisions

Welcome to IOP Wiki. This website is maintained by the Girls' Frontline community and is free to edit by anyone.
Jump to navigation Jump to search
m Typo... I should go to bed
Pianoforte (talk | contribs)
No edit summary
Line 170: Line 170:
         description.css('overflow-y', 'auto');
         description.css('overflow-y', 'auto');
         description.prop('id', 'description');
         description.prop('id', 'description');
         cellDesc.append(description);
         skillDataContainer.append(description);
          
          
         display_data(data);
         display_data(data);

Revision as of 02:39, 31 January 2018

var SkillData = {};

RLQ.push(function () {
  $(document).ready(function() {
    var skillforms = $('.skillform');
    if (skillforms.length > 0) {
      // New way
      skillforms.each(function(idx, element) {
        initSkillForm(element);
        $(element).find('.tabButtonLane button').last().click();
      });
    } else if (document.getElementById("skill_calculator")) {
      // Old way
      $.get("/index.php?title=" + mw.config.get("wgPageName") +"/skilldata&action=raw", function( data, textStatus, jqxhr ) {
        build_skill_form(data);
      });	
    }
  });
});

function initSkillForm(element) {
  var skillform = $(element);
  var tabs = skillform.find('.tabButtonLane button');
  
  tabs.click(function(evt) {
    skillformButtonHandler(evt.target);
  });
}

function skillformButtonHandler(element) {
  var currentButton = $(element);
  var skillform = currentButton.closest('.skillform');
  var tdoll = mw.config.get("wgPageName"); //skillform.data('tdollId'); // For debugging, pagename
  var skillId = "skilldata";
  
  // ToDo: Maybe another way to get a nice name?
  var skillname = currentButton.text();
  if (skillname.length > 0 && skillname[skillname.length-1] == "2") {
    skillId = skillId + "2";
  }
  
  skillform.addClass("loading");
  
  var successHandler = function(data, textStatus, jqxhr) {
    console.log("successHandler", data, textStatus, jqxhr);
    skillform.removeClass("loading");
    
    skillform.find('.tabButtonLane button').removeClass('tabButton-active');
    currentButton.addClass('tabButton-active');
    
    build_skill_form(data);
  };
  
  var failureHandler = function(jqXHR, textStatus, errorThrown) {
    skillform.removeClass("loading");
    console.log("failureHandler", jqXHR, textStatus, errorThrown);
  };
  
  var url = "/index.php?title=" + tdoll +"/" + skillId + "&action=raw";
  $.ajax({
    url: url,
    success: successHandler,
    error: failureHandler,
    dataType: "text"
  });
}

function get_skill_data(pagedata) {
	skill_data = {};
	var key;
	$.each(pagedata.split("\n"), function(index, value) {
		if (value.charAt(0) == "!") {
			key = value.substring(1).trim();
		} else if (value.charAt(0) == "|" && value.charAt(1) !== "-" && value.charAt(1) !== "}") {
			if (key == "initial" || key == "text")
				skill_data[key] = value.substring(value.lastIndexOf("|") + 1).trim();
			else
				skill_data[key] = $.map(value.substring(1).split("||"), $.trim); 
		}
	});
	return skill_data;
} 

function build_skill_form(data) {
    skill_data = get_skill_data(data);

    if (skill_data.text) {
        var skillDataContainer = $('#skill_calculator');
        var skillName = $(".skillname, #skill_calculator~table td[colspan=2]").text();
        var oldimg = $('#skill_calculator~table .center>.floatnone>img, #skill_calculator img');
        
        var parent = skillDataContainer.parent();
        parent.empty();
        parent.append(skillDataContainer);
        
        // Now let's build up the view
        skillDataContainer.empty();
        
        // var skillDataContainer = $('<div></div>');
        // calculator_element.prop('id', 'skill_calculator');
        skillDataContainer.css('position', 'absolute');
        skillDataContainer.css('display', 'flex'); 
        skillDataContainer.css('flex-direction', 'column'); 
        skillDataContainer.css('top', '0'); 
        skillDataContainer.css('bottom', '0');
        // skillDataContainer.append(skillDataContainer);
        
        var table = $('<table></table>');
        table.prop('cellspacing', '5');
        table.css('margin-top', '10px');
        skillDataContainer.append(table);
        
        var rowFirst = $('<tr></tr>');
        table.append(rowFirst);
        
        var headCell1 = $('<td></td>');
        headCell1.prop('rowspan', 2);
        headCell1.css('background', 'rgba(128, 128, 128, 0)');
        headCell1.css('width', '52px');
        headCell1.css('height', '52px');
        headCell1.append(oldimg);
        rowFirst.append(headCell1);
        
        var headCell2 = $('<td></td>');
        headCell2.prop('colspan', 2);
        headCell2.css('background', 'rgba(255, 255, 255, 0.25)');
        headCell2.css('min-width', '300px');
        headCell2.addClass('skillname');
        headCell2.text(skillName);
        rowFirst.append(headCell2);
        
        var rowSecond = $('<tr></tr>');
        table.append(rowSecond);
        
        var cellData = $('<td></td>');
        cellData.css('width', '60px');
        rowSecond.append(cellData);

        var levelSelector = $('<select></select>');
        levelSelector.addClass('skill');
        levelSelector.prop('id', 'skill_level');
        levelSelector.change(function() { display_data(data); });
        if (skill_data.hasOwnProperty('cost')) {
          if (skill_data.hasOwnProperty('cooldown')) levelSelector.css('background-color', '#739ee7');
          else levelSelector.css('background-color', '#f76529');
        }
        cellData.append(levelSelector);

        var idx = 0;
        for (idx=0; idx<10; idx++) {
          var opt = $('<option></option>');
          opt.text('Lv. ' + (idx+1));
          opt.attr('value', idx);
          if (idx == 9) opt.prop('selected', true);
          levelSelector.append(opt);
        }

        var cooldownCell = $('<td></td>');
        cooldownCell.prop('id', 'cooldown');
        rowSecond.append(cooldownCell);
        
        var rowThird = $('<tr></tr>');
        table.append(rowThird);

        var cellDesc = $('<td></td>');
        cellDesc.prop('colspan', 3);
        rowThird.append(cellDesc);
        
        var description = $('<p></p>');
        description.css('overflow-y', 'auto');
        description.prop('id', 'description');
        skillDataContainer.append(description);
        
        display_data(data);
    }
}
 
function display_data(skillDataRaw) {
    data = get_skill_data(skillDataRaw);

    if (data !== null) {
        index = document.getElementById("skill_level").value;
        regex = /\(\$\w+\)/g;
        formatted_text = data.text;
        vars = data.text.match(regex);
        for (i = 0; i < vars.length; i++) {
            var_name = vars[i].substring(2, vars[i].length - 1);
            formatted_text = formatted_text.replace(
                vars[i],
                data[var_name][index]);
        }
        if (data.hasOwnProperty('cost')) {
        	if (data.hasOwnProperty('cooldown')) {
	        	cooldownText = '<td id="cooldown" style="color:rgba(115, 158, 231, 1)">' + data.cost + ' support point(s) per use';
	    		cooldownText += ', ' + data.cooldown + ' turn cooldown';
    		} else {
	        	cooldownText = '<td id="cooldown" style="color:rgba(247, 101, 41, 1)">' + data.cost + ' support point(s) per use';
        	}
        	cooldownText += '</td>';
	        document.getElementById("cooldown").outerHTML = cooldownText;
        } else if (data.hasOwnProperty('cooldown')) {
        	cooldownText = '<td id="cooldown" style="color:rgba(255, 182, 0, 1)">' + data.cooldown[index] + 's cooldown';
        	if (data.hasOwnProperty('initial')) {
        		cooldownText += ', ' + data.initial + 's initial cooldown';
        	}
        	cooldownText += '</td>';
	        document.getElementById("cooldown").outerHTML = cooldownText;
        } else if (data.hasOwnProperty('activation')) {
	        document.getElementById("cooldown").outerHTML =
	            '<td id="cooldown" style="color:rgba(255, 182, 0, 1)">' + data.activation[index] + '% chance to activate</td>';
        } else {
        	document.getElementById("cooldown").outerHTML =
	            '<td id="cooldown" style="color:rgba(255, 182, 0, 1)">Passive</td>';
        }
        document.getElementById("description").outerHTML =
            '<p id="description">' + formatted_text + '</p>';
    }
}