how_are_we_doing 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/app/controllers/reports_controller.rb +1 -52
- data/app/helpers/reports_helper.rb +30 -4
- data/app/models/print.rb +1 -29
- data/app/models/share.rb +3 -29
- data/app/models/total.rb +2 -21
- data/app/models/view.rb +1 -29
- data/app/views/reports/_bar_graph.html.erb +48 -0
- data/app/views/reports/_line_graph.html.erb +40 -0
- data/app/views/reports/_recent_bar_graph.html.erb +41 -0
- data/app/views/reports/index.html.erb +12 -22
- data/config/locales/en.yml +16 -0
- data/lib/generators/how_are_we_doing/install/install_generator.rb +1 -0
- data/lib/generators/how_are_we_doing/install/templates/public/images/hawd/blank.png +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/API.txt +85 -68
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/FAQ.txt +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/NEWS.txt +12 -32
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/PLUGINS.txt +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/README.txt +3 -3
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/excanvas.js +160 -663
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/excanvas.min.js +1 -1
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.crosshair.js +12 -51
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.image.js +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.js +509 -155
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.navigate.js +0 -1
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.stack.js +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.threshold.js +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.js +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/how_are_we_doing.js +50 -8
- data/lib/how_are_we_doing/acts_as_analytical.rb +98 -0
- data/lib/{acts_as_printable.rb → how_are_we_doing/acts_as_printable.rb} +0 -0
- data/lib/{acts_as_shareable.rb → how_are_we_doing/acts_as_shareable.rb} +0 -0
- data/lib/{acts_as_totalable.rb → how_are_we_doing/acts_as_totalable.rb} +0 -0
- data/lib/{acts_as_viewable.rb → how_are_we_doing/acts_as_viewable.rb} +0 -0
- data/lib/how_are_we_doing/controllers/reports_helpers.rb +92 -0
- data/lib/how_are_we_doing/version.rb +1 -1
- data/lib/how_are_we_doing.rb +16 -8
- metadata +13 -6
@@ -166,6 +166,8 @@ If you want the legend to appear somewhere else in the DOM, you can
|
|
166
166
|
specify "container" as a jQuery object/expression to put the legend
|
167
167
|
table into. The "position" and "margin" etc. options will then be
|
168
168
|
ignored. Note that Flot will overwrite the contents of the container.
|
169
|
+
Most of the above settings do not apply
|
170
|
+
|
169
171
|
|
170
172
|
|
171
173
|
Customizing the axes
|
@@ -176,13 +178,9 @@ Customizing the axes
|
|
176
178
|
min: null or number
|
177
179
|
max: null or number
|
178
180
|
autoscaleMargin: null or number
|
179
|
-
|
180
181
|
labelWidth: null or number
|
181
182
|
labelHeight: null or number
|
182
183
|
|
183
|
-
transform: null or fn: number -> number
|
184
|
-
inverseTransform: null or fn: number -> number
|
185
|
-
|
186
184
|
ticks: null or number or ticks array or (fn: range -> ticks array)
|
187
185
|
tickSize: number or array
|
188
186
|
minTickSize: number or array
|
@@ -210,29 +208,6 @@ nearest whole tick. The default value is "null" for the x axis and
|
|
210
208
|
labels in pixels. They're useful in case you need to align several
|
211
209
|
plots.
|
212
210
|
|
213
|
-
"transform" and "inverseTransform" are callbacks you can put in to
|
214
|
-
change the way the data is drawn. You can design a function to
|
215
|
-
compress or expand certain parts of the axis non-linearly, e.g.
|
216
|
-
suppress weekends or compress far away points with a logarithm or some
|
217
|
-
other means. When Flot draws the plot, each value is first put through
|
218
|
-
the transform function. Here's an example, the x axis can be turned
|
219
|
-
into a natural logarithm axis with the following code:
|
220
|
-
|
221
|
-
xaxis: {
|
222
|
-
transform: function (v) { return Math.log(v); },
|
223
|
-
inverseTransform: function (v) { return Math.exp(v); }
|
224
|
-
}
|
225
|
-
|
226
|
-
Note that for finding extrema, Flot assumes that the transform
|
227
|
-
function does not reorder values (monotonicity is assumed).
|
228
|
-
|
229
|
-
The inverseTransform is simply the inverse of the transform function
|
230
|
-
(so v == inverseTransform(transform(v)) for all relevant v). It is
|
231
|
-
required for converting from canvas coordinates to data coordinates,
|
232
|
-
e.g. for a mouse interaction where a certain pixel is clicked. If you
|
233
|
-
don't use any interactive features of Flot, you may not need it.
|
234
|
-
|
235
|
-
|
236
211
|
The rest of the options deal with the ticks.
|
237
212
|
|
238
213
|
If you don't specify any ticks, a tick generator algorithm will make
|
@@ -309,6 +284,7 @@ an example of a custom formatter:
|
|
309
284
|
return val.toFixed(axis.tickDecimals) + " B";
|
310
285
|
}
|
311
286
|
|
287
|
+
|
312
288
|
Time series data
|
313
289
|
================
|
314
290
|
|
@@ -379,7 +355,6 @@ through the following axis options:
|
|
379
355
|
minTickSize: array
|
380
356
|
timeformat: null or format string
|
381
357
|
monthNames: null or array of size 12 of strings
|
382
|
-
twelveHourClock: boolean
|
383
358
|
|
384
359
|
Here "timeformat" is a format string to use. You might use it like
|
385
360
|
this:
|
@@ -392,25 +367,20 @@ this:
|
|
392
367
|
This will result in tick labels like "2000/12/24". The following
|
393
368
|
specifiers are supported
|
394
369
|
|
395
|
-
%h: hours
|
396
|
-
%H: hours (left-padded with a zero)
|
397
|
-
%M: minutes (left-padded with a zero)
|
398
|
-
%S: seconds (left-padded with a zero)
|
399
|
-
%d: day of month (1-31)
|
400
|
-
%m: month (1-12)
|
401
|
-
%y: year (four digits)
|
402
|
-
%b: month name (customizable)
|
403
|
-
%p: am/pm, additionally switches %h/%H to 12 hour instead of 24
|
404
|
-
%P: AM/PM (uppercase version of %p)
|
370
|
+
%h': hours
|
371
|
+
%H': hours (left-padded with a zero)
|
372
|
+
%M': minutes (left-padded with a zero)
|
373
|
+
%S': seconds (left-padded with a zero)
|
374
|
+
%d': day of month (1-31)
|
375
|
+
%m': month (1-12)
|
376
|
+
%y': year (four digits)
|
377
|
+
%b': month name (customizable)
|
405
378
|
|
406
379
|
You can customize the month names with the "monthNames" option. For
|
407
380
|
instance, for Danish you might specify:
|
408
381
|
|
409
382
|
monthNames: ["jan", "feb", "mar", "apr", "maj", "jun", "jul", "aug", "sep", "okt", "nov", "dec"]
|
410
383
|
|
411
|
-
If you set "twelveHourClock" to true, the autogenerated timestamps
|
412
|
-
will use 12 hour AM/PM timestamps instead of 24 hour.
|
413
|
-
|
414
384
|
The format string and month names are used by a very simple built-in
|
415
385
|
format function that takes a date object, a format string (and
|
416
386
|
optionally an array of month names) and returns the formatted string.
|
@@ -665,6 +635,39 @@ can set "hoverable" and "clickable" to false in the options for that
|
|
665
635
|
series, like this { data: [...], label: "Foo", clickable: false }.
|
666
636
|
|
667
637
|
|
638
|
+
Customizing the selection
|
639
|
+
=========================
|
640
|
+
|
641
|
+
selection: {
|
642
|
+
mode: null or "x" or "y" or "xy",
|
643
|
+
color: color
|
644
|
+
}
|
645
|
+
|
646
|
+
You enable selection support by setting the mode to one of "x", "y" or
|
647
|
+
"xy". In "x" mode, the user will only be able to specify the x range,
|
648
|
+
similarly for "y" mode. For "xy", the selection becomes a rectangle
|
649
|
+
where both ranges can be specified. "color" is color of the selection.
|
650
|
+
|
651
|
+
When selection support is enabled, a "plotselected" event will be emitted
|
652
|
+
on the DOM element you passed into the plot function. The event
|
653
|
+
handler gets one extra parameter with the ranges selected on the axes,
|
654
|
+
like this:
|
655
|
+
|
656
|
+
placeholder.bind("plotselected", function(event, ranges) {
|
657
|
+
alert("You selected " + ranges.xaxis.from + " to " + ranges.xaxis.to)
|
658
|
+
// similar for yaxis, secondary axes are in x2axis
|
659
|
+
// and y2axis if present
|
660
|
+
});
|
661
|
+
|
662
|
+
The "plotselected" event is only fired when the user has finished
|
663
|
+
making the selection. A "plotselecting" event is fired during the
|
664
|
+
process with the same parameters as the "plotselected" event, in case
|
665
|
+
you want to know what's happening while it's happening,
|
666
|
+
|
667
|
+
A "plotunselected" event with no arguments is emitted when the user
|
668
|
+
clicks the mouse to remove the selection.
|
669
|
+
|
670
|
+
|
668
671
|
Specifying gradients
|
669
672
|
====================
|
670
673
|
|
@@ -683,18 +686,10 @@ For the series you can specify the gradient as an object that
|
|
683
686
|
specifies the scaling of the brightness and the opacity of the series
|
684
687
|
color, e.g.
|
685
688
|
|
686
|
-
{ colors: [{ opacity: 0.8 }, { brightness: 0.6, opacity: 0.8 } ]
|
689
|
+
{ colors: [{ opacity: 0.8 }, { brightness: 0.6, opacity: 0.8 } ]
|
687
690
|
|
688
691
|
where the first color simply has its alpha scaled, whereas the second
|
689
|
-
is also darkened.
|
690
|
-
gradually disappear, without outline:
|
691
|
-
|
692
|
-
bars: {
|
693
|
-
show: true,
|
694
|
-
lineWidth: 0,
|
695
|
-
fill: true,
|
696
|
-
fillColor: { colors: [ { opacity: 0.8 }, { opacity: 0.1 } ] }
|
697
|
-
}
|
692
|
+
is also darkened.
|
698
693
|
|
699
694
|
Flot currently only supports vertical gradients drawn from top to
|
700
695
|
bottom because that's what works with IE.
|
@@ -706,6 +701,34 @@ Plot Methods
|
|
706
701
|
The Plot object returned from the plot function has some methods you
|
707
702
|
can call:
|
708
703
|
|
704
|
+
- setSelection(ranges, preventEvent)
|
705
|
+
|
706
|
+
Set the selection rectangle. The passed in ranges is on the same
|
707
|
+
form as returned in the "plotselected" event. If the selection
|
708
|
+
mode is "x", you should put in either an xaxis (or x2axis) object,
|
709
|
+
if the mode is "y" you need to put in an yaxis (or y2axis) object
|
710
|
+
and both xaxis/x2axis and yaxis/y2axis if the selection mode is
|
711
|
+
"xy", like this:
|
712
|
+
|
713
|
+
setSelection({ xaxis: { from: 0, to: 10 }, yaxis: { from: 40, to: 60 } });
|
714
|
+
|
715
|
+
setSelection will trigger the "plotselected" event when called. If
|
716
|
+
you don't want that to happen, e.g. if you're inside a
|
717
|
+
"plotselected" handler, pass true as the second parameter.
|
718
|
+
|
719
|
+
|
720
|
+
- clearSelection(preventEvent)
|
721
|
+
|
722
|
+
Clear the selection rectangle. Pass in true to avoid getting a
|
723
|
+
"plotunselected" event.
|
724
|
+
|
725
|
+
- getSelection()
|
726
|
+
|
727
|
+
Returns the current selection in the same format as the
|
728
|
+
"plotselected" event. If there's currently no selection, it
|
729
|
+
returns null.
|
730
|
+
|
731
|
+
|
709
732
|
- highlight(series, datapoint)
|
710
733
|
|
711
734
|
Highlight a specific datapoint in the data series. You can either
|
@@ -754,7 +777,7 @@ can call:
|
|
754
777
|
- triggerRedrawOverlay()
|
755
778
|
|
756
779
|
Schedules an update of an overlay canvas used for drawing
|
757
|
-
interactive things like
|
780
|
+
interactive things like the selection and point highlights. This
|
758
781
|
is mostly useful for writing plugins. The redraw doesn't happen
|
759
782
|
immediately, instead a timer is set to catch multiple successive
|
760
783
|
redraws (e.g. from a mousemove).
|
@@ -866,23 +889,18 @@ Here's an overview of the phases Flot goes through:
|
|
866
889
|
|
867
890
|
7. Responding to events, if any
|
868
891
|
|
869
|
-
|
870
|
-
|
871
|
-
after the plot is constructed as the "hooks" attribute on the returned
|
872
|
-
plot object, e.g.
|
892
|
+
The hooks are simple arrays. They are available on the "hooks"
|
893
|
+
sub-object on the Plot object with the names mentioned below, e.g.
|
873
894
|
|
874
|
-
|
875
|
-
function hellohook(plot, canvascontext) { alert("hello!"); };
|
895
|
+
var plot = $.plot(...);
|
876
896
|
|
877
|
-
|
878
|
-
|
897
|
+
function f(plot, series, datapoints) { alert("hello!")};
|
898
|
+
|
899
|
+
plot.hooks.processDatapoints.push(f);
|
879
900
|
|
880
|
-
|
881
|
-
// has added other hooks
|
901
|
+
All hooks get the plot object as first parameter.
|
882
902
|
|
883
|
-
|
884
|
-
plot object as first parameter. You can find some examples of defined
|
885
|
-
hooks in the plugins bundled with Flot.
|
903
|
+
Currently available hooks (when in doubt, check the Flot source):
|
886
904
|
|
887
905
|
- processOptions [phase 1]
|
888
906
|
|
@@ -1007,7 +1025,7 @@ Plugins extend the functionality of Flot. To use a plugin, simply
|
|
1007
1025
|
include its Javascript file after Flot in the HTML page.
|
1008
1026
|
|
1009
1027
|
If you're worried about download size/latency, you can concatenate all
|
1010
|
-
the plugins you use
|
1028
|
+
the plugins you use and Flot itself for that matter into one big file
|
1011
1029
|
(make sure you get the order right), then optionally run it through a
|
1012
1030
|
Javascript minifier such as YUI Compressor.
|
1013
1031
|
|
@@ -1020,5 +1038,4 @@ from its "option" attribute. The init function gets a reference to the
|
|
1020
1038
|
plot object created and uses this to register hooks and add new public
|
1021
1039
|
methods if needed.
|
1022
1040
|
|
1023
|
-
See the PLUGINS.txt file for details on how to write a plugin.
|
1024
|
-
above description hints, it's actually pretty easy.
|
1041
|
+
See the PLUGINS.txt file for details on how to write a plugin.
|
File without changes
|
@@ -1,32 +1,26 @@
|
|
1
|
-
Flot 0.
|
1
|
+
Flot 0.x
|
2
2
|
--------
|
3
3
|
|
4
4
|
API changes:
|
5
5
|
|
6
|
-
1.
|
7
|
-
passing selection: { mode: something }, you MUST include the file
|
8
|
-
jquery.flot.selection.js after jquery.flot.js. This reduces the size
|
9
|
-
of base Flot and makes it easier to customize the selection as well as
|
10
|
-
improving code clarity. The change is based on patch from andershol.
|
11
|
-
|
12
|
-
2. In the global options specified in the $.plot command,
|
6
|
+
1. In the global options specified in the $.plot command,
|
13
7
|
"lines", "points", "bars" and "shadowSize" have been moved to a
|
14
8
|
sub-object called "series", i.e.
|
15
9
|
|
16
10
|
$.plot(placeholder, data, { lines: { show: true }})
|
17
11
|
|
18
|
-
|
12
|
+
becomes
|
19
13
|
|
20
14
|
$.plot(placeholder, data, { series: { lines: { show: true }}})
|
21
15
|
|
22
16
|
All future series-specific options will go into this sub-object to
|
23
|
-
simplify plugin writing. Backward-compatibility
|
24
|
-
old code should not break.
|
17
|
+
simplify plugin writing. Backward-compatibility hooks are in place,
|
18
|
+
so old code should not break.
|
25
19
|
|
26
|
-
|
20
|
+
2. "plothover" no longer provides the original data point, but instead
|
27
21
|
a normalized one, since there may be no corresponding original point.
|
28
22
|
|
29
|
-
|
23
|
+
3. Due to a bug in previous versions of jQuery, you now need at least
|
30
24
|
jQuery 1.2.6. But if you can, try jQuery 1.3.2 as it got some
|
31
25
|
improvements in event handling speed.
|
32
26
|
|
@@ -91,9 +85,9 @@ Changes:
|
|
91
85
|
offset within the placeholder.
|
92
86
|
|
93
87
|
- Plugin system: register an init method in the $.flot.plugins array
|
94
|
-
to get started, see PLUGINS.txt for details on how to write plugins
|
95
|
-
|
96
|
-
|
88
|
+
to get started, see PLUGINS.txt for details on how to write plugins.
|
89
|
+
There are also some extra methods to enable access to internal
|
90
|
+
state.
|
97
91
|
|
98
92
|
- Hooks: you can register functions that are called while Flot is
|
99
93
|
crunching the data and doing the plot. This can be used to modify
|
@@ -117,16 +111,7 @@ Changes:
|
|
117
111
|
|
118
112
|
- More configurable grid.
|
119
113
|
|
120
|
-
|
121
|
-
axes and compressed time axes (like omitting weekends).
|
122
|
-
|
123
|
-
- Support for twelve-hour date formatting (patch by Forrest Aldridge).
|
124
|
-
|
125
|
-
- The color parsing code in Flot has been cleaned up and split out so
|
126
|
-
it's now available as a separate jQuery plugin. It's included inline
|
127
|
-
in the Flot source to make dependency managing easier. This also
|
128
|
-
makes it really easy to use the color helpers in Flot plugins.
|
129
|
-
|
114
|
+
|
130
115
|
Bug fixes:
|
131
116
|
|
132
117
|
- Fixed two corner-case bugs when drawing filled curves (report and
|
@@ -141,7 +126,7 @@ Bug fixes:
|
|
141
126
|
problem reported by Sergio Nunes).
|
142
127
|
- Updated mousemove position expression to the latest from jQuery (bug
|
143
128
|
reported by meyuchas).
|
144
|
-
- Use
|
129
|
+
- Use borders instead of background in legend (fix printing issue 25
|
145
130
|
and 45).
|
146
131
|
- Explicitly convert axis min/max to numbers.
|
147
132
|
- Fixed a bug with drawing marking lines with different colors
|
@@ -167,11 +152,6 @@ Bug fixes:
|
|
167
152
|
smarter.
|
168
153
|
- Fix for uneven axis margins (report and patch by Paul Kienzle) and
|
169
154
|
snapping to ticks (concurrent report and patch by lifthrasiir).
|
170
|
-
- Fixed bug with slicing in findNearbyItems (patch by zollman).
|
171
|
-
- Make heuristic for x axis label widths more dynamic (patch by
|
172
|
-
rickinhethuis).
|
173
|
-
- Make sure points on top take precedence when finding nearby points
|
174
|
-
when hovering (reported by didroe, issue 224).
|
175
155
|
|
176
156
|
Flot 0.5
|
177
157
|
--------
|
File without changes
|
@@ -64,7 +64,7 @@ in the file "API.txt". Here's a quick example that'll draw a line from
|
|
64
64
|
|
65
65
|
$.plot($("#placeholder"), [ [[0, 0], [1, 1]] ], { yaxis: { max: 1 } });
|
66
66
|
|
67
|
-
The plot function immediately draws the chart and then returns a
|
67
|
+
The plot function immediately draws the chart and then returns a Plot
|
68
68
|
object with a couple of methods.
|
69
69
|
|
70
70
|
|
@@ -73,9 +73,9 @@ What's with the name?
|
|
73
73
|
|
74
74
|
First: it's pronounced with a short o, like "plot". Not like "flawed".
|
75
75
|
|
76
|
-
So "Flot"
|
76
|
+
So "Flot" is like "Plot".
|
77
77
|
|
78
78
|
And if you look up "flot" in a Danish-to-English dictionary, some up
|
79
79
|
the words that come up are "good-looking", "attractive", "stylish",
|
80
80
|
"smart", "impressive", "extravagant". One of the main goals with Flot
|
81
|
-
is pretty looks.
|
81
|
+
is pretty looks. Flot is supposed to be "flot".
|