Soylent Stuff

spicing up the soylent

目前为 2016-03-12 提交的版本。查看 最新版本

// ==UserScript==
// @name         Soylent Stuff
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  spicing up the soylent
// @author       You
// @match        http*://diy.soylent.com/recipes/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // add function to format currency
    Number.prototype.formatMoney = function(c, d, t){
        c = isNaN(c = Math.abs(c)) ? 2 : c;
        d = d === undefined ? "." : d;
        t = t === undefined ? "," : t;
        var n = this,
            s = n < 0 ? "-" : "",
            i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "",
            j = (j = i.length) > 3 ? j % 3 : 0;
        return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
    };

    // modify scaling selector
    $('.amount-selector').attr("id","select");
    for (var week = 5; week<=52;week++){
        $('#select').append($("<option></option>").attr("value",week * 7).text(week + " weeks"));
    }

    // target total row
    $('table.ingredients > tbody:nth-child(3) > tr').attr("id","total-row");

    // change daily cost label
    $('#total-row > td:nth-child(1) > div:nth-child(2)').text('Total Cost');

    // add data-daily to total cost
    $('#total-row > td:nth-child(2)').attr("id","cost");
    $('#cost').attr("data-daily",$('#cost').text().replace("$", ""));

    // add data-daily to table
    $('table.ingredients > tbody:first() > tr > td:nth-child(4)').each(function (index,element) {$(element).addClass("cost");$(element).attr("data-daily",$(element).text().replace("$",""));});

    $('#select').on("change",function () {
        $('[data-daily]').each(function(index){$(this).text("$" + Number.parseFloat($(this).attr("data-daily") * $('#select').val()).formatMoney("."));});
    });

    var amountNodes         = $("[data-amount]");
    var MutationObserver    = window.MutationObserver || window.WebKitMutationObserver;
    var amountObserver      = new MutationObserver (amountHandler);
    var amountConfig        = { childList: true, characterData: true, attributes: true, subtree: true };

    //--- Add a target node to the observer. Can only add one node at a time.
    amountNodes.each ( function () {
        //console.log($(this));
        amountObserver.observe (this, amountConfig);
    } );
    
    var factor = 1;
    function amountHandler (mutationRecords) {
        //console.info ("amountHandler:");

        
        mutationRecords.forEach ( function (mutation) {
          // debugger;
           // console.log (mutation.type);
//debugger
            var amount = mutation.addedNodes[0].parentElement;
            var cost = $(amount.parentElement).find("td.cost");
            var newFactor = $(amount).text()/$(amount).attr("data-amount");
            if (factor==1) {factor = newFactor;}
            console.log(factor);
            var newCost = $(cost).attr("data-daily")*factor;
            cost.text("$"+newCost.formatMoney("."));

            if (typeof mutation.removedNodes == "object") {
                var jq = $(mutation.removedNodes);
                //console.log (jq);
                //console.log (jq.is("span.myclass2"));
                //console.log (jq.find("span") );
            }
        } );
        factor = 1;
    }
















})();