/src/js/Rickshaw.Graph.Axis.Time.js
http://github.com/shutterstock/rickshaw · JavaScript · 85 lines · 55 code · 30 blank · 0 comment · 8 complexity · 360afb9354dfa65b83609ed2930b4493 MD5 · raw file
- Rickshaw.namespace('Rickshaw.Graph.Axis.Time');
- Rickshaw.Graph.Axis.Time = function(args) {
- var self = this;
- this.graph = args.graph;
- this.elements = [];
- this.ticksTreatment = args.ticksTreatment || 'plain';
- this.fixedTimeUnit = args.timeUnit;
- var time = args.timeFixture || new Rickshaw.Fixtures.Time();
- this.appropriateTimeUnit = function() {
- var unit;
- var units = time.units;
- var domain = this.graph.x.domain();
- var rangeSeconds = domain[1] - domain[0];
- units.forEach( function(u) {
- if (Math.floor(rangeSeconds / u.seconds) >= 2) {
- unit = unit || u;
- }
- } );
- return (unit || time.units[time.units.length - 1]);
- };
- this.tickOffsets = function() {
- var domain = this.graph.x.domain();
- var unit = this.fixedTimeUnit || this.appropriateTimeUnit();
- var count = Math.ceil((domain[1] - domain[0]) / unit.seconds);
- var runningTick = domain[0];
- var offsets = [];
- for (var i = 0; i < count; i++) {
- var tickValue = time.ceil(runningTick, unit);
- runningTick = tickValue + unit.seconds / 2;
- offsets.push( { value: tickValue, unit: unit } );
- }
- return offsets;
- };
- this.render = function() {
- this.elements.forEach( function(e) {
- e.parentNode.removeChild(e);
- } );
- this.elements = [];
- var offsets = this.tickOffsets();
- offsets.forEach( function(o) {
-
- if (self.graph.x(o.value) > self.graph.x.range()[1]) return;
-
- var element = document.createElement('div');
- element.style.left = self.graph.x(o.value) + 'px';
- element.classList.add('x_tick');
- element.classList.add(self.ticksTreatment);
- var title = document.createElement('div');
- title.classList.add('title');
- title.innerHTML = o.unit.formatter(new Date(o.value * 1000));
- element.appendChild(title);
- self.graph.element.appendChild(element);
- self.elements.push(element);
- } );
- };
- this.graph.onUpdate( function() { self.render() } );
- };