Patreon Pledge Predictor

Calculates the new patreon pledge amount

// ==UserScript==
// @name Patreon Pledge Predictor
// @description Calculates the new patreon pledge amount
// @author compujosh
// @version 1.02
// @namespace compujosh
// @match https://www.patreon.com/bePatron?c=*&rid=*
// @match https://www.patreon.com/join/*
// @require https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js
// @grant none
// ==/UserScript==

function roundToTwo(num) {
    return Math.round(parseFloat(num)*100)/100;
}

function calcPledge(pledgeAmnt, worksNum) {
    var precisionAmnt = (Math.floor(Math.log10(pledgeAmnt))+1) + 4; // Num whole digits + 4

    var formula = worksNum * roundToTwo((pledgeAmnt + (pledgeAmnt * 0.029) + 0.35).toPrecision(precisionAmnt));
    return formula.toFixed(2);
}

function updatePrediction() {
    // React app, so make sure we have the right page
    if ((/https?:\/\/www.patreon.com\/join\/.*\/checkout/).test(document.baseURI)) {
        // Monthly confirmation page

        // Check max per month is enabled
        if ($('.react-numeric-input').length === 0) {
            // Remove calculation if N/A
            $('#realPledgeAmnt').html("");
            return;
        }

        // Put est container back in
        if ($('#realPledgeAmnt').length === 0) $('.react-numeric-input').parent().parent().parent().parent().parent().after('<div id="realPledgeAmnt" style="color:gray;font-size:95%;"></div>');

        var pledgeAmnt = parseFloat($('span.mr-sm span')[0].innerHTML.split("+")[0].replace("$",""));
        var monthlyMax = parseFloat($("input.form-control").prop("value"));
        $('#realPledgeAmnt').html("Total: $"+calcPledge(pledgeAmnt,monthlyMax));
    }
    else if ((/^https?:\/\/www.patreon.com\/bePatron\?c=[0-9]*&rid=[0-9]*/).test(document.baseURI)) {
        // Put est container back in after changing reward tier
        if ($('#realPledgeAmnt').length === 0) $('.react-numeric-input').after('<div id="realPledgeAmnt" style="color:gray;font-size:95%;"></div>');

        var pledgeAmnt = parseFloat($("input.form-control").prop("value"));
        $('#realPledgeAmnt').html("$"+calcPledge(pledgeAmnt,1));
    }
    else {
        // Wrong page
    }
}


//setInterval(updatePrediction, 250);