Вход Регистрация
Файл: Source/admin/assets/third/morris/morris.js
Строк: 2009
<?php
(function() {
  var $, 
MorrisminutesSpecHelpersecondsSpecHelper,
    
__slice = [].slice,
    
__hasProp = {}.hasOwnProperty,
    
__extends = function(childparent) { for (var key in parent) { if (__hasProp.call(parentkey)) child[key] = parent[key]; } function ctor() { this.constructor child; } ctor.prototype parent.prototypechild.prototype = new ctor(); child.__super__ parent.prototype; return child; },
    
__bind = function(fn, me){ return function(){ return fn.apply(mearguments); }; },
    
__indexOf = [].indexOf || function(item) { for (var 0this.lengthli++) { if (i in this && this[i] === item) return i; } return -1; };

  
Morris window.Morris = {};

  $ = 
jQuery;

  
Morris.EventEmitter = (function() {

    function 
EventEmitter() {}

    
EventEmitter.prototype.on = function(namehandler) {
      if (
this.handlers == null) {
        
this.handlers = {};
      }
      if (
this.handlers[name] == null) {
        
this.handlers[name] = [];
      }
      
this.handlers[name].push(handler);
      return 
this;
    };

    
EventEmitter.prototype.fire = function() {
      var 
argshandlername_i_len_ref_results;
      
name arguments[0], args <= arguments.length __slice.call(arguments1) : [];
      if ((
this.handlers != null) && (this.handlers[name] != null)) {
        
_ref this.handlers[name];
        
_results = [];
        for (
_i 0_len _ref.length_i _len_i++) {
          
handler _ref[_i];
          
_results.push(handler.apply(nullargs));
        }
        return 
_results;
      }
    };

    return 
EventEmitter;

  })();

  
Morris.commas = function(num) {
    var 
absnumintnumretstrabsnum;
    if (
num != null) {
      
ret num "-" "";
      
absnum Math.abs(num);
      
intnum Math.floor(absnum).toFixed(0);
      
ret += intnum.replace(/(?=(?:d{3})+$)(?!^)/g',');
      
strabsnum absnum.toString();
      if (
strabsnum.length intnum.length) {
        
ret += strabsnum.slice(intnum.length);
      }
      return 
ret;
    } else {
      return 
'-';
    }
  };

  
Morris.pad2 = function(number) {
    return (
number 10 '0' '') + number;
  };

  
Morris.Grid = (function(_super) {

    
__extends(Grid_super);

    function 
Grid(options) {
      var 
_this this;
      if (
typeof options.element === 'string') {
        
this.el = $(document.getElementById(options.element));
      } else {
        
this.el = $(options.element);
      }
      if (!(
this.el != null) || this.el.length === 0) {
        throw new 
Error("Graph container element not found");
      }
      if (
this.el.css('position') === 'static') {
        
this.el.css('position''relative');
      }
      
this.options = $.extend({}, this.gridDefaultsthis.defaults || {}, options);
      if (
typeof this.options.units === 'string') {
        
this.options.postUnits options.units;
      }
      
this.raphael = new Raphael(this.el[0]);
      
this.elementWidth null;
      
this.elementHeight null;
      
this.dirty false;
      if (
this.init) {
        
this.init();
      }
      
this.setData(this.options.data);
      
this.el.bind('mousemove', function(evt) {
        var 
offset;
        
offset _this.el.offset();
        return 
_this.fire('hovermove'evt.pageX offset.leftevt.pageY offset.top);
      });
      
this.el.bind('mouseout', function(evt) {
        return 
_this.fire('hoverout');
      });
      
this.el.bind('touchstart touchmove touchend', function(evt) {
        var 
offsettouch;
        
touch evt.originalEvent.touches[0] || evt.originalEvent.changedTouches[0];
        
offset _this.el.offset();
        
_this.fire('hover'touch.pageX offset.lefttouch.pageY offset.top);
        return 
touch;
      });
      
this.el.bind('click', function(evt) {
        var 
offset;
        
offset _this.el.offset();
        return 
_this.fire('gridclick'evt.pageX offset.leftevt.pageY offset.top);
      });
      if (
this.postInit) {
        
this.postInit();
      }
    }

    
Grid.prototype.gridDefaults = {
      
dateFormatnull,
      
axestrue,
      
gridtrue,
      
gridLineColor'#aaa',
      
gridStrokeWidth0.5,
      
gridTextColor'#888',
      
gridTextSize12,
      
gridTextFamily'sans-serif',
      
gridTextWeight'normal',
      
hideHoverfalse,
      
yLabelFormatnull,
      
xLabelAngle0,
      
numLines5,
      
padding25,
      
parseTimetrue,
      
postUnits'',
      
preUnits'',
      
ymax'auto',
      
ymin'auto 0',
      
goals: [],
      
goalStrokeWidth1.0,
      
goalLineColors: ['#666633''#999966''#cc6666''#663333'],
      
events: [],
      
eventStrokeWidth1.0,
      
eventLineColors: ['#005a04''#ccffbb''#3a5f0b''#005502']
    };

    
Grid.prototype.setData = function(dataredraw) {
      var 
eidxindexmaxGoalminGoalretrowsteptotalyykeyymaxyminyval;
      if (
redraw == null) {
        
redraw true;
      }
      
this.options.data data;
      if (!(
data != null) || data.length === 0) {
        
this.data = [];
        
this.raphael.clear();
        if (
this.hover != null) {
          
this.hover.hide();
        }
        return;
      }
      
ymax this.cumulative null;
      
ymin this.cumulative null;
      if (
this.options.goals.length 0) {
        
minGoal Math.min.apply(nullthis.options.goals);
        
maxGoal Math.max.apply(nullthis.options.goals);
        
ymin ymin != null Math.min(yminminGoal) : minGoal;
        
ymax ymax != null Math.max(ymaxmaxGoal) : maxGoal;
      }
      
this.data = (function() {
        var 
_i_len_results;
        
_results = [];
        for (
index _i 0_len data.length_i _lenindex = ++_i) {
          
row data[index];
          
ret = {};
          
ret.label row[this.options.xkey];
          if (
this.options.parseTime) {
            
ret.Morris.parseDate(ret.label);
            if (
this.options.dateFormat) {
              
ret.label this.options.dateFormat(ret.x);
            } else if (
typeof ret.label === 'number') {
              
ret.label = new Date(ret.label).toString();
            }
          } else {
            
ret.index;
            if (
this.options.xLabelFormat) {
              
ret.label this.options.xLabelFormat(ret);
            }
          }
          
total 0;
          
ret.= (function() {
            var 
_j_len1_ref_results1;
            
_ref this.options.ykeys;
            
_results1 = [];
            for (
idx _j 0_len1 _ref.length_j _len1idx = ++_j) {
              
ykey _ref[idx];
              
yval row[ykey];
              if (
typeof yval === 'string') {
                
yval parseFloat(yval);
              }
              if ((
yval != null) && typeof yval !== 'number') {
                
yval null;
              }
              if (
yval != null) {
                if (
this.cumulative) {
                  
total += yval;
                } else {
                  if (
ymax != null) {
                    
ymax Math.max(yvalymax);
                    
ymin Math.min(yvalymin);
                  } else {
                    
ymax ymin yval;
                  }
                }
              }
              if (
this.cumulative && (total != null)) {
                
ymax Math.max(totalymax);
                
ymin Math.min(totalymin);
              }
              
_results1.push(yval);
            }
            return 
_results1;
          }).
call(this);
          
_results.push(ret);
        }
        return 
_results;
      }).
call(this);
      if (
this.options.parseTime) {
        
this.data this.data.sort(function(ab) {
          return (
a.b.x) - (b.a.x);
        });
      }
      
this.xmin this.data[0].x;
      
this.xmax this.data[this.data.length 1].x;
      
this.events = [];
      if (
this.options.parseTime && this.options.events.length 0) {
        
this.events = (function() {
          var 
_i_len_ref_results;
          
_ref this.options.events;
          
_results = [];
          for (
_i 0_len _ref.length_i _len_i++) {
            
_ref[_i];
            
_results.push(Morris.parseDate(e));
          }
          return 
_results;
        }).
call(this);
        
this.xmax Math.max(this.xmaxMath.max.apply(nullthis.events));
        
this.xmin Math.min(this.xminMath.min.apply(nullthis.events));
      }
      if (
this.xmin === this.xmax) {
        
this.xmin -= 1;
        
this.xmax += 1;
      }
      
this.ymin this.yboundary('min'ymin);
      
this.ymax this.yboundary('max'ymax);
      if (
this.ymin === this.ymax) {
        if (
ymin) {
          
this.ymin -= 1;
        }
        
this.ymax += 1;
      }
      if (
this.options.axes === true || this.options.grid === true) {
        if (
this.options.ymax === this.gridDefaults.ymax && this.options.ymin === this.gridDefaults.ymin) {
          
this.grid this.autoGridLines(this.yminthis.ymaxthis.options.numLines);
          
this.ymin Math.min(this.yminthis.grid[0]);
          
this.ymax Math.max(this.ymaxthis.grid[this.grid.length 1]);
        } else {
          
step = (this.ymax this.ymin) / (this.options.numLines 1);
          
this.grid = (function() {
            var 
_i_ref_ref1_results;
            
_results = [];
            for (
_i _ref this.ymin_ref1 this.ymax_ref <= _ref1 _i <= _ref1 _i >= _ref1_i += step) {
              
_results.push(y);
            }
            return 
_results;
          }).
call(this);
        }
      }
      
this.dirty true;
      if (
redraw) {
        return 
this.redraw();
      }
    };

    
Grid.prototype.yboundary = function(boundaryTypecurrentValue) {
      var 
boundaryOptionsuggestedValue;
      
boundaryOption this.options["y" boundaryType];
      if (
typeof boundaryOption === 'string') {
        if (
boundaryOption.slice(04) === 'auto') {
          if (
boundaryOption.length 5) {
            
suggestedValue parseInt(boundaryOption.slice(5), 10);
            if (
currentValue == null) {
              return 
suggestedValue;
            }
            return 
Math[boundaryType](currentValuesuggestedValue);
          } else {
            if (
currentValue != null) {
              return 
currentValue;
            } else {
              return 
0;
            }
          }
        } else {
          return 
parseInt(boundaryOption10);
        }
      } else {
        return 
boundaryOption;
      }
    };

    
Grid.prototype.autoGridLines = function(yminymaxnlines) {
      var 
gmaxgmingridsmagspanstepunityymag;
      
span ymax ymin;
      
ymag Math.floor(Math.log(span) / Math.log(10));
      
unit Math.pow(10ymag);
      
gmin Math.floor(ymin unit) * unit;
      
gmax Math.ceil(ymax unit) * unit;
      
step = (gmax gmin) / (nlines 1);
      if (
unit === && step && Math.ceil(step) !== step) {
        
step Math.ceil(step);
        
gmax gmin step * (nlines 1);
      }
      if (
gmin && gmax 0) {
        
gmin Math.floor(ymin step) * step;
        
gmax Math.ceil(ymax step) * step;
      }
      if (
step 1) {
        
smag Math.floor(Math.log(step) / Math.log(10));
        
grid = (function() {
          var 
_i_results;
          
_results = [];
          for (
_i gmingmin <= gmax _i <= gmax _i >= gmax_i += step) {
            
_results.push(parseFloat(y.toFixed(smag)));
          }
          return 
_results;
        })();
      } else {
        
grid = (function() {
          var 
_i_results;
          
_results = [];
          for (
_i gmingmin <= gmax _i <= gmax _i >= gmax_i += step) {
            
_results.push(y);
          }
          return 
_results;
        })();
      }
      return 
grid;
    };

    
Grid.prototype._calc = function() {
      var 
bottomOffsetsgridLinehiwyLabelWidths;
      
this.el.width();
      
this.el.height();
      if (
this.elementWidth !== || this.elementHeight !== || this.dirty) {
        
this.elementWidth w;
        
this.elementHeight h;
        
this.dirty false;
        
this.left this.options.padding;
        
this.right this.elementWidth this.options.padding;
        
this.top this.options.padding;
        
this.bottom this.elementHeight this.options.padding;
        if (
this.options.axes) {
          
yLabelWidths = (function() {
            var 
_i_len_ref_results;
            
_ref this.grid;
            
_results = [];
            for (
_i 0_len _ref.length_i _len_i++) {
              
gridLine _ref[_i];
              
_results.push(this.measureText(this.yAxisFormat(gridLine)).width);
            }
            return 
_results;
          }).
call(this);
          
this.left += Math.max.apply(MathyLabelWidths);
          
bottomOffsets = (function() {
            var 
_i_ref_results;
            
_results = [];
            for (
_i 0_ref this.data.length<= _ref _i _ref _i _ref<= _ref ? ++_i : --_i) {
              
_results.push(this.measureText(this.data[i].text, -this.options.xLabelAngle).height);
            }
            return 
_results;
          }).
call(this);
          
this.bottom -= Math.max.apply(MathbottomOffsets);
        }
        
this.width Math.max(1this.right this.left);
        
this.height Math.max(1this.bottom this.top);
        
this.dx this.width / (this.xmax this.xmin);
        
this.dy this.height / (this.ymax this.ymin);
        if (
this.calc) {
          return 
this.calc();
        }
      }
    };

    
Grid.prototype.transY = function(y) {
      return 
this.bottom - (this.ymin) * this.dy;
    };

    
Grid.prototype.transX = function(x) {
      if (
this.data.length === 1) {
        return (
this.left this.right) / 2;
      } else {
        return 
this.left + (this.xmin) * this.dx;
      }
    };

    
Grid.prototype.redraw = function() {
      
this.raphael.clear();
      
this._calc();
      
this.drawGrid();
      
this.drawGoals();
      
this.drawEvents();
      if (
this.draw) {
        return 
this.draw();
      }
    };

    
Grid.prototype.measureText = function(textangle) {
      var 
rettt;
      if (
angle == null) {
        
angle 0;
      }
      
tt this.raphael.text(100100text).attr('font-size'this.options.gridTextSize).attr('font-family'this.options.gridTextFamily).attr('font-weight'this.options.gridTextWeight).rotate(angle);
      
ret tt.getBBox();
      
tt.remove();
      return 
ret;
    };

    
Grid.prototype.yAxisFormat = function(label) {
      return 
this.yLabelFormat(label);
    };

    
Grid.prototype.yLabelFormat = function(label) {
      if (
typeof this.options.yLabelFormat === 'function') {
        return 
this.options.yLabelFormat(label);
      } else {
        return 
"" this.options.preUnits + (Morris.commas(label)) + this.options.postUnits;
      }
    };

    
Grid.prototype.updateHover = function(xy) {
      var 
hit_ref;
      
hit this.hitTest(xy);
      if (
hit != null) {
        return (
_ref this.hover).update.apply(_refhit);
      }
    };

    
Grid.prototype.drawGrid = function() {
      var 
lineYy_i_len_ref_results;
      if (
this.options.grid === false && this.options.axes === false) {
        return;
      }
      
_ref this.grid;
      
_results = [];
      for (
_i 0_len _ref.length_i _len_i++) {
        
lineY _ref[_i];
        
this.transY(lineY);
        if (
this.options.axes) {
          
this.drawYAxisLabel(this.left this.options.padding 2ythis.yAxisFormat(lineY));
        }
        if (
this.options.grid) {
          
_results.push(this.drawGridLine("M" this.left "," "H" + (this.left this.width)));
        } else {
          
_results.push(void 0);
        }
      }
      return 
_results;
    };

    
Grid.prototype.drawGoals = function() {
      var 
colorgoali_i_len_ref_results;
      
_ref this.options.goals;
      
_results = [];
      for (
_i 0_len _ref.length_i _len= ++_i) {
        
goal _ref[i];
        
color this.options.goalLineColors[this.options.goalLineColors.length];
        
_results.push(this.drawGoal(goalcolor));
      }
      return 
_results;
    };

    
Grid.prototype.drawEvents = function() {
      var 
coloreventi_i_len_ref_results;
      
_ref this.events;
      
_results = [];
      for (
_i 0_len _ref.length_i _len= ++_i) {
        
event _ref[i];
        
color this.options.eventLineColors[this.options.eventLineColors.length];
        
_results.push(this.drawEvent(eventcolor));
      }
      return 
_results;
    };

    
Grid.prototype.drawGoal = function(goalcolor) {
      return 
this.raphael.path("M" this.left "," + (this.transY(goal)) + "H" this.right).attr('stroke'color).attr('stroke-width'this.options.goalStrokeWidth);
    };

    
Grid.prototype.drawEvent = function(eventcolor) {
      return 
this.raphael.path("M" + (this.transX(event)) + "," this.bottom "V" this.top).attr('stroke'color).attr('stroke-width'this.options.eventStrokeWidth);
    };

    
Grid.prototype.drawYAxisLabel = function(xPosyPostext) {
      return 
this.raphael.text(xPosyPostext).attr('font-size'this.options.gridTextSize).attr('font-family'this.options.gridTextFamily).attr('font-weight'this.options.gridTextWeight).attr('fill'this.options.gridTextColor).attr('text-anchor''end');
    };

    
Grid.prototype.drawGridLine = function(path) {
      return 
this.raphael.path(path).attr('stroke'this.options.gridLineColor).attr('stroke-width'this.options.gridStrokeWidth);
    };

    return 
Grid;

  })(
Morris.EventEmitter);

  
Morris.parseDate = function(date) {
    var 
isecsmmsecsnooffsetminspqrretsecs;
    if (
typeof date === 'number') {
      return 
date;
    }
    
date.match(/^(d+) Q(d)$/);
    
date.match(/^(d+)-(d+)$/);
    
date.match(/^(d+)-(d+)-(d+)$/);
    
date.match(/^(d+) W(d+)$/);
    
date.match(/^(d+)-(d+)-(d+)[ T](d+):(d+)(Z|([+-])(dd):?(dd))?$/);
    
date.match(/^(d+)-(d+)-(d+)[ T](d+):(d+):(d+(.d+)?)(Z|([+-])(dd):?(dd))?$/);
    if (
m) {
      return new 
Date(parseInt(m[1], 10), parseInt(m[2], 10) * 11).getTime();
    } else if (
n) {
      return new 
Date(parseInt(n[1], 10), parseInt(n[2], 10) - 11).getTime();
    } else if (
o) {
      return new 
Date(parseInt(o[1], 10), parseInt(o[2], 10) - 1parseInt(o[3], 10)).getTime();
    } else if (
p) {
      
ret = new Date(parseInt(p[1], 10), 01);
      if (
ret.getDay() !== 4) {
        
ret.setMonth(0+ ((ret.getDay()) + 7) % 7);
      }
      return 
ret.getTime() + parseInt(p[2], 10) * 604800000;
    } else if (
q) {
      if (!
q[6]) {
        return new 
Date(parseInt(q[1], 10), parseInt(q[2], 10) - 1parseInt(q[3], 10), parseInt(q[4], 10), parseInt(q[5], 10)).getTime();
      } else {
        
offsetmins 0;
        if (
q[6] !== 'Z') {
          
offsetmins parseInt(q[8], 10) * 60 parseInt(q[9], 10);
          if (
q[7] === '+') {
            
offsetmins offsetmins;
          }
        }
        return 
Date.UTC(parseInt(q[1], 10), parseInt(q[2], 10) - 1parseInt(q[3], 10), parseInt(q[4], 10), parseInt(q[5], 10) + offsetmins);
      }
    } else if (
r) {
      
secs parseFloat(r[6]);
      
isecs Math.floor(secs);
      
msecs Math.round((secs isecs) * 1000);
      if (!
r[8]) {
        return new 
Date(parseInt(r[1], 10), parseInt(r[2], 10) - 1parseInt(r[3], 10), parseInt(r[4], 10), parseInt(r[5], 10), isecsmsecs).getTime();
      } else {
        
offsetmins 0;
        if (
r[8] !== 'Z') {
          
offsetmins parseInt(r[10], 10) * 60 parseInt(r[11], 10);
          if (
r[9] === '+') {
            
offsetmins offsetmins;
          }
        }
        return 
Date.UTC(parseInt(r[1], 10), parseInt(r[2], 10) - 1parseInt(r[3], 10), parseInt(r[4], 10), parseInt(r[5], 10) + offsetminsisecsmsecs);
      }
    } else {
      return new 
Date(parseInt(date10), 01).getTime();
    }
  };

  
Morris.Hover = (function() {

    
Hover.defaults = {
      
"class"'morris-hover morris-default-style'
    
};

    function 
Hover(options) {
      if (
options == null) {
        
options = {};
      }
      
this.options = $.extend({}, Morris.Hover.defaultsoptions);
      
this.el = $("<div class='" this.options["class"] + "'></div>");
      
this.el.hide();
      
this.options.parent.append(this.el);
    }

    
Hover.prototype.update = function(htmlxy) {
      
this.html(html);
      
this.show();
      return 
this.moveTo(xy);
    };

    
Hover.prototype.html = function(content) {
      return 
this.el.html(content);
    };

    
Hover.prototype.moveTo = function(xy) {
      var 
hoverHeighthoverWidthleftparentHeightparentWidthtop;
      
parentWidth this.options.parent.innerWidth();
      
parentHeight this.options.parent.innerHeight();
      
hoverWidth this.el.outerWidth();
      
hoverHeight this.el.outerHeight();
      
left Math.min(Math.max(0hoverWidth 2), parentWidth hoverWidth);
      if (
!= null) {
        
top hoverHeight 10;
        if (
top 0) {
          
top 10;
          if (
top hoverHeight parentHeight) {
            
top parentHeight hoverHeight 2;
          }
        }
      } else {
        
top parentHeight hoverHeight 2;
      }
      return 
this.el.css({
        
leftleft "px",
        
topparseInt(top) + "px"
      
});
    };

    
Hover.prototype.show = function() {
      return 
this.el.show();
    };

    
Hover.prototype.hide = function() {
      return 
this.el.hide();
    };

    return 
Hover;

  })();

  
Morris.Line = (function(_super) {

    
__extends(Line_super);

    function 
Line(options) {
      
this.hilight __bind(this.hilightthis);

      
this.onHoverOut __bind(this.onHoverOutthis);

      
this.onHoverMove __bind(this.onHoverMovethis);

      
this.onGridClick __bind(this.onGridClickthis);
      if (!(
this instanceof Morris.Line)) {
        return new 
Morris.Line(options);
      }
      
Line.__super__.constructor.call(thisoptions);
    }

    
Line.prototype.init = function() {
      
this.pointGrow Raphael.animation({
        
rthis.options.pointSize 3
      
}, 25'linear');
      
this.pointShrink Raphael.animation({
        
rthis.options.pointSize
      
}, 25'linear');
      if (
this.options.hideHover !== 'always') {
        
this.hover = new Morris.Hover({
          
parentthis.el
        
});
        
this.on('hovermove'this.onHoverMove);
        
this.on('hoverout'this.onHoverOut);
        return 
this.on('gridclick'this.onGridClick);
      }
    };

    
Line.prototype.defaults = {
      
lineWidth3,
      
pointSize4,
      
lineColors: ['#0b62a4''#7A92A3''#4da74d''#afd8f8''#edc240''#cb4b4b''#9440ed'],
      
pointWidths: [1],
      
pointStrokeColors: ['#ffffff'],
      
pointFillColors: [],
      
smoothtrue,
      
xLabels'auto',
      
xLabelFormatnull,
      
xLabelMargin24,
      
continuousLinetrue,
      
hideHoverfalse
    
};

    
Line.prototype.calc = function() {
      
this.calcPoints();
      return 
this.generatePaths();
    };

    
Line.prototype.calcPoints = function() {
      var 
rowy_i_len_ref_results;
      
_ref this.data;
      
_results = [];
      for (
_i 0_len _ref.length_i _len_i++) {
        
row _ref[_i];
        
row._x this.transX(row.x);
        
row._y = (function() {
          var 
_j_len1_ref1_results1;
          
_ref1 row.y;
          
_results1 = [];
          for (
_j 0_len1 _ref1.length_j _len1_j++) {
            
_ref1[_j];
            if (
!= null) {
              
_results1.push(this.transY(y));
            } else {
              
_results1.push(y);
            }
          }
          return 
_results1;
        }).
call(this);
        
_results.push(row._ymax Math.min.apply(null, [this.bottom].concat((function() {
          var 
_j_len1_ref1_results1;
          
_ref1 row._y;
          
_results1 = [];
          for (
_j 0_len1 _ref1.length_j _len1_j++) {
            
_ref1[_j];
            if (
!= null) {
              
_results1.push(y);
            }
          }
          return 
_results1;
        })())));
      }
      return 
_results;
    };

    
Line.prototype.hitTest = function(xy) {
      var 
indexr_i_len_ref;
      if (
this.data.length === 0) {
        return 
null;
      }
      
_ref this.data.slice(1);
      for (
index _i 0_len _ref.length_i _lenindex = ++_i) {
        
_ref[index];
        if (
< (r._x this.data[index]._x) / 2) {
          break;
        }
      }
      return 
index;
    };

    
Line.prototype.onGridClick = function(xy) {
      var 
index;
      
index this.hitTest(xy);
      return 
this.fire('click'indexthis.options.data[index], xy);
    };

    
Line.prototype.onHoverMove = function(xy) {
      var 
index;
      
index this.hitTest(xy);
      return 
this.displayHoverForRow(index);
    };

    
Line.prototype.onHoverOut = function() {
      if (
this.options.hideHover !== false) {
        return 
this.displayHoverForRow(null);
      }
    };

    
Line.prototype.displayHoverForRow = function(index) {
      var 
_ref;
      if (
index != null) {
        (
_ref this.hover).update.apply(_refthis.hoverContentForRow(index));
        return 
this.hilight(index);
      } else {
        
this.hover.hide();
        return 
this.hilight();
      }
    };

    
Line.prototype.hoverContentForRow = function(index) {
      var 
contentjrowy_i_len_ref;
      
row this.data[index];
      
content "<div class='morris-hover-row-label'>" row.label "</div>";
      
_ref row.y;
      for (
_i 0_len _ref.length_i _len= ++_i) {
        
_ref[j];
        
content += "<div class='morris-hover-point' style='color: " + (this.colorFor(rowj'label')) + "'>n  " this.options.labels[j] + ":n  " + (this.yLabelFormat(y)) + "n</div>";
      }
      if (
typeof this.options.hoverCallback === 'function') {
        
content this.options.hoverCallback(indexthis.optionscontent);
      }
      return [
contentrow._xrow._ymax];
    };

    
Line.prototype.generatePaths = function() {
      var 
ccoordsirsmooth;
      return 
this.paths = (function() {
        var 
_i_ref_ref1_results;
        
_results = [];
        for (
_i 0_ref this.options.ykeys.length<= _ref _i _ref _i _ref<= _ref ? ++_i : --_i) {
          
smooth this.options.smooth === true || (_ref1 this.options.ykeys[i], __indexOf.call(this.options.smooth_ref1) >= 0);
          
coords = (function() {
            var 
_j_len_ref2_results1;
            
_ref2 this.data;
            
_results1 = [];
            for (
_j 0_len _ref2.length_j _len_j++) {
              
_ref2[_j];
              if (
r._y[i] !== void 0) {
                
_results1.push({
                  
xr._x,
                  
yr._y[i]
                });
              }
            }
            return 
_results1;
          }).
call(this);
          if (
this.options.continuousLine) {
            
coords = (function() {
              var 
_j_len_results1;
              
_results1 = [];
              for (
_j 0_len coords.length_j _len_j++) {
                
coords[_j];
                if (
c.!== null) {
                  
_results1.push(c);
                }
              }
              return 
_results1;
            })();
          }
          if (
coords.length 1) {
            
_results.push(Morris.Line.createPath(coordssmooththis.bottom));
          } else {
            
_results.push(null);
          }
        }
        return 
_results;
      }).
call(this);
    };

    
Line.prototype.draw = function() {
      if (
this.options.axes) {
        
this.drawXAxis();
      }
      
this.drawSeries();
      if (
this.options.hideHover === false) {
        return 
this.displayHoverForRow(this.data.length 1);
      }
    };

    
Line.prototype.drawXAxis = function() {
      var 
drawLabelllabelsprevAngleMarginprevLabelMarginrowypos_i_len_results,
        
_this this;
      
ypos this.bottom this.options.padding 2;
      
prevLabelMargin null;
      
prevAngleMargin null;
      
drawLabel = function(labelTextxpos) {
        var 
labellabelBoxmarginoffsettextBox;
        
label _this.drawXAxisLabel(_this.transX(xpos), yposlabelText);
        
textBox label.getBBox();
        
label.transform("r" + (-_this.options.xLabelAngle));
        
labelBox label.getBBox();
        
label.transform("t0," + (labelBox.height 2) + "...");
        if (
_this.options.xLabelAngle !== 0) {
          
offset = -0.5 textBox.width Math.cos(_this.options.xLabelAngle Math.PI 180.0);
          
label.transform("t" offset ",0...");
        }
        
labelBox label.getBBox();
        if ((!(
prevLabelMargin != null) || prevLabelMargin >= labelBox.labelBox.width || (prevAngleMargin != null) && prevAngleMargin >= labelBox.x) && labelBox.>= && (labelBox.labelBox.width) < _this.el.width()) {
          if (
_this.options.xLabelAngle !== 0) {
            
margin 1.25 _this.options.gridTextSize Math.sin(_this.options.xLabelAngle Math.PI 180.0);
            
prevAngleMargin labelBox.margin;
          }
          return 
prevLabelMargin labelBox._this.options.xLabelMargin;
        } else {
          return 
label.remove();
        }
      };
      if (
this.options.parseTime) {
        if (
this.data.length === && this.options.xLabels === 'auto') {
          
labels = [[this.data[0].labelthis.data[0].x]];
        } else {
          
labels Morris.labelSeries(this.xminthis.xmaxthis.widththis.options.xLabelsthis.options.xLabelFormat);
        }
      } else {
        
labels = (function() {
          var 
_i_len_ref_results;
          
_ref this.data;
          
_results = [];
          for (
_i 0_len _ref.length_i _len_i++) {
            
row _ref[_i];
            
_results.push([row.labelrow.x]);
          }
          return 
_results;
        }).
call(this);
      }
      
labels.reverse();
      
_results = [];
      for (
_i 0_len labels.length_i _len_i++) {
        
labels[_i];
        
_results.push(drawLabel(l[0], l[1]));
      }
      return 
_results;
    };

    
Line.prototype.drawSeries = function() {
      var 
i_i_j_ref_ref1_results;
      
this.seriesPoints = [];
      for (
_i _ref this.options.ykeys.length 1_ref <= _i <= _i >= 0_ref <= ? ++_i : --_i) {
        
this._drawLineFor(i);
      }
      
_results = [];
      for (
_j _ref1 this.options.ykeys.length 1_ref1 <= _j <= _j >= 0_ref1 <= ? ++_j : --_j) {
        
_results.push(this._drawPointFor(i));
      }
      return 
_results;
    };

    
Line.prototype._drawPointFor = function(index) {
      var 
circlerow_i_len_ref_results;
      
this.seriesPoints[index] = [];
      
_ref this.data;
      
_results = [];
      for (
_i 0_len _ref.length_i _len_i++) {
        
row _ref[_i];
        
circle null;
        if (
row._y[index] != null) {
          
circle this.drawLinePoint(row._xrow._y[index], this.options.pointSizethis.colorFor(rowindex'point'), index);
        }
        
_results.push(this.seriesPoints[index].push(circle));
      }
      return 
_results;
    };

    
Line.prototype._drawLineFor = function(index) {
      var 
path;
      
path this.paths[index];
      if (
path !== null) {
        return 
this.drawLinePath(paththis.colorFor(nullindex'line'));
      }
    };

    
Line.createPath = function(coordssmoothbottom) {
      var 
coordggradsiixlgpathprevCoordx1x2y1y2_i_len;
      
path "";
      if (
smooth) {
        
grads Morris.Line.gradients(coords);
      }
      
prevCoord = {
        
ynull
      
};
      for (
_i 0_len coords.length_i _len= ++_i) {
        
coord coords[i];
        if (
coord.!= null) {
          if (
prevCoord.!= null) {
            if (
smooth) {
              
grads[i];
              
lg grads[1];
              
ix = (coord.prevCoord.x) / 4;
              
x1 prevCoord.ix;
              
y1 Math.min(bottomprevCoord.ix lg);
              
x2 coord.ix;
              
y2 Math.min(bottomcoord.ix g);
              
path += "C" x1 "," y1 "," x2 "," y2 "," coord."," coord.y;
            } else {
              
path += "L" coord."," coord.y;
            }
          } else {
            if (!
smooth || (grads[i] != null)) {
              
path += "M" coord."," coord.y;
            }
          }
        }
        
prevCoord coord;
      }
      return 
path;
    };

    
Line.gradients = function(coords) {
      var 
coordgradinextCoordprevCoord_i_len_results;
      
grad = function(ab) {
        return (
a.b.y) / (a.b.x);
      };
      
_results = [];
      for (
_i 0_len coords.length_i _len= ++_i) {
        
coord coords[i];
        if (
coord.!= null) {
          
nextCoord coords[1] || {
            
ynull
          
};
          
prevCoord coords[1] || {
            
ynull
          
};
          if ((
prevCoord.!= null) && (nextCoord.!= null)) {
            
_results.push(grad(prevCoordnextCoord));
          } else if (
prevCoord.!= null) {
            
_results.push(grad(prevCoordcoord));
          } else if (
nextCoord.!= null) {
            
_results.push(grad(coordnextCoord));
          } else {
            
_results.push(null);
          }
        } else {
          
_results.push(null);
        }
      }
      return 
_results;
    };

    
Line.prototype.hilight = function(index) {
      var 
i_i_j_ref_ref1;
      if (
this.prevHilight !== null && this.prevHilight !== index) {
        for (
_i 0_ref this.seriesPoints.length 1<= _ref _i <= _ref _i >= _ref<= _ref ? ++_i : --_i) {
          if (
this.seriesPoints[i][this.prevHilight]) {
            
this.seriesPoints[i][this.prevHilight].animate(this.pointShrink);
          }
        }
      }
      if (
index !== null && this.prevHilight !== index) {
        for (
_j 0_ref1 this.seriesPoints.length 1<= _ref1 _j <= _ref1 _j >= _ref1<= _ref1 ? ++_j : --_j) {
          if (
this.seriesPoints[i][index]) {
            
this.seriesPoints[i][index].animate(this.pointGrow);
          }
        }
      }
      return 
this.prevHilight index;
    };

    
Line.prototype.colorFor = function(rowsidxtype) {
      if (
typeof this.options.lineColors === 'function') {
        return 
this.options.lineColors.call(thisrowsidxtype);
      } else if (
type === 'point') {
        return 
this.options.pointFillColors[sidx this.options.pointFillColors.length] || this.options.lineColors[sidx this.options.lineColors.length];
      } else {
        return 
this.options.lineColors[sidx this.options.lineColors.length];
      }
    };

    
Line.prototype.drawXAxisLabel = function(xPosyPostext) {
      return 
this.raphael.text(xPosyPostext).attr('font-size'this.options.gridTextSize).attr('font-family'this.options.gridTextFamily).attr('font-weight'this.options.gridTextWeight).attr('fill'this.options.gridTextColor);
    };

    
Line.prototype.drawLinePath = function(pathlineColor) {
      return 
this.raphael.path(path).attr('stroke'lineColor).attr('stroke-width'this.options.lineWidth);
    };

    
Line.prototype.drawLinePoint = function(xPosyPossizepointColorlineIndex) {
      return 
this.raphael.circle(xPosyPossize).attr('fill'pointColor).attr('stroke-width'this.strokeWidthForSeries(lineIndex)).attr('stroke'this.strokeForSeries(lineIndex));
    };

    
Line.prototype.strokeWidthForSeries = function(index) {
      return 
this.options.pointWidths[index this.options.pointWidths.length];
    };

    
Line.prototype.strokeForSeries = function(index) {
      return 
this.options.pointStrokeColors[index this.options.pointStrokeColors.length];
    };

    return 
Line;

  })(
Morris.Grid);

  
Morris.labelSeries = function(dmindmaxpxwidthspecNamexLabelFormat) {
    var 
dd0ddensitynameretsspect_i_len_ref;
    
ddensity 200 * (dmax dmin) / pxwidth;
    
d0 = new Date(dmin);
    
spec Morris.LABEL_SPECS[specName];
    if (
spec === void 0) {
      
_ref Morris.AUTO_LABEL_ORDER;
      for (
_i 0_len _ref.length_i _len_i++) {
        
name _ref[_i];
        
Morris.LABEL_SPECS[name];
        if (
ddensity >= s.span) {
          
spec s;
          break;
        }
      }
    }
    if (
spec === void 0) {
      
spec Morris.LABEL_SPECS["second"];
    }
    if (
xLabelFormat) {
      
spec = $.extend({}, spec, {
        
fmtxLabelFormat
      
});
    }
    
spec.start(d0);
    
ret = [];
    while ((
d.getTime()) <= dmax) {
      if (
>= dmin) {
        
ret.push([spec.fmt(d), t]);
      }
      
spec.incr(d);
    }
    return 
ret;
  };

  
minutesSpecHelper = function(interval) {
    return {
      
spaninterval 60 1000,
      
start: function(d) {
        return new 
Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours());
      },
      
fmt: function(d) {
        return 
"" + (Morris.pad2(d.getHours())) + ":" + (Morris.pad2(d.getMinutes()));
      },
      
incr: function(d) {
        return 
d.setUTCMinutes(d.getUTCMinutes() + interval);
      }
    };
  };

  
secondsSpecHelper = function(interval) {
    return {
      
spaninterval 1000,
      
start: function(d) {
        return new 
Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes());
      },
      
fmt: function(d) {
        return 
"" + (Morris.pad2(d.getHours())) + ":" + (Morris.pad2(d.getMinutes())) + ":" + (Morris.pad2(d.getSeconds()));
      },
      
incr: function(d) {
        return 
d.setUTCSeconds(d.getUTCSeconds() + interval);
      }
    };
  };

  
Morris.LABEL_SPECS = {
    
"decade": {
      
span172800000000,
      
start: function(d) {
        return new 
Date(d.getFullYear() - d.getFullYear() % 1001);
      },
      
fmt: function(d) {
        return 
"" + (d.getFullYear());
      },
      
incr: function(d) {
        return 
d.setFullYear(d.getFullYear() + 10);
      }
    },
    
"year": {
      
span17280000000,
      
start: function(d) {
        return new 
Date(d.getFullYear(), 01);
      },
      
fmt: function(d) {
        return 
"" + (d.getFullYear());
      },
      
incr: function(d) {
        return 
d.setFullYear(d.getFullYear() + 1);
      }
    },
    
"month": {
      
span2419200000,
      
start: function(d) {
        return new 
Date(d.getFullYear(), d.getMonth(), 1);
      },
      
fmt: function(d) {
        return 
"" + (d.getFullYear()) + "-" + (Morris.pad2(d.getMonth() + 1));
      },
      
incr: function(d) {
        return 
d.setMonth(d.getMonth() + 1);
      }
    },
    
"day": {
      
span86400000,
      
start: function(d) {
        return new 
Date(d.getFullYear(), d.getMonth(), d.getDate());
      },
      
fmt: function(d) {
        return 
"" + (d.getFullYear()) + "-" + (Morris.pad2(d.getMonth() + 1)) + "-" + (Morris.pad2(d.getDate()));
      },
      
incr: function(d) {
        return 
d.setDate(d.getDate() + 1);
      }
    },
    
"hour"minutesSpecHelper(60),
    
"30min"minutesSpecHelper(30),
    
"15min"minutesSpecHelper(15),
    
"10min"minutesSpecHelper(10),
    
"5min"minutesSpecHelper(5),
    
"minute"minutesSpecHelper(1),
    
"30sec"secondsSpecHelper(30),
    
"15sec"secondsSpecHelper(15),
    
"10sec"secondsSpecHelper(10),
    
"5sec"secondsSpecHelper(5),
    
"second"secondsSpecHelper(1)
  };

  
Morris.AUTO_LABEL_ORDER = ["decade""year""month""day""hour""30min""15min""10min""5min""minute""30sec""15sec""10sec""5sec""second"];

  
Morris.Area = (function(_super) {
    var 
areaDefaults;

    
__extends(Area_super);

    
areaDefaults = {
      
fillOpacity'auto',
      
behaveLikeLinefalse
    
};

    function 
Area(options) {
      var 
areaOptions;
      if (!(
this instanceof Morris.Area)) {
        return new 
Morris.Area(options);
      }
      
areaOptions = $.extend({}, areaDefaultsoptions);
      
this.cumulative = !areaOptions.behaveLikeLine;
      if (
areaOptions.fillOpacity === 'auto') {
        
areaOptions.fillOpacity areaOptions.behaveLikeLine .8 1;
      }
      
Area.__super__.constructor.call(thisareaOptions);
    }

    
Area.prototype.calcPoints = function() {
      var 
rowtotaly_i_len_ref_results;
      
_ref this.data;
      
_results = [];
      for (
_i 0_len _ref.length_i _len_i++) {
        
row _ref[_i];
        
row._x this.transX(row.x);
        
total 0;
        
row._y = (function() {
          var 
_j_len1_ref1_results1;
          
_ref1 row.y;
          
_results1 = [];
          for (
_j 0_len1 _ref1.length_j _len1_j++) {
            
_ref1[_j];
            if (
this.options.behaveLikeLine) {
              
_results1.push(this.transY(y));
            } else {
              
total += || 0;
              
_results1.push(this.transY(total));
            }
          }
          return 
_results1;
        }).
call(this);
        
_results.push(row._ymax Math.max.apply(Mathrow._y));
      }
      return 
_results;
    };

    
Area.prototype.drawSeries = function() {
      var 
irange_i_j_k_len_ref_ref1_results_results1_results2;
      
this.seriesPoints = [];
      if (
this.options.behaveLikeLine) {
        
range = (function() {
          
_results = [];
          for (var 
_i 0_ref this.options.ykeys.length 1<= _ref _i <= _ref _i >= _ref<= _ref _i++ : _i--){ _results.push(_i); }
          return 
_results;
        }).
apply(this);
      } else {
        
range = (function() {
          
_results1 = [];
          for (var 
_j _ref1 this.options.ykeys.length 1_ref1 <= _j <= _j >= 0_ref1 <= _j++ : _j--){ _results1.push(_j); }
          return 
_results1;
        }).
apply(this);
      }
      
_results2 = [];
      for (
_k 0_len range.length_k _len_k++) {
        
range[_k];
        
this._drawFillFor(i);
        
this._drawLineFor(i);
        
_results2.push(this._drawPointFor(i));
      }
      return 
_results2;
    };

    
Area.prototype._drawFillFor = function(index) {
      var 
path;
      
path this.paths[index];
      if (
path !== null) {
        
path path + ("L" + (this.transX(this.xmax)) + "," this.bottom "L" + (this.transX(this.xmin)) + "," this.bottom "Z");
        return 
this.drawFilledPath(paththis.fillForSeries(index));
      }
    };

    
Area.prototype.fillForSeries = function(i) {
      var 
color;
      
color Raphael.rgb2hsl(this.colorFor(this.data[i], i'line'));
      return 
Raphael.hsl(color.hthis.options.behaveLikeLine color.0.9 color.0.75Math.min(0.98this.options.behaveLikeLine color.1.2 color.1.25));
    };

    
Area.prototype.drawFilledPath = function(pathfill) {
      return 
this.raphael.path(path).attr('fill'fill).attr('fill-opacity'this.options.fillOpacity).attr('stroke-width'0);
    };

    return 
Area;

  })(
Morris.Line);

  
Morris.Bar = (function(_super) {

    
__extends(Bar_super);

    function 
Bar(options) {
      
this.onHoverOut __bind(this.onHoverOutthis);

      
this.onHoverMove __bind(this.onHoverMovethis);

      
this.onGridClick __bind(this.onGridClickthis);
      if (!(
this instanceof Morris.Bar)) {
        return new 
Morris.Bar(options);
      }
      
Bar.__super__.constructor.call(this, $.extend({}, options, {
        
parseTimefalse
      
}));
    }

    
Bar.prototype.init = function() {
      
this.cumulative this.options.stacked;
      if (
this.options.hideHover !== 'always') {
        
this.hover = new Morris.Hover({
          
parentthis.el
        
});
        
this.on('hovermove'this.onHoverMove);
        
this.on('hoverout'this.onHoverOut);
        return 
this.on('gridclick'this.onGridClick);
      }
    };

    
Bar.prototype.defaults = {
      
barSizeRatio0.75,
      
barGap3,
      
barColors: ['#0b62a4''#7a92a3''#4da74d''#afd8f8''#edc240''#cb4b4b''#9440ed'],
      
xLabelMargin50
    
};

    
Bar.prototype.calc = function() {
      var 
_ref;
      
this.calcBars();
      if (
this.options.hideHover === false) {
        return (
_ref this.hover).update.apply(_refthis.hoverContentForRow(this.data.length 1));
      }
    };

    
Bar.prototype.calcBars = function() {
      var 
idxrowy_i_len_ref_results;
      
_ref this.data;
      
_results = [];
      for (
idx _i 0_len _ref.length_i _lenidx = ++_i) {
        
row _ref[idx];
        
row._x this.left this.width * (idx 0.5) / this.data.length;
        
_results.push(row._y = (function() {
          var 
_j_len1_ref1_results1;
          
_ref1 row.y;
          
_results1 = [];
          for (
_j 0_len1 _ref1.length_j _len1_j++) {
            
_ref1[_j];
            if (
!= null) {
              
_results1.push(this.transY(y));
            } else {
              
_results1.push(null);
            }
          }
          return 
_results1;
        }).
call(this));
      }
      return 
_results;
    };

    
Bar.prototype.draw = function() {
      if (
this.options.axes) {
        
this.drawXAxis();
      }
      return 
this.drawSeries();
    };

    
Bar.prototype.drawXAxis = function() {
      var 
ilabellabelBoxmarginoffsetprevAngleMarginprevLabelMarginrowtextBoxypos_i_ref_results;
      
ypos this.bottom this.options.padding 2;
      
prevLabelMargin null;
      
prevAngleMargin null;
      
_results = [];
      for (
_i 0_ref this.data.length<= _ref _i _ref _i _ref<= _ref ? ++_i : --_i) {
        
row this.data[this.data.length i];
        
label this.drawXAxisLabel(row._xyposrow.label);
        
textBox label.getBBox();
        
label.transform("r" + (-this.options.xLabelAngle));
        
labelBox label.getBBox();
        
label.transform("t0," + (labelBox.height 2) + "...");
        if (
this.options.xLabelAngle !== 0) {
          
offset = -0.5 textBox.width Math.cos(this.options.xLabelAngle Math.PI 180.0);
          
label.transform("t" offset ",0...");
        }
        if ((!(
prevLabelMargin != null) || prevLabelMargin >= labelBox.labelBox.width || (prevAngleMargin != null) && prevAngleMargin >= labelBox.x) && labelBox.>= && (labelBox.labelBox.width) < this.el.width()) {
          if (
this.options.xLabelAngle !== 0) {
            
margin 1.25 this.options.gridTextSize Math.sin(this.options.xLabelAngle Math.PI 180.0);
            
prevAngleMargin labelBox.margin;
          }
          
_results.push(prevLabelMargin labelBox.this.options.xLabelMargin);
        } else {
          
_results.push(label.remove());
        }
      }
      return 
_results;
    };

    
Bar.prototype.drawSeries = function() {
      var 
barWidthbottomgroupWidthidxlastTopleftleftPaddingnumBarsrowsidxsizetopyposzeroPos;
      
groupWidth this.width this.options.data.length;
      
numBars this.options.stacked != null this.options.ykeys.length;
      
barWidth = (groupWidth this.options.barSizeRatio this.options.barGap * (numBars 1)) / numBars;
      
leftPadding groupWidth * (this.options.barSizeRatio) / 2;
      
zeroPos this.ymin <= && this.ymax >= this.transY(0) : null;
      return 
this.bars = (function() {
        var 
_i_len_ref_results;
        
_ref this.data;
        
_results = [];
        for (
idx _i 0_len _ref.length_i _lenidx = ++_i) {
          
row _ref[idx];
          
lastTop 0;
          
_results.push((function() {
            var 
_j_len1_ref1_results1;
            
_ref1 row._y;
            
_results1 = [];
            for (
sidx _j 0_len1 _ref1.length_j _len1sidx = ++_j) {
              
ypos _ref1[sidx];
              if (
ypos !== null) {
                if (
zeroPos) {
                  
top Math.min(yposzeroPos);
                  
bottom Math.max(yposzeroPos);
                } else {
                  
top ypos;
                  
bottom this.bottom;
                }
                
left this.left idx groupWidth leftPadding;
                if (!
this.options.stacked) {
                  
left += sidx * (barWidth this.options.barGap);
                }
                
size bottom top;
                if (
this.options.stacked) {
                  
top -= lastTop;
                }
                
this.drawBar(lefttopbarWidthsizethis.colorFor(rowsidx'bar'));
                
_results1.push(lastTop += size);
              } else {
                
_results1.push(null);
              }
            }
            return 
_results1;
          }).
call(this));
        }
        return 
_results;
      }).
call(this);
    };

    
Bar.prototype.colorFor = function(rowsidxtype) {
      var 
rs;
      if (
typeof this.options.barColors === 'function') {
        
= {
          
xrow.x,
          
yrow.y[sidx],
          
labelrow.label
        
};
        
= {
          
indexsidx,
          
keythis.options.ykeys[sidx],
          
labelthis.options.labels[sidx]
        };
        return 
this.options.barColors.call(thisrstype);
      } else {
        return 
this.options.barColors[sidx this.options.barColors.length];
      }
    };

    
Bar.prototype.hitTest = function(xy) {
      if (
this.data.length === 0) {
        return 
null;
      }
      
Math.max(Math.min(xthis.right), this.left);
      return 
Math.min(this.data.length 1Math.floor((this.left) / (this.width this.data.length)));
    };

    
Bar.prototype.onGridClick = function(xy) {
      var 
index;
      
index this.hitTest(xy);
      return 
this.fire('click'indexthis.options.data[index], xy);
    };

    
Bar.prototype.onHoverMove = function(xy) {
      var 
index_ref;
      
index this.hitTest(xy);
      return (
_ref this.hover).update.apply(_refthis.hoverContentForRow(index));
    };

    
Bar.prototype.onHoverOut = function() {
      if (
this.options.hideHover !== false) {
        return 
this.hover.hide();
      }
    };

    
Bar.prototype.hoverContentForRow = function(index) {
      var 
contentjrowxy_i_len_ref;
      
row this.data[index];
      
content "<div class='morris-hover-row-label'>" row.label "</div>";
      
_ref row.y;
      for (
_i 0_len _ref.length_i _len= ++_i) {
        
_ref[j];
        
content += "<div class='morris-hover-point' style='color: " + (this.colorFor(rowj'label')) + "'>n  " this.options.labels[j] + ":n  " + (this.yLabelFormat(y)) + "n</div>";
      }
      if (
typeof this.options.hoverCallback === 'function') {
        
content this.options.hoverCallback(indexthis.optionscontent);
      }
      
this.left + (index 0.5) * this.width this.data.length;
      return [
contentx];
    };

    
Bar.prototype.drawXAxisLabel = function(xPosyPostext) {
      var 
label;
      return 
label this.raphael.text(xPosyPostext).attr('font-size'this.options.gridTextSize).attr('font-family'this.options.gridTextFamily).attr('font-weight'this.options.gridTextWeight).attr('fill'this.options.gridTextColor);
    };

    
Bar.prototype.drawBar = function(xPosyPoswidthheightbarColor) {
      return 
this.raphael.rect(xPosyPoswidthheight).attr('fill'barColor).attr('stroke-width'0);
    };

    return 
Bar;

  })(
Morris.Grid);

  
Morris.Donut = (function(_super) {

    
__extends(Donut_super);

    
Donut.prototype.defaults = {
      
colors: ['#0B62A4''#3980B5''#679DC6''#95BBD7''#B0CCE1''#095791''#095085''#083E67''#052C48''#042135'],
      
backgroundColor'#FFFFFF',
      
labelColor'#000000',
      
formatterMorris.commas
    
};

    function 
Donut(options) {
      
this.select __bind(this.selectthis);

      
this.click __bind(this.clickthis);

      var 
row;
      if (!(
this instanceof Morris.Donut)) {
        return new 
Morris.Donut(options);
      }
      if (
typeof options.element === 'string') {
        
this.el = $(document.getElementById(options.element));
      } else {
        
this.el = $(options.element);
      }
      
this.options = $.extend({}, this.defaultsoptions);
      if (
this.el === null || this.el.length === 0) {
        throw new 
Error("Graph placeholder not found.");
      }
      if (
options.data === void 0 || options.data.length === 0) {
        return;
      }
      
this.data options.data;
      
this.values = (function() {
        var 
_i_len_ref_results;
        
_ref this.data;
        
_results = [];
        for (
_i 0_len _ref.length_i _len_i++) {
          
row _ref[_i];
          
_results.push(parseFloat(row.value));
        }
        return 
_results;
      }).
call(this);
      
this.redraw();
    }

    
Donut.prototype.redraw = function() {
      var 
Ccxcyiidxlastmax_valueminnextsegtotalvaluew_i_j_k_len_len1_len2_ref_ref1_ref2_results;
      
this.el.empty();
      
this.raphael = new Raphael(this.el[0]);
      
cx this.el.width() / 2;
      
cy this.el.height() / 2;
      
= (Math.min(cxcy) - 10) / 3;
      
total 0;
      
_ref this.values;
      for (
_i 0_len _ref.length_i _len_i++) {
        
value _ref[_i];
        
total += value;
      }
      
min / (w);
      
1.9999 Math.PI min this.data.length;
      
last 0;
      
idx 0;
      
this.segments = [];
      
_ref1 this.values;
      for (
_j 0_len1 _ref1.length_j _len1= ++_j) {
        
value _ref1[i];
        
next last min * (value total);
        
seg = new Morris.DonutSegment(cxcy2wlastnextthis.options.colors[idx this.options.colors.length], this.options.backgroundColoridxthis.raphael);
        
seg.render();
        
this.segments.push(seg);
        
seg.on('hover'this.select);
        
seg.on('click'this.click);
        
last next;
        
idx += 1;
      }
      
this.text1 this.drawEmptyDonutLabel(cxcy 10this.options.labelColor15800);
      
this.text2 this.drawEmptyDonutLabel(cxcy 10this.options.labelColor14);
      
max_value Math.max.apply(null, (function() {
        var 
_k_len2_ref2_results;
        
_ref2 this.values;
        
_results = [];
        for (
_k 0_len2 _ref2.length_k _len2_k++) {
          
value _ref2[_k];
          
_results.push(value);
        }
        return 
_results;
      }).
call(this));
      
idx 0;
      
_ref2 this.values;
      
_results = [];
      for (
_k 0_len2 _ref2.length_k _len2_k++) {
        
value _ref2[_k];
        if (
value === max_value) {
          
this.select(idx);
          break;
        }
        
_results.push(idx += 1);
      }
      return 
_results;
    };

    
Donut.prototype.click = function(idx) {
      return 
this.fire('click'idxthis.data[idx]);
    };

    
Donut.prototype.select = function(idx) {
      var 
rowssegment_i_len_ref;
      
_ref this.segments;
      for (
_i 0_len _ref.length_i _len_i++) {
        
_ref[_i];
        
s.deselect();
      }
      
segment this.segments[idx];
      
segment.select();
      
row this.data[idx];
      return 
this.setLabels(row.labelthis.options.formatter(row.valuerow));
    };

    
Donut.prototype.setLabels = function(label1label2) {
      var 
innermaxHeightBottommaxHeightTopmaxWidthtext1bboxtext1scaletext2bboxtext2scale;
      
inner = (Math.min(this.el.width() / 2this.el.height() / 2) - 10) * 3;
      
maxWidth 1.8 inner;
      
maxHeightTop inner 2;
      
maxHeightBottom inner 3;
      
this.text1.attr({
        
textlabel1,
        
transform''
      
});
      
text1bbox this.text1.getBBox();
      
text1scale Math.min(maxWidth text1bbox.widthmaxHeightTop text1bbox.height);
      
this.text1.attr({
        
transform"S" text1scale "," text1scale "," + (text1bbox.text1bbox.width 2) + "," + (text1bbox.text1bbox.height)
      });
      
this.text2.attr({
        
textlabel2,
        
transform''
      
});
      
text2bbox this.text2.getBBox();
      
text2scale Math.min(maxWidth text2bbox.widthmaxHeightBottom text2bbox.height);
      return 
this.text2.attr({
        
transform"S" text2scale "," text2scale "," + (text2bbox.text2bbox.width 2) + "," text2bbox.y
      
});
    };

    
Donut.prototype.drawEmptyDonutLabel = function(xPosyPoscolorfontSizefontWeight) {
      var 
text;
      
text this.raphael.text(xPosyPos'').attr('font-size'fontSize).attr('fill'color);
      if (
fontWeight != null) {
        
text.attr('font-weight'fontWeight);
      }
      return 
text;
    };

    return 
Donut;

  })(
Morris.EventEmitter);

  
Morris.DonutSegment = (function(_super) {

    
__extends(DonutSegment_super);

    function 
DonutSegment(cxcyinnerouterp0p1colorbackgroundColorindexraphael) {
      
this.cx cx;
      
this.cy cy;
      
this.inner inner;
      
this.outer outer;
      
this.color color;
      
this.backgroundColor backgroundColor;
      
this.index index;
      
this.raphael raphael;
      
this.deselect __bind(this.deselectthis);

      
this.select __bind(this.selectthis);

      
this.sin_p0 Math.sin(p0);
      
this.cos_p0 Math.cos(p0);
      
this.sin_p1 Math.sin(p1);
      
this.cos_p1 Math.cos(p1);
      
this.is_long = (p1 p0) > Math.PI 0;
      
this.path this.calcSegment(this.inner 3this.inner this.outer 5);
      
this.selectedPath this.calcSegment(this.inner 3this.inner this.outer);
      
this.hilight this.calcArc(this.inner);
    }

    
DonutSegment.prototype.calcArcPoints = function(r) {
      return [
this.cx this.sin_p0this.cy this.cos_p0this.cx this.sin_p1this.cy this.cos_p1];
    };

    
DonutSegment.prototype.calcSegment = function(r1r2) {
      var 
ix0ix1iy0iy1ox0ox1oy0oy1_ref_ref1;
      
_ref this.calcArcPoints(r1), ix0 _ref[0], iy0 _ref[1], ix1 _ref[2], iy1 _ref[3];
      
_ref1 this.calcArcPoints(r2), ox0 _ref1[0], oy0 _ref1[1], ox1 _ref1[2], oy1 _ref1[3];
      return (
"M" ix0 "," iy0) + ("A" r1 "," r1 ",0," this.is_long ",0," ix1 "," iy1) + ("L" ox1 "," oy1) + ("A" r2 "," r2 ",0," this.is_long ",1," ox0 "," oy0) + "Z";
    };

    
DonutSegment.prototype.calcArc = function(r) {
      var 
ix0ix1iy0iy1_ref;
      
_ref this.calcArcPoints(r), ix0 _ref[0], iy0 _ref[1], ix1 _ref[2], iy1 _ref[3];
      return (
"M" ix0 "," iy0) + ("A" "," ",0," this.is_long ",0," ix1 "," iy1);
    };

    
DonutSegment.prototype.render = function() {
      var 
_this this;
      
this.arc this.drawDonutArc(this.hilightthis.color);
      return 
this.seg this.drawDonutSegment(this.paththis.colorthis.backgroundColor, function() {
        return 
_this.fire('hover'_this.index);
      }, function() {
        return 
_this.fire('click'_this.index);
      });
    };

    
DonutSegment.prototype.drawDonutArc = function(pathcolor) {
      return 
this.raphael.path(path).attr({
        
strokecolor,
        
'stroke-width'2,
        
opacity0
      
});
    };

    
DonutSegment.prototype.drawDonutSegment = function(pathfillColorstrokeColorhoverFunctionclickFunction) {
      return 
this.raphael.path(path).attr({
        
fillfillColor,
        
strokestrokeColor,
        
'stroke-width'3
      
}).hover(hoverFunction).click(clickFunction);
    };

    
DonutSegment.prototype.select = function() {
      if (!
this.selected) {
        
this.seg.animate({
          
paththis.selectedPath
        
}, 150'<>');
        
this.arc.animate({
          
opacity1
        
}, 150'<>');
        return 
this.selected true;
      }
    };

    
DonutSegment.prototype.deselect = function() {
      if (
this.selected) {
        
this.seg.animate({
          
paththis.path
        
}, 150'<>');
        
this.arc.animate({
          
opacity0
        
}, 150'<>');
        return 
this.selected false;
      }
    };

    return 
DonutSegment;

  })(
Morris.EventEmitter);

}).
call(this);
?>
Онлайн: 0
Реклама