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.
- 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
|
|