batsd-dash 0.3.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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