batsd-dash 0.3.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. data/.rbenv-version +1 -0
  2. data/Gemfile +3 -0
  3. data/README.md +36 -79
  4. data/batsd-dash.gemspec +5 -9
  5. data/lib/batsd-dash.rb +9 -80
  6. data/lib/batsd-dash/app.rb +113 -0
  7. data/lib/batsd-dash/connection.rb +54 -0
  8. data/lib/batsd-dash/graph.rb +10 -2
  9. data/lib/batsd-dash/params.rb +10 -2
  10. data/lib/{public → batsd-dash/public}/css/d3.css +199 -100
  11. data/lib/{public → batsd-dash/public}/css/datetimepicker.css +0 -0
  12. data/lib/{public → batsd-dash/public}/css/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  13. data/lib/{public → batsd-dash/public}/css/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  14. data/lib/{public → batsd-dash/public}/css/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  15. data/lib/{public → batsd-dash/public}/css/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  16. data/lib/{public → batsd-dash/public}/css/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  17. data/lib/{public → batsd-dash/public}/css/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  18. data/lib/{public → batsd-dash/public}/css/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  19. data/lib/{public → batsd-dash/public}/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  20. data/lib/{public → batsd-dash/public}/css/images/ui-icons_222222_256x240.png +0 -0
  21. data/lib/{public → batsd-dash/public}/css/images/ui-icons_2e83ff_256x240.png +0 -0
  22. data/lib/{public → batsd-dash/public}/css/images/ui-icons_454545_256x240.png +0 -0
  23. data/lib/{public → batsd-dash/public}/css/images/ui-icons_888888_256x240.png +0 -0
  24. data/lib/{public → batsd-dash/public}/css/images/ui-icons_cd0a0a_256x240.png +0 -0
  25. data/lib/{public → batsd-dash/public}/css/jquery-ui.css +0 -0
  26. data/lib/batsd-dash/public/css/public.css +419 -0
  27. data/lib/batsd-dash/public/js/d3.js +4 -0
  28. data/lib/batsd-dash/public/js/dash.js +82 -0
  29. data/lib/{public → batsd-dash/public}/js/datetimepicker.js +0 -0
  30. data/lib/{public → batsd-dash/public}/js/datetimepicker.js~ +0 -0
  31. data/lib/{public → batsd-dash/public}/js/jquery-ui.js +0 -0
  32. data/lib/{public → batsd-dash/public}/js/jquery.js +0 -0
  33. data/lib/batsd-dash/public/js/nv.d3.js +5 -0
  34. data/lib/batsd-dash/version.rb +4 -2
  35. data/lib/{views → batsd-dash/views}/layout.haml +24 -6
  36. data/lib/batsd-dash/views/loading.haml +5 -0
  37. data/lib/batsd-dash/views/missing.haml +14 -0
  38. data/lib/batsd-dash/views/root.haml +37 -0
  39. data/lib/batsd-dash/views/view.haml +60 -0
  40. data/lib/sass/_charts.scss +37 -0
  41. data/lib/{batsd-dash/sass → sass}/public.scss +102 -27
  42. data/test/helper.rb +5 -16
  43. data/test/test_dash.rb +65 -69
  44. metadata +121 -101
  45. data/lib/batsd-dash/connection_pool.rb +0 -87
  46. data/lib/public/css/public.css +0 -106
  47. data/lib/public/js/d3.js +0 -4
  48. data/lib/public/js/dash.js +0 -110
  49. data/lib/public/js/flot.js +0 -6
  50. data/lib/public/js/nv.d3.js +0 -4
  51. data/lib/views/missing.haml +0 -6
  52. data/lib/views/root.haml +0 -0
  53. data/lib/views/view.haml +0 -18
  54. data/test/test_connection_pool.rb +0 -20
@@ -1,6 +1,10 @@
1
1
  # helpers for processing params and validating input
2
- module BatsdDash
2
+ module Batsd::Dash
3
3
  module ParamsHelper
4
+ ##
5
+ # Parse params and return stats hash
6
+ #
7
+ # @return [Hash] stats hash
4
8
  def parse_statistics
5
9
  Hash.new { |hash,key| hash[key] = [] }.tap do |stats|
6
10
  %w[ counters gauges timers ].each do |datatype|
@@ -9,11 +13,15 @@ module BatsdDash
9
13
  list = [list] unless Array === list
10
14
  list.reject! { |m| m.nil? || m.empty? }
11
15
 
12
- stats[datatype] = list unless list.empty?
16
+ stats[datatype] = list unless list.empty?
13
17
  end
14
18
  end
15
19
  end
16
20
 
21
+ ##
22
+ # Parse time range from params
23
+ #
24
+ # @return [Array] an array with 2 elements (start and stop)
17
25
  def parse_time_range
18
26
  start, stop = params[:start], params[:stop]
19
27
 
@@ -1,6 +1,6 @@
1
1
 
2
2
  /********************
3
- * HTML CSS
3
+ * HTML CSS
4
4
  */
5
5
 
6
6
 
@@ -10,14 +10,9 @@
10
10
  overflow: hidden;
11
11
  }
12
12
 
13
- .nvd3.background {
14
- fill: none;
15
- pointer-events: none;
16
- }
17
-
18
13
 
19
14
  /********************
20
- * TOOLTIP CSS
15
+ * TOOLTIP CSS
21
16
  */
22
17
 
23
18
  .nvtooltip {
@@ -72,9 +67,14 @@
72
67
  margin: 2px 0;
73
68
  }
74
69
 
70
+ .nvtooltip-pending-removal {
71
+ position: absolute;
72
+ pointer-events: none;
73
+ }
74
+
75
75
 
76
76
  /********************
77
- * SVG CSS
77
+ * SVG CSS
78
78
  */
79
79
 
80
80
 
@@ -88,24 +88,36 @@ svg {
88
88
  /* Trying to get SVG to act like a greedy block in all browsers */
89
89
  display: block;
90
90
  width:100%;
91
+ height:100%;
91
92
  }
92
93
 
93
94
 
94
95
  svg text {
95
- font: 12px sans-serif;
96
- fill:#FFF;
96
+ font: normal 12px sans-serif;
97
97
  }
98
98
 
99
99
  svg .title {
100
100
  font: bold 14px Arial;
101
101
  }
102
102
 
103
+ .nvd3 .nv-background {
104
+ fill: none;
105
+ /*
106
+ pointer-events: none;
107
+ */
108
+ }
109
+
110
+ .nvd3.nv-noData {
111
+ font-size: 18px;
112
+ font-weight: bolf;
113
+ }
114
+
115
+
103
116
  /**********
104
117
  * Brush
105
118
  */
106
119
 
107
- .brush .extent {
108
- stroke: #666;
120
+ .nv-brush .extent {
109
121
  fill-opacity: .125;
110
122
  shape-rendering: crispEdges;
111
123
  }
@@ -116,11 +128,11 @@ svg .title {
116
128
  * Legend
117
129
  */
118
130
 
119
- .nvd3 .legend .series {
131
+ .nvd3 .nv-legend .nv-series {
120
132
  cursor: pointer;
121
133
  }
122
134
 
123
- .nvd3 .legend .disabled circle {
135
+ .nvd3 .nv-legend .disabled circle {
124
136
  fill-opacity: 0;
125
137
  }
126
138
 
@@ -130,29 +142,29 @@ svg .title {
130
142
  * Axes
131
143
  */
132
144
 
133
- .nvd3 .axis path {
145
+ .nvd3 .nv-axis path {
134
146
  fill: none;
135
- stroke: #FFF;
147
+ stroke: #000;
136
148
  stroke-opacity: .75;
137
149
  shape-rendering: crispEdges;
138
150
  }
139
151
 
140
- .nvd3 .axis path.domain {
152
+ .nvd3 .nv-axis path.domain {
141
153
  stroke-opacity: .75;
142
154
  }
143
155
 
144
- .nvd3 .axis line {
156
+ .nvd3 .nv-axis line {
145
157
  fill: none;
146
- stroke: #FFF;
158
+ stroke: #000;
147
159
  stroke-opacity: .25;
148
160
  shape-rendering: crispEdges;
149
161
  }
150
162
 
151
- .nvd3 .axis line.zero {
163
+ .nvd3 .nv-axis line.zero {
152
164
  stroke-opacity: .75;
153
165
  }
154
166
 
155
- .nvd3 .axis .axisMaxMin text {
167
+ .nvd3 .nv-axis .nv-axisMaxMin text {
156
168
  font-weight: bold;
157
169
  }
158
170
 
@@ -161,7 +173,7 @@ svg .title {
161
173
  * Brush
162
174
  */
163
175
 
164
- .brush .resize path {
176
+ .nv-brush .resize path {
165
177
  fill: #eee;
166
178
  stroke: #666;
167
179
  }
@@ -172,12 +184,12 @@ svg .title {
172
184
  * Bars
173
185
  */
174
186
 
175
- .nvd3 .bars .negative rect {
187
+ .nvd3 .nv-bars .negative rect {
176
188
  zfill: brown;
177
189
  cursor: pointer;
178
190
  }
179
191
 
180
- .nvd3 .bars rect {
192
+ .nvd3 .nv-bars rect {
181
193
  zfill: steelblue;
182
194
  cursor: pointer;
183
195
  fill-opacity: .75;
@@ -187,25 +199,23 @@ svg .title {
187
199
  -webkit-transition: fill-opacity 250ms linear;
188
200
  }
189
201
 
190
- .nvd3 .bars rect:hover {
202
+ .nvd3 .nv-bars rect:hover {
191
203
  fill-opacity: 1;
192
204
  }
193
205
 
194
- .nvd3 .bars .hover rect {
206
+ .nvd3 .nv-bars .hover rect {
195
207
  fill: lightblue;
196
208
  }
197
209
 
198
- .nvd3 .bars text {
199
- /*fill: rgba(0,0,0,0);*/
200
- fill: rgba(255,255,255,0);
210
+ .nvd3 .nv-bars text {
211
+ fill: rgba(0,0,0,0);
201
212
  }
202
213
 
203
- .nvd3 .bars .hover text {
204
- /*fill: rgba(0,0,0,1);*/
205
- fill: rgba(255,255,255,1);
214
+ .nvd3 .nv-bars .hover text {
215
+ fill: rgba(0,0,0,1);
206
216
  }
207
217
 
208
- .nvd3 .x.axis text {
218
+ .nvd3 .nv-x.nv-axis text {
209
219
  transform: rotate(90);
210
220
  }
211
221
 
@@ -214,9 +224,9 @@ svg .title {
214
224
  * Bars
215
225
  */
216
226
 
217
- .nvd3 .multibar .groups rect,
218
- .nvd3 .multibarHorizontal .groups rect,
219
- .nvd3 .discretebar .groups rect {
227
+ .nvd3 .nv-multibar .nv-groups rect,
228
+ .nvd3 .nv-multibarHorizontal .nv-groups rect,
229
+ .nvd3 .nv-discretebar .nv-groups rect {
220
230
  stroke-opacity: 0;
221
231
 
222
232
  transition: fill-opacity 250ms linear;
@@ -224,14 +234,14 @@ svg .title {
224
234
  -webkit-transition: fill-opacity 250ms linear;
225
235
  }
226
236
 
227
- .nvd3 .multibar .groups rect:hover,
228
- .nvd3 .multibarHorizontal .groups rect:hover,
229
- .nvd3 .discretebar .groups rect:hover {
237
+ .nvd3 .nv-multibar .nv-groups rect:hover,
238
+ .nvd3 .nv-multibarHorizontal .nv-groups rect:hover,
239
+ .nvd3 .nv-discretebar .nv-groups rect:hover {
230
240
  fill-opacity: 1;
231
241
  }
232
242
 
233
- .nvd3 .discretebar .groups text,
234
- .nvd3 .multibarHorizontal .groups text {
243
+ .nvd3 .nv-discretebar .nv-groups text,
244
+ .nvd3 .nv-multibarHorizontal .nv-groups text {
235
245
  font-weight: bold;
236
246
  fill: rgba(0,0,0,1);
237
247
  stroke: rgba(0,0,0,0);
@@ -241,7 +251,7 @@ svg .title {
241
251
  * Pie Chart
242
252
  */
243
253
 
244
- .nvd3 .pie path {
254
+ .nvd3.nv-pie path {
245
255
  stroke-opacity: 0;
246
256
 
247
257
  transition: fill-opacity 250ms linear, stroke-width 250ms linear, stroke-opacity 250ms linear;
@@ -250,18 +260,18 @@ svg .title {
250
260
 
251
261
  }
252
262
 
253
- .nvd3 .pie .slice text {
263
+ .nvd3.nv-pie .nv-slice text {
254
264
  stroke: #000;
255
265
  stroke-width: 0;
256
266
  }
257
267
 
258
- .nvd3 .pie path {
268
+ .nvd3.nv-pie path {
259
269
  stroke: #fff;
260
270
  stroke-width: 1px;
261
271
  stroke-opacity: 1;
262
272
  }
263
273
 
264
- .nvd3 .pie .hover path {
274
+ .nvd3.nv-pie .hover path {
265
275
  fill-opacity: .7;
266
276
  /*
267
277
  stroke-width: 6px;
@@ -269,11 +279,16 @@ svg .title {
269
279
  */
270
280
  }
271
281
 
282
+ .nvd3.nv-pie .nv-label rect {
283
+ fill-opacity: 0;
284
+ stroke-opacity: 0;
285
+ }
286
+
272
287
  /**********
273
- * Lines
288
+ * Lines
274
289
  */
275
290
 
276
- .nvd3 .groups path.line {
291
+ .nvd3 .nv-groups path.nv-line {
277
292
  fill: none;
278
293
  stroke-width: 2.5px;
279
294
  stroke-linecap: round;
@@ -290,7 +305,24 @@ svg .title {
290
305
  */
291
306
  }
292
307
 
293
- .nvd3 .line.hover path {
308
+ .nvd3 .nv-groups path.nv-area {
309
+ stroke: none;
310
+ stroke-linecap: round;
311
+ shape-rendering: geometricPrecision;
312
+
313
+ /*
314
+ stroke-width: 2.5px;
315
+ transition: stroke-width 250ms linear;
316
+ -moz-transition: stroke-width 250ms linear;
317
+ -webkit-transition: stroke-width 250ms linear;
318
+
319
+ transition-delay: 250ms
320
+ -moz-transition-delay: 250ms;
321
+ -webkit-transition-delay: 250ms;
322
+ */
323
+ }
324
+
325
+ .nvd3 .nv-line.hover path {
294
326
  stroke-width: 6px;
295
327
  }
296
328
 
@@ -301,27 +333,32 @@ svg .title {
301
333
  }
302
334
  */
303
335
 
304
- .nvd3.line .nvd3.scatter .groups .point {
336
+ .nvd3.nv-line .nvd3.nv-scatter .nv-groups .nv-point {
305
337
  fill-opacity: 0;
306
338
  stroke-opacity: 0;
307
339
  }
308
340
 
341
+ .nvd3.nv-scatter.nv-single-point .nv-groups .nv-point {
342
+ fill-opacity: .5;
343
+ stroke-opacity: .5;
344
+ }
345
+
309
346
 
310
- .nvd3 .groups .point {
347
+ .nvd3 .nv-groups .nv-point {
311
348
  transition: stroke-width 250ms linear, stroke-opacity 250ms linear;
312
349
  -moz-transition: stroke-width 250ms linear, stroke-opacity 250ms linear;
313
350
  -webkit-transition: stroke-width 250ms linear, stroke-opacity 250ms linear;
314
351
  }
315
352
 
316
- .nvd3.scatter .groups .point.hover,
317
- .nvd3 .groups .point.hover {
353
+ .nvd3.nv-scatter .nv-groups .nv-point.hover,
354
+ .nvd3 .nv-groups .nv-point.hover {
318
355
  stroke-width: 20px;
319
356
  fill-opacity: .5 !important;
320
357
  stroke-opacity: .5 !important;
321
358
  }
322
359
 
323
360
 
324
- .nvd3 .point-paths path {
361
+ .nvd3 .nv-point-paths path {
325
362
  stroke: #aaa;
326
363
  stroke-opacity: 0;
327
364
  fill: #eee;
@@ -330,36 +367,40 @@ svg .title {
330
367
 
331
368
 
332
369
 
333
- .nvd3 .indexLine {
370
+ .nvd3 .nv-indexLine {
334
371
  cursor: ew-resize;
335
372
  }
336
373
 
337
374
 
338
375
  /**********
339
- * Distribution
376
+ * Distribution
340
377
  */
341
378
 
342
- .nvd3 .distribution {
379
+ .nvd3 .nv-distribution {
343
380
  pointer-events: none;
344
381
  }
345
382
 
346
383
 
347
384
 
348
385
  /**********
349
- * Scatter
386
+ * Scatter
350
387
  */
351
388
 
352
- .nvd3 .groups .point.hover {
389
+ .nvd3 .nv-groups .nv-point {
390
+ pointer-events: none;
391
+ }
392
+
393
+ .nvd3 .nv-groups .nv-point.hover {
353
394
  stroke-width: 20px;
354
395
  stroke-opacity: .5;
355
396
  }
356
397
 
357
- .nvd3 .scatter .point.hover {
398
+ .nvd3 .nv-scatter .nv-point.hover {
358
399
  fill-opacity: 1;
359
400
  }
360
401
 
361
402
  /*
362
- .group.hover .point {
403
+ .nv-group.hover .nv-point {
363
404
  fill-opacity: 1;
364
405
  }
365
406
  */
@@ -369,7 +410,7 @@ svg .title {
369
410
  * Stacked Area
370
411
  */
371
412
 
372
- .nvd3 .stackedarea path.area {
413
+ .nvd3.nv-stackedarea path.nv-area {
373
414
  fill-opacity: .7;
374
415
  /*
375
416
  stroke-opacity: .65;
@@ -389,7 +430,7 @@ svg .title {
389
430
 
390
431
  }
391
432
 
392
- .nvd3 .stackedarea path.area.hover {
433
+ .nvd3.nv-stackedarea path.nv-area.hover {
393
434
  fill-opacity: .9;
394
435
  /*
395
436
  stroke-opacity: .85;
@@ -403,12 +444,12 @@ svg .title {
403
444
 
404
445
 
405
446
 
406
- .nvd3.stackedarea .groups .point {
447
+ .nvd3.nv-stackedarea .nv-groups .nv-point {
407
448
  stroke-opacity: 0;
408
449
  fill-opacity: 0;
409
450
  }
410
451
 
411
- .nvd3.stackedarea .groups .point.hover {
452
+ .nvd3.nv-stackedarea .nv-groups .nv-point.hover {
412
453
  stroke-width: 20px;
413
454
  stroke-opacity: .75;
414
455
  fill-opacity: 1;
@@ -420,11 +461,11 @@ svg .title {
420
461
  * Line Plus Bar
421
462
  */
422
463
 
423
- .nvd3 .linePlusBar .bar rect {
464
+ .nvd3.nv-linePlusBar .nv-bar rect {
424
465
  fill-opacity: .75;
425
466
  }
426
467
 
427
- .nvd3 .linePlusBar .bar rect:hover {
468
+ .nvd3.nv-linePlusBar .nv-bar rect:hover {
428
469
  fill-opacity: 1;
429
470
  }
430
471
 
@@ -433,90 +474,148 @@ svg .title {
433
474
  * Bullet
434
475
  */
435
476
 
436
- .nvd3.bullet { font: 10px sans-serif; cursor: pointer; }
437
- .nvd3.bullet rect { fill-opacity: .6; }
438
- .nvd3.bullet rect:hover { fill-opacity: 1; }
439
- .nvd3.bullet .marker { stroke: #000; stroke-width: 2px; }
440
- .nvd3.bullet .markerTriangle { stroke: #000; fill: #fff; stroke-width: 1.5px; }
441
- .nvd3.bullet .tick line { stroke: #666; stroke-width: .5px; }
442
- .nvd3.bullet .range.s0 { fill: #eee; }
443
- .nvd3.bullet .range.s1 { fill: #ddd; }
444
- .nvd3.bullet .range.s2 { fill: #ccc; }
445
- .nvd3.bullet .measure.s0 { fill: steelblue; }
446
- .nvd3.bullet .measure.s1 { fill: darkblue; }
447
- .nvd3.bullet .title { font-size: 14px; font-weight: bold; }
448
- .nvd3.bullet .subtitle { fill: #999; }
477
+ .nvd3.nv-bullet { font: 10px sans-serif; cursor: pointer; }
478
+ .nvd3.nv-bullet rect { fill-opacity: .6; }
479
+ .nvd3.nv-bullet rect:hover { fill-opacity: 1; }
480
+ .nvd3.nv-bullet .nv-marker { stroke: #000; stroke-width: 2px; }
481
+ .nvd3.nv-bullet .nv-markerTriangle { stroke: #000; fill: #fff; stroke-width: 1.5px; }
482
+ .nvd3.nv-bullet .nv-tick line { stroke: #666; stroke-width: .5px; }
483
+ .nvd3.nv-bullet .nv-range.nv-s0 { fill: #eee; }
484
+ .nvd3.nv-bullet .nv-range.nv-s1 { fill: #ddd; }
485
+ .nvd3.nv-bullet .nv-range.nv-s2 { fill: #ccc; }
486
+ .nvd3.nv-bullet .nv-measure.nv-s0 { fill: steelblue; }
487
+ .nvd3.nv-bullet .nv-measure.nv-s1 { fill: darkblue; }
488
+ .nvd3.nv-bullet .nv-title { font-size: 14px; font-weight: bold; }
489
+ .nvd3.nv-bullet .nv-subtitle { fill: #999; }
449
490
 
450
491
 
451
492
 
452
493
 
453
494
  /**********
454
- * Sparkline plus
495
+ * Sparkline
455
496
  */
456
497
 
457
- .nvd3 .sparklineplus .hoverValue line {
498
+ .nvd3.nv-sparkline path {
499
+ fill: none;
500
+ }
501
+
502
+ .nvd3.nv-sparklineplus g.nv-hoverValue {
503
+ pointer-events: none;
504
+ }
505
+
506
+ .nvd3.nv-sparklineplus .nv-hoverValue line {
458
507
  stroke: #f44;
459
508
  stroke-width: 1.5px;
460
509
  }
461
510
 
462
- .nvd3 .sparklineplus,
463
- .nvd3 .sparklineplus g {
511
+ .nvd3.nv-sparklineplus,
512
+ .nvd3.nv-sparklineplus g {
464
513
  pointer-events: all;
465
514
  }
466
515
 
467
- .nvd3 .hoverArea {
516
+ .nvd3 .nv-hoverArea {
468
517
  fill-opacity: 0;
469
518
  stroke-opacity: 0;
470
519
  }
471
520
 
472
- .nvd3 .sparklineplus .xValue,
473
- .nvd3 .sparklineplus .yValue {
521
+ .nvd3.nv-sparklineplus .nv-xValue,
522
+ .nvd3.nv-sparklineplus .nv-yValue {
474
523
  stroke: #666;
475
524
  font-size: .5em;
476
525
  font-weight: normal;
477
526
  }
478
527
 
479
- .nvd3 .sparklineplus .yValue {
528
+ .nvd3.nv-sparklineplus .nv-yValue {
480
529
  stroke: #f66;
481
530
  }
482
531
 
483
532
 
533
+ /**********
534
+ * historical stock
535
+ */
536
+
537
+ .nvd3.nv-ohlcBar .nv-ticks .nv-tick {
538
+ stroke-width: 2px;
539
+ }
540
+
541
+ .nvd3.nv-ohlcBar .nv-ticks .nv-tick.hover {
542
+ stroke-width: 4px;
543
+ }
544
+
545
+ .nvd3.nv-ohlcBar .nv-ticks .nv-tick.positive {
546
+ stroke: #2ca02c;
547
+ }
548
+
549
+ .nvd3.nv-ohlcBar .nv-ticks .nv-tick.negative {
550
+ stroke: #d62728;
551
+ }
552
+
553
+ .nvd3.nv-historicalStockChart .nv-axis .nv-axislabel {
554
+ font-weight: bold;
555
+ }
556
+
557
+ .nvd3.nv-historicalStockChart .nv-dragTarget {
558
+ fill-opacity: 0;
559
+ stroke: none;
560
+ cursor: move;
561
+ }
562
+
563
+ .nvd3 .nv-brush .extent {
564
+ /*
565
+ cursor: ew-resize !important;
566
+ */
567
+ fill-opacity: 0 !important;
568
+ }
569
+
570
+ .nvd3 .nv-brushBackground rect {
571
+ stroke: #000;
572
+ stroke-width: .4;
573
+ fill: #fff;
574
+ fill-opacity: .7;
575
+ }
576
+
577
+
484
578
 
485
579
  /**********
486
580
  * Indented Tree
487
581
  */
488
582
 
489
583
 
490
- .indentedtree .name {
584
+ /**
585
+ * TODO: the following 3 selectors are based on classes used in the example. I should either make them standard and leave them here, or move to a CSS file not included in the library
586
+ */
587
+ .nvd3.nv-indentedtree .name {
491
588
  margin-left: 5px;
492
589
  }
493
590
 
494
- .indentedtree .childrenCount {
591
+ .nvd3.nv-indentedtree .clickable {
592
+ color: #08C;
593
+ cursor: pointer;
594
+ }
595
+
596
+ .nvd3.nv-indentedtree span.clickable:hover {
597
+ color: #005580;
598
+ text-decoration: underline;
599
+ }
600
+
601
+
602
+ .nvd3.nv-indentedtree .nv-childrenCount {
495
603
  display: inline-block;
496
604
  margin-left: 5px;
497
605
  }
498
606
 
499
- .indentedtree .treeicon {
607
+ .nvd3.nv-indentedtree .nv-treeicon {
500
608
  cursor: pointer;
501
609
  /*
502
610
  cursor: n-resize;
503
611
  */
504
612
  }
505
613
 
506
- .indentedtree .treeicon.folded {
614
+ .nvd3.nv-indentedtree .nv-treeicon.nv-folded {
507
615
  cursor: pointer;
508
616
  /*
509
617
  cursor: s-resize;
510
618
  */
511
619
  }
512
620
 
513
- .nvd3.indentedtree .clickable {
514
- color: #08C;
515
- cursor: pointer;
516
- }
517
-
518
- .nvd3.indentedtree span.clickable:hover {
519
- color: #005580;
520
- text-decoration: underline;
521
- }
522
621