Skip to content

Instantly share code, notes, and snippets.

@Phury
Created April 22, 2022 14:45
Show Gist options
  • Save Phury/ad94f20060d43e475ff2b40a9ba02305 to your computer and use it in GitHub Desktop.
Save Phury/ad94f20060d43e475ff2b40a9ba02305 to your computer and use it in GitHub Desktop.
Parses the meta info column from Mtgtop8 to display a nice pie chart of the metagame
// example page https://www.mtgtop8.com/archetype?a=816&meta=51&f=MO
function parseData() {
var data = [];
[].forEach.call(document.querySelectorAll(".page table td:first-child .hover_tr"), function(el) {
var tokens = el.textContent.split(/\r?\n/).filter(l => l.trim()).map(l => l.trim());
if (tokens.length == 2) {
data.push({y: parseFloat(tokens[1].replace(" %", "")), label: tokens[0] });
}
});
console.log(data);
return data;
}
function createChart(data) {
// source: https://canvasjs.com/html5-javascript-pie-chart/
return new CanvasJS.Chart("chartContainer", {
animationEnabled: false,
title: {
text: "METAGAME BREAKDOWN"
},
data: [{
type: "pie",
startAngle: 240,
yValueFormatString: "##0.00\"%\"",
indexLabel: "{label} {y}",
dataPoints: [data]
}]
});
}
var ready = false;
// create the HTML and add it to the page
var canvasElt = document.createElement("div");
canvasElt.setAttribute('id', 'chartContainer');
canvasElt.style.cssText = 'height: 370px; width: 100%;';
document.body.appendChild(canvasElt);
var scriptElt = document.createElement("script");
scriptElt.type = "text/javascript";
scriptElt.src = "https://canvasjs.com/assets/script/canvasjs.min.js";
scriptElt.onload = scriptElt.onreadystatechange = function() {
if ( !ready && (!this.readyState || this.readyState == 'complete') ) {
ready = true;
// do the real stuff
var data = parseData();
var chart = createChart();
chart.render();
}
};
document.body.appendChild(scriptElt);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment