kendoGauge

by bsatrom

HTML

<script src="http://cdn.kendostatic.com/2012.1.229/js/kendo.all.min.js"></script>
<link rel="stylesheet" href="http://cdn.kendostatic.com/2012.1.229/styles/kendo.common.min.css">
<link rel="stylesheet" href="http://cdn.kendostatic.com/2012.1.229/styles/kendo.blueopal.min.css">
<div id='main'>
    <div id="gridContainer">
        <h2>Sriracha Tracker</h2>
        <div class='grid' id='intakeGrid'></div>
        <input id="dailyIntake" class="k-input" />
        <button id="add" class='k-button'>Add</button>
    </div>
    <article class='chart'>
        <div class='gauge' id='srirachaGauge'></div>
        <h2>Avg. Daily Sriracha Intake</h2>
    </article>
</div>

CSS

#main {
   display: -webkit-box; 
}

#gridContainer {
    width: 250px;
    padding-top: 5%;
    padding-left: 5%;
}

#gridContainer input + button {
    margin-top: 10px;
}

article {
    padding-left: 5%
}

.gauge {
    width: 300px;
    height: 350px;
}

h2 {
    font-family: arial;
    margin-bottom: 5px;
}

article h2 {
    position: relative;
    margin-top: -70px;
    margin-left: 60px;
}

p {
    text-align: center;
}

JavaScript

var intakeData, avgIntake, getDate;
var srirachaMax = 20;
intakeData = new kendo.data.DataSource({ 
    data: [{
        date: '03/08/2012',
        amount: 5
    },
    {
        date: '03/09/2012',
        amount: 17
    },
    {
        date: '03/10/2012',
        amount: 25
    },
    {
        date: '03/11/2012',
        amount: 8
    },
    {
        date: '03/12/2012',
        amount: 19
    },
    {
        date: '03/13/2012',
        amount: 12
    }]
});

avgIntake = function() {
    var inData = intakeData.data(),
        sum = 0, 
        length, avg;
    
    length = inData.length;
    
    $.each(inData, function() { sum += this.amount; });
                                    
    avg = sum/length;
      
    return avg;
};

$("#intakeGrid").kendoGrid({
    dataSource: intakeData,
    columns: [
        { field: "date", title: "Date"},   
        { field: "amount", title: "Amount" }     
    ],
    scrollable: true,
    sortable: true    
});    
    
$('#srirachaGauge').kendoGauge({
  theme: "blueopal",

  pointer: {
    value: avgIntake()
  },

  scale: {
    majorUnit: 2,
    minorUnit: .25,
    startAngle: -30,
    endAngle: 210,
    max: srirachaMax,

    labels: {
      font: "10px arial, Helvetica, sans-serif",
      template: "#= value# tsp."
    },      
      
    ranges: [
      {
        from: 0,
        to: 10,
        color: "#00ab00" //green
      }, {
        from: 10,
        to: 15,
        color: "#d3ce37" //yellow
      }, {
        from: 15,
        to: srirachaMax,
        color: "#ae130f" //red
      }
    ]
  }
});

getDate = function() {
    var today = new Date(),
        dd = today.getDate(),
        mm = today.getMonth()+1,
        yyyy = today.getFullYear();
    
    if(dd<10){ dd='0'+dd; } 
    if(mm<10){ mm='0'+mm; } 
    
    return mm+'/'+dd+'/'+yyyy;
}

$('#add').bind('click', function() {
    var amt, intakeRecord, grid, gauge;
    amt = parseInt($('#dailyIntake').val()) || 0;
    intakeRecord = { date: getDate(),...