packages feed

hax-0.0.1: static/charts-code.js

Chart.defaults.global.animation = false;

var accuracy = 3;

var baseScale = 1000;
var accountScales = {
    'default'       : 1,
};
function accountScale(account) {
    return baseScale * (accountScales[account] || accountScales['default']);
}

var accountColors = {
    'Verm'          : "rgba(150, 0, 0, 1)",
    'Giro'          : "rgba(150, 0, 0, 0.5)",
    'Lohn'          : "rgba(255, 0, 0, 1)",
    'LSt'           : "rgba(255, 0, 0, 0.5)",
    'StFrei'        : "rgba(255, 0, 0, 0.2)",
    'default'       : "rgba(150, 150, 150, 0.5)",
};
function accountColor(account) {
    return accountColors[account] || accountColors['default'];
}

function arrayMult(arr, m) {
    var a = arr.slice(0);
    for(var i=0; i<a.length; i++) {
        a[i] *= m;
    }
    return a;
}
function arrayAbsSum(arr) {
    return arr.reduce(function(prev, current) {
        return Math.abs(current) + prev;
    }, 0);
}

var months = [], accountBalances = {}, plotData = {};
$(document).ready(function(j) {

    var ctx = $("#myChart")[0].getContext("2d");
    var myNewChart;
    for(var a in data.accounts) {
        var account = data.accounts[a].fAccount;
        if("Month" != account) {
            accountBalances[account] = [];
        }
    }
    var i = 0;
    for(var b in data.balances) {
        if(i++ % accuracy != 0) continue;
        var balance = data.balances[b];
        for(var a in data.accounts) {
            var account = data.accounts[a].fAccount;
            if("Month" == account) months.push(balance[a]);
            else accountBalances[account].push(balance[a]);
        }
    }
    for(var a in data.accounts) {
        var account = data.accounts[a].fAccount;
        if("Month" != account) {
            $("<label>").css({'color': accountColor(account)})
                .text(" "+account + " ("+Math.round(arrayAbsSum(accountBalances[account]))+")")
                .prepend(
                    $("<input>", { type: "checkbox", name: account})
                        .prop('checked', false)
                        .prop('data-account', account)
                        .click(function() {
                            redrawChart();
                        })
                ).appendTo("#accountSelectorForm");
        }
    }
    $("#accountSelectorForm #checkAll").click(function() {
        $("#accountSelectorForm input:checkbox:not(#checkAll)")
            .prop('checked', $(this).is(":checked"));
        redrawChart();
    });

    function redrawChart() {
        if(myNewChart) myNewChart.destroy();
        plotData.labels = months;
        plotData.datasets = [];
        $("#accountSelectorForm input:checkbox:not(#checkAll)").each(function() {
            if(!$(this).is(":checked")) return true;
            var account = $(this).prop('data-account');
            plotData.datasets.push(
                {
                    label: account,
                    data: arrayMult(accountBalances[account], accountScale(account)),
                    strokeColor: accountColor(account),
                    pointColor: accountColor(account),
                    pointStrokeColor: "#fff",
                    pointHighlightFill: "#fff",
                    pointHighlightStroke: accountColor(account),
                }
            );
        });
        if(plotData.datasets.length>0)
            myNewChart = new Chart(ctx).Line(plotData, {
                datasetFill: false
            });
    }


});