Permalink
Browse files

update built libs

  • Loading branch information...
1 parent 55be4a5 commit 470b6f8f624a52c9229628fe39a5723e2ef24fda @dchester dchester committed Oct 23, 2013
Showing with 194 additions and 50 deletions.
  1. +36 −6 rickshaw.css
  2. +155 −41 rickshaw.js
  3. +1 −1 rickshaw.min.css
  4. +2 −2 rickshaw.min.js
View
@@ -28,6 +28,12 @@
background: white;
white-space: nowrap;
}
+.rickshaw_graph .detail .x_label.left {
+ left: 0;
+}
+.rickshaw_graph .detail .x_label.right {
+ right: 0;
+}
.rickshaw_graph .detail .item {
position: absolute;
z-index: 2;
@@ -40,25 +46,49 @@
color: white;
border: 1px solid rgba(0, 0, 0, 0.4);
margin-left: 1em;
+ margin-right: 1em;
margin-top: -1em;
white-space: nowrap;
}
+.rickshaw_graph .detail .item.left {
+ left: 0;
+}
+.rickshaw_graph .detail .item.right {
+ right: 0;
+}
.rickshaw_graph .detail .item.active {
opacity: 1;
background: rgba(0, 0, 0, 0.8);
}
-.rickshaw_graph .detail .item:before {
- content: "\25c2";
+.rickshaw_graph .detail .item:after {
position: absolute;
- left: -0.5em;
- color: rgba(0, 0, 0, 0.7);
+ display: block;
width: 0;
+ height: 0;
+
+ content: "";
+
+ border: 5px solid transparent;
+}
+.rickshaw_graph .detail .item.left:after {
+ top: 1em;
+ left: -5px;
+ margin-top: -5px;
+ border-right-color: rgba(0, 0, 0, 0.8);
+ border-left-width: 0;
+}
+.rickshaw_graph .detail .item.right:after {
+ top: 1em;
+ right: -5px;
+ margin-top: -5px;
+ border-left-color: rgba(0, 0, 0, 0.8);
+ border-right-width: 0;
}
.rickshaw_graph .detail .dot {
width: 4px;
height: 4px;
- margin-left: -4px;
- margin-top: -3px;
+ margin-left: -2px;
+ margin-top: -2px;
border-radius: 5px;
position: absolute;
box-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
View
@@ -1701,8 +1701,32 @@ Rickshaw.Graph.Axis.Y.Scaled = Rickshaw.Class.create( Rickshaw.Graph.Axis.Y, {
},
_drawAxis: function($super, scale) {
- // make a copy of the custom scale, adjust the range to match the graph's scale
- var adjustedScale = this.scale.copy().range(scale.range());
+ // Adjust scale's domain to compensate for adjustments to the
+ // renderer's domain (e.g. padding).
+ var domain = this.scale.domain();
+ var renderDomain = this.graph.renderer.domain().y;
+
+ var extents = [
+ Math.min.apply(Math, domain),
+ Math.max.apply(Math, domain)];
+
+ // A mapping from the ideal render domain [0, 1] to the extent
+ // of the original scale's domain. This is used to calculate
+ // the extents of the adjusted domain.
+ var extentMap = d3.scale.linear().domain([0, 1]).range(extents);
+
+ var adjExtents = [
+ extentMap(renderDomain[0]),
+ extentMap(renderDomain[1])];
+
+ // A mapping from the original domain to the adjusted domain.
+ var adjustment = d3.scale.linear().domain(extents).range(adjExtents);
+
+ // Make a copy of the custom scale, apply the adjusted domain, and
+ // copy the range to match the graph's scale.
+ var adjustedScale = this.scale.copy()
+ .domain(domain.map(adjustment))
+ .range(scale.range());
return $super(adjustedScale);
},
@@ -1737,14 +1761,14 @@ Rickshaw.Graph.Behavior.Series.Highlight = function(args) {
if (activeLine) return;
else activeLine = l;
- self.legend.lines.forEach( function(line, index) {
+ self.legend.lines.forEach( function(line) {
if (l === line) {
// if we're not in a stacked renderer bring active line to the top
- if (index > 0 && self.graph.renderer.unstack && (line.series.renderer ? line.series.renderer.unstack : true)) {
+ if (self.graph.renderer.unstack && (line.series.renderer ? line.series.renderer.unstack : true)) {
- var seriesIndex = self.graph.series.length - index - 1;
+ var seriesIndex = self.graph.series.indexOf(line.series);
line.originalIndex = seriesIndex;
var series = self.graph.series.splice(seriesIndex, 1)[0];
@@ -2156,17 +2180,65 @@ Rickshaw.Graph.HoverDetail = Rickshaw.Class.create({
this.element.appendChild(dot);
if (point.active) {
- item.className = 'item active';
- dot.className = 'dot active';
+ item.classList.add('active');
+ dot.classList.add('active');
}
+ // Assume left alignment until the element has been displayed and
+ // bounding box calculations are possible.
+ var alignables = [xLabel, item];
+ alignables.forEach(function(el) {
+ el.classList.add('left');
+ });
+
this.show();
+ // If left-alignment results in any error, try right-alignment.
+ var leftAlignError = this._calcLayoutError(alignables);
+ if (leftAlignError > 0) {
+ alignables.forEach(function(el) {
+ el.classList.remove('left');
+ el.classList.add('right');
+ });
+
+ // If right-alignment is worse than left alignment, switch back.
+ var rightAlignError = this._calcLayoutError(alignables);
+ if (rightAlignError > leftAlignError) {
+ alignables.forEach(function(el) {
+ el.classList.remove('right');
+ el.classList.add('left');
+ });
+ }
+ }
+
if (typeof this.onRender == 'function') {
this.onRender(args);
}
},
+ _calcLayoutError: function(alignables) {
+ // Layout error is calculated as the number of linear pixels by which
+ // an alignable extends past the left or right edge of the parent.
+ var parentRect = this.element.parentNode.getBoundingClientRect();
+
+ var error = 0;
+ var alignRight = alignables.forEach(function(el) {
+ var rect = el.getBoundingClientRect();
+ if (!rect.width) {
+ return;
+ }
+
+ if (rect.right > parentRect.right) {
+ error += rect.right - parentRect.right;
+ }
+
+ if (rect.left < parentRect.left) {
+ error += parentRect.left - rect.left;
+ }
+ });
+ return error;
+ },
+
_addListeners: function() {
this.graph.element.addEventListener(
@@ -2191,7 +2263,6 @@ Rickshaw.Graph.HoverDetail = Rickshaw.Class.create({
);
}
});
-
Rickshaw.namespace('Rickshaw.Graph.JSONP');
Rickshaw.Graph.JSONP = Rickshaw.Class.create( Rickshaw.Graph.Ajax, {
@@ -2208,28 +2279,51 @@ Rickshaw.Graph.JSONP = Rickshaw.Class.create( Rickshaw.Graph.Ajax, {
} );
Rickshaw.namespace('Rickshaw.Graph.Legend');
-Rickshaw.Graph.Legend = function(args) {
+Rickshaw.Graph.Legend = Rickshaw.Class.create( {
- var element = this.element = args.element;
- var graph = this.graph = args.graph;
+ className: 'rickshaw_legend',
- var self = this;
+ initialize: function(args) {
+ this.element = args.element;
+ this.graph = args.graph;
+ this.naturalOrder = args.naturalOrder;
- element.classList.add('rickshaw_legend');
+ this.element.classList.add(this.className);
- var list = this.list = document.createElement('ul');
- element.appendChild(list);
+ this.list = document.createElement('ul');
+ this.element.appendChild(this.list);
- var series = graph.series
- .map( function(s) { return s } );
+ this.render();
+
+ // we could bind this.render.bind(this) here
+ // but triggering the re-render would lose the added
+ // behavior of the series toggle
+ this.graph.onUpdate( function() {} );
+ },
+
+ render: function() {
+ var self = this;
+
+ while ( this.list.firstChild ) {
+ this.list.removeChild( this.list.firstChild );
+ }
+ this.lines = [];
+
+ var series = this.graph.series
+ .map( function(s) { return s } );
+
+ if (!this.naturalOrder) {
+ series = series.reverse();
+ }
+
+ series.forEach( function(s) {
+ self.addLine(s);
+ } );
- if (!args.naturalOrder) {
- series = series.reverse();
- }
- this.lines = [];
+ },
- this.addLine = function (series) {
+ addLine: function (series) {
var line = document.createElement('li');
line.className = 'line';
if (series.disabled) {
@@ -2247,7 +2341,7 @@ Rickshaw.Graph.Legend = function(args) {
label.innerHTML = series.name;
line.appendChild(label);
- list.appendChild(line);
+ this.list.appendChild(line);
line.series = series;
@@ -2256,22 +2350,18 @@ Rickshaw.Graph.Legend = function(args) {
}
var _line = { element: line, series: series };
- if (self.shelving) {
- self.shelving.addAnchor(_line);
- self.shelving.updateBehaviour();
+ if (this.shelving) {
+ this.shelving.addAnchor(_line);
+ this.shelving.updateBehaviour();
}
- if (self.highlighter) {
- self.highlighter.addHighlightEvents(_line);
+ if (this.highlighter) {
+ this.highlighter.addHighlightEvents(_line);
}
- self.lines.push(_line);
- };
-
- series.forEach( function(s) {
- self.addLine(s);
- } );
+ this.lines.push(_line);
+ return line;
+ }
+} );
- graph.onUpdate( function() {} );
-};
Rickshaw.namespace('Rickshaw.Graph.RangeSlider');
Rickshaw.Graph.RangeSlider = Rickshaw.Class.create({
@@ -2407,6 +2497,8 @@ Rickshaw.Graph.Renderer = Rickshaw.Class.create( {
if (y > yMax) yMax = y;
} );
+ if (!series.length) return;
+
if (series[0].x < xMin) xMin = series[0].x;
if (series[series.length - 1].x > xMax) xMax = series[series.length - 1].x;
} );
@@ -2724,17 +2816,25 @@ Rickshaw.Graph.Renderer.Area = Rickshaw.Class.create( Rickshaw.Graph.Renderer, {
return factory;
},
- render: function() {
+ render: function(args) {
+
+ args = args || {};
var graph = this.graph;
+ var series = args.series || graph.series;
- graph.vis.selectAll('*').remove();
+ var vis = args.vis || graph.vis;
+ vis.selectAll('*').remove();
// insert or stacked areas so strokes lay on top of areas
var method = this.unstack ? 'append' : 'insert';
- var nodes = graph.vis.selectAll("path")
- .data(this.graph.stackedData)
+ var data = series
+ .filter(function(s) { return !s.disabled })
+ .map(function(s) { return s.stack });
+
+ var nodes = vis.selectAll("path")
+ .data(data)
.enter()[method]("svg:g", 'g');
nodes.append("svg:path")
@@ -2748,7 +2848,7 @@ Rickshaw.Graph.Renderer.Area = Rickshaw.Class.create( Rickshaw.Graph.Renderer, {
}
var i = 0;
- graph.series.forEach( function(series) {
+ series.forEach( function(series) {
if (series.disabled) return;
series.path = nodes[0][i++];
this._styleSeries(series);
@@ -2847,6 +2947,13 @@ Rickshaw.Graph.Renderer.Multi = Rickshaw.Class.create( Rickshaw.Graph.Renderer,
} );
},
+ configure: function($super, args) {
+
+ args = args || {};
+ this.config = args;
+ $super(args);
+ },
+
domain: function($super) {
this.graph.stackData();
@@ -2895,6 +3002,13 @@ Rickshaw.Graph.Renderer.Multi = Rickshaw.Class.create( Rickshaw.Graph.Renderer,
var renderer = graph._renderers[series.renderer];
+ var config = {};
+
+ var defaults = [ this.defaults(), renderer.defaults(), this.config, this.graph ];
+ defaults.forEach(function(d) { Rickshaw.extend(config, d) });
+
+ renderer.configure(config);
+
renderGroups[series.renderer] = {
renderer: renderer,
series: [],
Oops, something went wrong.

0 comments on commit 470b6f8

Please sign in to comment.