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.
- data/.rbenv-version +1 -0
- data/Gemfile +3 -0
- data/README.md +36 -79
- data/batsd-dash.gemspec +5 -9
- data/lib/batsd-dash.rb +9 -80
- data/lib/batsd-dash/app.rb +113 -0
- data/lib/batsd-dash/connection.rb +54 -0
- data/lib/batsd-dash/graph.rb +10 -2
- data/lib/batsd-dash/params.rb +10 -2
- data/lib/{public → batsd-dash/public}/css/d3.css +199 -100
- data/lib/{public → batsd-dash/public}/css/datetimepicker.css +0 -0
- data/lib/{public → batsd-dash/public}/css/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/lib/{public → batsd-dash/public}/css/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/lib/{public → batsd-dash/public}/css/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/lib/{public → batsd-dash/public}/css/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/lib/{public → batsd-dash/public}/css/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/lib/{public → batsd-dash/public}/css/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/lib/{public → batsd-dash/public}/css/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/lib/{public → batsd-dash/public}/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/lib/{public → batsd-dash/public}/css/images/ui-icons_222222_256x240.png +0 -0
- data/lib/{public → batsd-dash/public}/css/images/ui-icons_2e83ff_256x240.png +0 -0
- data/lib/{public → batsd-dash/public}/css/images/ui-icons_454545_256x240.png +0 -0
- data/lib/{public → batsd-dash/public}/css/images/ui-icons_888888_256x240.png +0 -0
- data/lib/{public → batsd-dash/public}/css/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/lib/{public → batsd-dash/public}/css/jquery-ui.css +0 -0
- data/lib/batsd-dash/public/css/public.css +419 -0
- data/lib/batsd-dash/public/js/d3.js +4 -0
- data/lib/batsd-dash/public/js/dash.js +82 -0
- data/lib/{public → batsd-dash/public}/js/datetimepicker.js +0 -0
- data/lib/{public → batsd-dash/public}/js/datetimepicker.js~ +0 -0
- data/lib/{public → batsd-dash/public}/js/jquery-ui.js +0 -0
- data/lib/{public → batsd-dash/public}/js/jquery.js +0 -0
- data/lib/batsd-dash/public/js/nv.d3.js +5 -0
- data/lib/batsd-dash/version.rb +4 -2
- data/lib/{views → batsd-dash/views}/layout.haml +24 -6
- data/lib/batsd-dash/views/loading.haml +5 -0
- data/lib/batsd-dash/views/missing.haml +14 -0
- data/lib/batsd-dash/views/root.haml +37 -0
- data/lib/batsd-dash/views/view.haml +60 -0
- data/lib/sass/_charts.scss +37 -0
- data/lib/{batsd-dash/sass → sass}/public.scss +102 -27
- data/test/helper.rb +5 -16
- data/test/test_dash.rb +65 -69
- metadata +121 -101
- data/lib/batsd-dash/connection_pool.rb +0 -87
- data/lib/public/css/public.css +0 -106
- data/lib/public/js/d3.js +0 -4
- data/lib/public/js/dash.js +0 -110
- data/lib/public/js/flot.js +0 -6
- data/lib/public/js/nv.d3.js +0 -4
- data/lib/views/missing.haml +0 -6
- data/lib/views/root.haml +0 -0
- data/lib/views/view.haml +0 -18
- data/test/test_connection_pool.rb +0 -20
data/lib/batsd-dash/params.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
# helpers for processing params and validating input
|
2
|
-
module
|
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
|
-
|
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: #
|
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: #
|
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
|
-
|
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
|
-
|
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
|
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
|
263
|
+
.nvd3.nv-pie .nv-slice text {
|
254
264
|
stroke: #000;
|
255
265
|
stroke-width: 0;
|
256
266
|
}
|
257
267
|
|
258
|
-
.nvd3
|
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
|
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 .
|
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
|
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
|
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
|
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
|
464
|
+
.nvd3.nv-linePlusBar .nv-bar rect {
|
424
465
|
fill-opacity: .75;
|
425
466
|
}
|
426
467
|
|
427
|
-
.nvd3
|
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
|
495
|
+
* Sparkline
|
455
496
|
*/
|
456
497
|
|
457
|
-
.nvd3
|
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
|
463
|
-
.nvd3
|
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
|
473
|
-
.nvd3
|
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
|
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
|
-
|
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 .
|
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
|
|