rubyvis 0.6.0 → 0.6.1
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.
- checksums.yaml +7 -0
- data/.gitignore +16 -0
- data/.travis.yml +13 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +37 -0
- data/History.txt +6 -0
- data/LICENSE.txt +23 -0
- data/{README.txt → README.md} +15 -12
- data/Rakefile +4 -11
- data/lib/rubyvis.rb +1 -1
- data/lib/rubyvis/scale/quantitative.rb +14 -18
- data/lib/rubyvis/scene/svg_label.rb +1 -1
- data/rubyvis.gemspec +21 -0
- data/spec/anchor_spec.rb +2 -1
- data/spec/line_spec.rb +2 -2
- data/spec/scale_linear_datetime_spec.rb +23 -8
- data/spec/spec_helper.rb +2 -1
- metadata +31 -214
- data/.gemtest +0 -0
- data/vendor/protovis/protovis-r3.3.js +0 -287
- data/vendor/protovis/src/behavior/Behavior.js +0 -32
- data/vendor/protovis/src/behavior/Drag.js +0 -112
- data/vendor/protovis/src/behavior/Pan.js +0 -110
- data/vendor/protovis/src/behavior/Point.js +0 -157
- data/vendor/protovis/src/behavior/Resize.js +0 -104
- data/vendor/protovis/src/behavior/Select.js +0 -100
- data/vendor/protovis/src/behavior/Zoom.js +0 -85
- data/vendor/protovis/src/color/Color.js +0 -598
- data/vendor/protovis/src/color/Colors.js +0 -135
- data/vendor/protovis/src/color/Ramp.js +0 -17
- data/vendor/protovis/src/data/Arrays.js +0 -277
- data/vendor/protovis/src/data/Dom.js +0 -380
- data/vendor/protovis/src/data/Flatten.js +0 -146
- data/vendor/protovis/src/data/Histogram.js +0 -120
- data/vendor/protovis/src/data/LinearScale.js +0 -54
- data/vendor/protovis/src/data/LogScale.js +0 -142
- data/vendor/protovis/src/data/Nest.js +0 -257
- data/vendor/protovis/src/data/Numbers.js +0 -313
- data/vendor/protovis/src/data/Objects.js +0 -78
- data/vendor/protovis/src/data/OrdinalScale.js +0 -267
- data/vendor/protovis/src/data/QuantileScale.js +0 -180
- data/vendor/protovis/src/data/QuantitativeScale.js +0 -440
- data/vendor/protovis/src/data/RootScale.js +0 -55
- data/vendor/protovis/src/data/Scale.js +0 -86
- data/vendor/protovis/src/data/Transform.js +0 -109
- data/vendor/protovis/src/data/Tree.js +0 -124
- data/vendor/protovis/src/data/Vector.js +0 -118
- data/vendor/protovis/src/geo/Geo.js +0 -5
- data/vendor/protovis/src/geo/GeoScale.js +0 -307
- data/vendor/protovis/src/geo/LatLng.js +0 -23
- data/vendor/protovis/src/geo/Projection.js +0 -43
- data/vendor/protovis/src/geo/Projections.js +0 -117
- data/vendor/protovis/src/lang/Array.js +0 -112
- data/vendor/protovis/src/lang/init.js +0 -26
- data/vendor/protovis/src/layout/Arc.js +0 -178
- data/vendor/protovis/src/layout/Bullet.js +0 -164
- data/vendor/protovis/src/layout/Cluster.js +0 -205
- data/vendor/protovis/src/layout/Force.js +0 -309
- data/vendor/protovis/src/layout/Grid.js +0 -119
- data/vendor/protovis/src/layout/Hierarchy.js +0 -249
- data/vendor/protovis/src/layout/Horizon.js +0 -159
- data/vendor/protovis/src/layout/Indent.js +0 -83
- data/vendor/protovis/src/layout/Layout.js +0 -56
- data/vendor/protovis/src/layout/Matrix.js +0 -177
- data/vendor/protovis/src/layout/Network.js +0 -302
- data/vendor/protovis/src/layout/Pack.js +0 -323
- data/vendor/protovis/src/layout/Partition.js +0 -203
- data/vendor/protovis/src/layout/Rollup.js +0 -203
- data/vendor/protovis/src/layout/Stack.js +0 -391
- data/vendor/protovis/src/layout/Tree.js +0 -282
- data/vendor/protovis/src/layout/Treemap.js +0 -347
- data/vendor/protovis/src/mark/Anchor.js +0 -81
- data/vendor/protovis/src/mark/Area.js +0 -268
- data/vendor/protovis/src/mark/Bar.js +0 -93
- data/vendor/protovis/src/mark/Dot.js +0 -212
- data/vendor/protovis/src/mark/Ease.js +0 -150
- data/vendor/protovis/src/mark/Image.js +0 -154
- data/vendor/protovis/src/mark/Label.js +0 -155
- data/vendor/protovis/src/mark/Line.js +0 -195
- data/vendor/protovis/src/mark/Mark.js +0 -1237
- data/vendor/protovis/src/mark/Panel.js +0 -273
- data/vendor/protovis/src/mark/Rule.js +0 -143
- data/vendor/protovis/src/mark/Transient.js +0 -7
- data/vendor/protovis/src/mark/Transition.js +0 -195
- data/vendor/protovis/src/mark/Wedge.js +0 -244
- data/vendor/protovis/src/physics/BoundConstraint.js +0 -75
- data/vendor/protovis/src/physics/ChargeForce.js +0 -184
- data/vendor/protovis/src/physics/CollisionConstraint.js +0 -113
- data/vendor/protovis/src/physics/Constraint.js +0 -26
- data/vendor/protovis/src/physics/DragForce.js +0 -49
- data/vendor/protovis/src/physics/Force.js +0 -25
- data/vendor/protovis/src/physics/Particle.js +0 -81
- data/vendor/protovis/src/physics/PositionConstraint.js +0 -72
- data/vendor/protovis/src/physics/Quadtree.js +0 -195
- data/vendor/protovis/src/physics/Simulation.js +0 -159
- data/vendor/protovis/src/physics/SpringForce.js +0 -141
- data/vendor/protovis/src/pv-internals.js +0 -154
- data/vendor/protovis/src/pv.js +0 -95
- data/vendor/protovis/src/scene/SvgArea.js +0 -172
- data/vendor/protovis/src/scene/SvgBar.js +0 -28
- data/vendor/protovis/src/scene/SvgCurve.js +0 -354
- data/vendor/protovis/src/scene/SvgDot.js +0 -81
- data/vendor/protovis/src/scene/SvgImage.js +0 -45
- data/vendor/protovis/src/scene/SvgLabel.js +0 -46
- data/vendor/protovis/src/scene/SvgLine.js +0 -159
- data/vendor/protovis/src/scene/SvgPanel.js +0 -126
- data/vendor/protovis/src/scene/SvgRule.js +0 -26
- data/vendor/protovis/src/scene/SvgScene.js +0 -185
- data/vendor/protovis/src/scene/SvgWedge.js +0 -66
- data/vendor/protovis/src/text/DateFormat.js +0 -262
- data/vendor/protovis/src/text/Format.js +0 -78
- data/vendor/protovis/src/text/NumberFormat.js +0 -227
- data/vendor/protovis/src/text/TimeFormat.js +0 -115
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Abstract; see an implementing class.
|
|
3
|
-
*
|
|
4
|
-
* @class Represents an abstract text formatter and parser. A <i>format</i> is a
|
|
5
|
-
* function that converts an object of a given type, such as a <tt>Date</tt>, to
|
|
6
|
-
* a human-readable string representation. The format may also have a
|
|
7
|
-
* {@link #parse} method for converting a string representation back to the
|
|
8
|
-
* given object type.
|
|
9
|
-
*
|
|
10
|
-
* <p>Because formats are themselves functions, they can be used directly as
|
|
11
|
-
* mark properties. For example, if the data associated with a label are dates,
|
|
12
|
-
* a date format can be used as label text:
|
|
13
|
-
*
|
|
14
|
-
* <pre> .text(pv.Format.date("%m/%d/%y"))</pre>
|
|
15
|
-
*
|
|
16
|
-
* And as with scales, if the format is used in multiple places, it can be
|
|
17
|
-
* convenient to declare it as a global variable and then reference it from the
|
|
18
|
-
* appropriate property functions. For example, if the data has a <tt>date</tt>
|
|
19
|
-
* attribute, and <tt>format</tt> references a given date format:
|
|
20
|
-
*
|
|
21
|
-
* <pre> .text(function(d) format(d.date))</pre>
|
|
22
|
-
*
|
|
23
|
-
* Similarly, to parse a string into a date:
|
|
24
|
-
*
|
|
25
|
-
* <pre>var date = format.parse("4/30/2010");</pre>
|
|
26
|
-
*
|
|
27
|
-
* Not all format implementations support parsing. See the implementing class
|
|
28
|
-
* for details.
|
|
29
|
-
*
|
|
30
|
-
* @see pv.Format.date
|
|
31
|
-
* @see pv.Format.number
|
|
32
|
-
* @see pv.Format.time
|
|
33
|
-
*/
|
|
34
|
-
pv.Format = {};
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Formats the specified object, returning the string representation.
|
|
38
|
-
*
|
|
39
|
-
* @function
|
|
40
|
-
* @name pv.Format.prototype.format
|
|
41
|
-
* @param {object} x the object to format.
|
|
42
|
-
* @returns {string} the formatted string.
|
|
43
|
-
*/
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Parses the specified string, returning the object representation.
|
|
47
|
-
*
|
|
48
|
-
* @function
|
|
49
|
-
* @name pv.Format.prototype.parse
|
|
50
|
-
* @param {string} x the string to parse.
|
|
51
|
-
* @returns {object} the parsed object.
|
|
52
|
-
*/
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* @private Given a string that may be used as part of a regular expression,
|
|
56
|
-
* this methods returns an appropriately quoted version of the specified string,
|
|
57
|
-
* with any special characters escaped.
|
|
58
|
-
*
|
|
59
|
-
* @param {string} s a string to quote.
|
|
60
|
-
* @returns {string} the quoted string.
|
|
61
|
-
*/
|
|
62
|
-
pv.Format.re = function(s) {
|
|
63
|
-
return s.replace(/[\\\^\$\*\+\?\[\]\(\)\.\{\}]/g, "\\$&");
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* @private Optionally pads the specified string <i>s</i> so that it is at least
|
|
68
|
-
* <i>n</i> characters long, using the padding character <i>c</i>.
|
|
69
|
-
*
|
|
70
|
-
* @param {string} c the padding character.
|
|
71
|
-
* @param {number} n the minimum string length.
|
|
72
|
-
* @param {string} s the string to pad.
|
|
73
|
-
* @returns {string} the padded string.
|
|
74
|
-
*/
|
|
75
|
-
pv.Format.pad = function(c, n, s) {
|
|
76
|
-
var m = n - String(s).length;
|
|
77
|
-
return (m < 1) ? s : new Array(m + 1).join(c) + s;
|
|
78
|
-
};
|
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Returns a default number format.
|
|
3
|
-
*
|
|
4
|
-
* @class Represents a number format, converting between a <tt>number</tt> and a
|
|
5
|
-
* <tt>string</tt>. This class allows numbers to be formatted with variable
|
|
6
|
-
* precision (both for the integral and fractional part of the number), optional
|
|
7
|
-
* thousands grouping, and optional padding. The thousands (",") and decimal
|
|
8
|
-
* (".") separator can be customized.
|
|
9
|
-
*
|
|
10
|
-
* @returns {pv.Format.number} a number format.
|
|
11
|
-
*/
|
|
12
|
-
pv.Format.number = function() {
|
|
13
|
-
var mini = 0, // default minimum integer digits
|
|
14
|
-
maxi = Infinity, // default maximum integer digits
|
|
15
|
-
mins = 0, // mini, including group separators
|
|
16
|
-
minf = 0, // default minimum fraction digits
|
|
17
|
-
maxf = 0, // default maximum fraction digits
|
|
18
|
-
maxk = 1, // 10^maxf
|
|
19
|
-
padi = "0", // default integer pad
|
|
20
|
-
padf = "0", // default fraction pad
|
|
21
|
-
padg = true, // whether group separator affects integer padding
|
|
22
|
-
decimal = ".", // default decimal separator
|
|
23
|
-
group = ",", // default group separator
|
|
24
|
-
np = "\u2212", // default negative prefix
|
|
25
|
-
ns = ""; // default negative suffix
|
|
26
|
-
|
|
27
|
-
/** @private */
|
|
28
|
-
function format(x) {
|
|
29
|
-
/* Round the fractional part, and split on decimal separator. */
|
|
30
|
-
if (Infinity > maxf) x = Math.round(x * maxk) / maxk;
|
|
31
|
-
var s = String(Math.abs(x)).split(".");
|
|
32
|
-
|
|
33
|
-
/* Pad, truncate and group the integral part. */
|
|
34
|
-
var i = s[0];
|
|
35
|
-
if (i.length > maxi) i = i.substring(i.length - maxi);
|
|
36
|
-
if (padg && (i.length < mini)) i = new Array(mini - i.length + 1).join(padi) + i;
|
|
37
|
-
if (i.length > 3) i = i.replace(/\B(?=(?:\d{3})+(?!\d))/g, group);
|
|
38
|
-
if (!padg && (i.length < mins)) i = new Array(mins - i.length + 1).join(padi) + i;
|
|
39
|
-
s[0] = x < 0 ? np + i + ns : i;
|
|
40
|
-
|
|
41
|
-
/* Pad the fractional part. */
|
|
42
|
-
var f = s[1] || "";
|
|
43
|
-
if (f.length < minf) s[1] = f + new Array(minf - f.length + 1).join(padf);
|
|
44
|
-
|
|
45
|
-
return s.join(decimal);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* @function
|
|
50
|
-
* @name pv.Format.number.prototype.format
|
|
51
|
-
* @param {number} x
|
|
52
|
-
* @returns {string}
|
|
53
|
-
*/
|
|
54
|
-
format.format = format;
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Parses the specified string as a number. Before parsing, leading and
|
|
58
|
-
* trailing padding is removed. Group separators are also removed, and the
|
|
59
|
-
* decimal separator is replaced with the standard point ("."). The integer
|
|
60
|
-
* part is truncated per the maximum integer digits, and the fraction part is
|
|
61
|
-
* rounded per the maximum fraction digits.
|
|
62
|
-
*
|
|
63
|
-
* @function
|
|
64
|
-
* @name pv.Format.number.prototype.parse
|
|
65
|
-
* @param {string} x the string to parse.
|
|
66
|
-
* @returns {number} the parsed number.
|
|
67
|
-
*/
|
|
68
|
-
format.parse = function(x) {
|
|
69
|
-
var re = pv.Format.re;
|
|
70
|
-
|
|
71
|
-
/* Remove leading and trailing padding. Split on the decimal separator. */
|
|
72
|
-
var s = String(x)
|
|
73
|
-
.replace(new RegExp("^(" + re(padi) + ")*"), "")
|
|
74
|
-
.replace(new RegExp("(" + re(padf) + ")*$"), "")
|
|
75
|
-
.split(decimal);
|
|
76
|
-
|
|
77
|
-
/* Remove grouping and truncate the integral part. */
|
|
78
|
-
var i = s[0].replace(new RegExp(re(group), "g"), "");
|
|
79
|
-
if (i.length > maxi) i = i.substring(i.length - maxi);
|
|
80
|
-
|
|
81
|
-
/* Round the fractional part. */
|
|
82
|
-
var f = s[1] ? Number("0." + s[1]) : 0;
|
|
83
|
-
if (Infinity > maxf) f = Math.round(f * maxk) / maxk;
|
|
84
|
-
|
|
85
|
-
return Math.round(i) + f;
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Sets or gets the minimum and maximum number of integer digits. This
|
|
90
|
-
* controls the number of decimal digits to display before the decimal
|
|
91
|
-
* separator for the integral part of the number. If the number of digits is
|
|
92
|
-
* smaller than the minimum, the digits are padded; if the number of digits is
|
|
93
|
-
* larger, the digits are truncated, showing only the lower-order digits. The
|
|
94
|
-
* default range is [0, Infinity].
|
|
95
|
-
*
|
|
96
|
-
* <p>If only one argument is specified to this method, this value is used as
|
|
97
|
-
* both the minimum and maximum number. If no arguments are specified, a
|
|
98
|
-
* two-element array is returned containing the minimum and the maximum.
|
|
99
|
-
*
|
|
100
|
-
* @function
|
|
101
|
-
* @name pv.Format.number.prototype.integerDigits
|
|
102
|
-
* @param {number} [min] the minimum integer digits.
|
|
103
|
-
* @param {number} [max] the maximum integer digits.
|
|
104
|
-
* @returns {pv.Format.number} <tt>this</tt>, or the current integer digits.
|
|
105
|
-
*/
|
|
106
|
-
format.integerDigits = function(min, max) {
|
|
107
|
-
if (arguments.length) {
|
|
108
|
-
mini = Number(min);
|
|
109
|
-
maxi = (arguments.length > 1) ? Number(max) : mini;
|
|
110
|
-
mins = mini + Math.floor(mini / 3) * group.length;
|
|
111
|
-
return this;
|
|
112
|
-
}
|
|
113
|
-
return [mini, maxi];
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Sets or gets the minimum and maximum number of fraction digits. The
|
|
118
|
-
* controls the number of decimal digits to display after the decimal
|
|
119
|
-
* separator for the fractional part of the number. If the number of digits is
|
|
120
|
-
* smaller than the minimum, the digits are padded; if the number of digits is
|
|
121
|
-
* larger, the fractional part is rounded, showing only the higher-order
|
|
122
|
-
* digits. The default range is [0, 0].
|
|
123
|
-
*
|
|
124
|
-
* <p>If only one argument is specified to this method, this value is used as
|
|
125
|
-
* both the minimum and maximum number. If no arguments are specified, a
|
|
126
|
-
* two-element array is returned containing the minimum and the maximum.
|
|
127
|
-
*
|
|
128
|
-
* @function
|
|
129
|
-
* @name pv.Format.number.prototype.fractionDigits
|
|
130
|
-
* @param {number} [min] the minimum fraction digits.
|
|
131
|
-
* @param {number} [max] the maximum fraction digits.
|
|
132
|
-
* @returns {pv.Format.number} <tt>this</tt>, or the current fraction digits.
|
|
133
|
-
*/
|
|
134
|
-
format.fractionDigits = function(min, max) {
|
|
135
|
-
if (arguments.length) {
|
|
136
|
-
minf = Number(min);
|
|
137
|
-
maxf = (arguments.length > 1) ? Number(max) : minf;
|
|
138
|
-
maxk = Math.pow(10, maxf);
|
|
139
|
-
return this;
|
|
140
|
-
}
|
|
141
|
-
return [minf, maxf];
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* Sets or gets the character used to pad the integer part. The integer pad is
|
|
146
|
-
* used when the number of integer digits is smaller than the minimum. The
|
|
147
|
-
* default pad character is "0" (zero).
|
|
148
|
-
*
|
|
149
|
-
* @param {string} [x] the new pad character.
|
|
150
|
-
* @returns {pv.Format.number} <tt>this</tt> or the current pad character.
|
|
151
|
-
*/
|
|
152
|
-
format.integerPad = function(x) {
|
|
153
|
-
if (arguments.length) {
|
|
154
|
-
padi = String(x);
|
|
155
|
-
padg = /\d/.test(padi);
|
|
156
|
-
return this;
|
|
157
|
-
}
|
|
158
|
-
return padi;
|
|
159
|
-
};
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Sets or gets the character used to pad the fration part. The fraction pad
|
|
163
|
-
* is used when the number of fraction digits is smaller than the minimum. The
|
|
164
|
-
* default pad character is "0" (zero).
|
|
165
|
-
*
|
|
166
|
-
* @param {string} [x] the new pad character.
|
|
167
|
-
* @returns {pv.Format.number} <tt>this</tt> or the current pad character.
|
|
168
|
-
*/
|
|
169
|
-
format.fractionPad = function(x) {
|
|
170
|
-
if (arguments.length) {
|
|
171
|
-
padf = String(x);
|
|
172
|
-
return this;
|
|
173
|
-
}
|
|
174
|
-
return padf;
|
|
175
|
-
};
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* Sets or gets the character used as the decimal point, separating the
|
|
179
|
-
* integer and fraction parts of the number. The default decimal point is ".".
|
|
180
|
-
*
|
|
181
|
-
* @param {string} [x] the new decimal separator.
|
|
182
|
-
* @returns {pv.Format.number} <tt>this</tt> or the current decimal separator.
|
|
183
|
-
*/
|
|
184
|
-
format.decimal = function(x) {
|
|
185
|
-
if (arguments.length) {
|
|
186
|
-
decimal = String(x);
|
|
187
|
-
return this;
|
|
188
|
-
}
|
|
189
|
-
return decimal;
|
|
190
|
-
};
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* Sets or gets the character used as the group separator, grouping integer
|
|
194
|
-
* digits by thousands. The default decimal point is ",". Grouping can be
|
|
195
|
-
* disabled by using "" for the separator.
|
|
196
|
-
*
|
|
197
|
-
* @param {string} [x] the new group separator.
|
|
198
|
-
* @returns {pv.Format.number} <tt>this</tt> or the current group separator.
|
|
199
|
-
*/
|
|
200
|
-
format.group = function(x) {
|
|
201
|
-
if (arguments.length) {
|
|
202
|
-
group = x ? String(x) : "";
|
|
203
|
-
mins = mini + Math.floor(mini / 3) * group.length;
|
|
204
|
-
return this;
|
|
205
|
-
}
|
|
206
|
-
return group;
|
|
207
|
-
};
|
|
208
|
-
|
|
209
|
-
/**
|
|
210
|
-
* Sets or gets the negative prefix and suffix. The default negative prefix is
|
|
211
|
-
* "−", and the default negative suffix is the empty string.
|
|
212
|
-
*
|
|
213
|
-
* @param {string} [x] the negative prefix.
|
|
214
|
-
* @param {string} [y] the negative suffix.
|
|
215
|
-
* @returns {pv.Format.number} <tt>this</tt> or the current negative format.
|
|
216
|
-
*/
|
|
217
|
-
format.negativeAffix = function(x, y) {
|
|
218
|
-
if (arguments.length) {
|
|
219
|
-
np = String(x || "");
|
|
220
|
-
ns = String(y || "");
|
|
221
|
-
return this;
|
|
222
|
-
}
|
|
223
|
-
return [np, ns];
|
|
224
|
-
};
|
|
225
|
-
|
|
226
|
-
return format;
|
|
227
|
-
};
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Returns a time format of the given type, either "short" or "long".
|
|
3
|
-
*
|
|
4
|
-
* @class Represents a time format, converting between a <tt>number</tt>
|
|
5
|
-
* representing a duration in milliseconds, and a <tt>string</tt>. Two types of
|
|
6
|
-
* time formats are supported: "short" and "long". The <i>short</i> format type
|
|
7
|
-
* returns a string such as "3.3 days" or "12.1 minutes", while the <i>long</i>
|
|
8
|
-
* format returns "13:04:12" or similar.
|
|
9
|
-
*
|
|
10
|
-
* @extends pv.Format
|
|
11
|
-
* @param {string} type the type; "short" or "long".
|
|
12
|
-
*/
|
|
13
|
-
pv.Format.time = function(type) {
|
|
14
|
-
var pad = pv.Format.pad;
|
|
15
|
-
|
|
16
|
-
/*
|
|
17
|
-
* MILLISECONDS = 1
|
|
18
|
-
* SECONDS = 1e3
|
|
19
|
-
* MINUTES = 6e4
|
|
20
|
-
* HOURS = 36e5
|
|
21
|
-
* DAYS = 864e5
|
|
22
|
-
* WEEKS = 6048e5
|
|
23
|
-
* MONTHS = 2592e6
|
|
24
|
-
* YEARS = 31536e6
|
|
25
|
-
*/
|
|
26
|
-
|
|
27
|
-
/** @private */
|
|
28
|
-
function format(t) {
|
|
29
|
-
t = Number(t); // force conversion from Date
|
|
30
|
-
switch (type) {
|
|
31
|
-
case "short": {
|
|
32
|
-
if (t >= 31536e6) {
|
|
33
|
-
return (t / 31536e6).toFixed(1) + " years";
|
|
34
|
-
} else if (t >= 6048e5) {
|
|
35
|
-
return (t / 6048e5).toFixed(1) + " weeks";
|
|
36
|
-
} else if (t >= 864e5) {
|
|
37
|
-
return (t / 864e5).toFixed(1) + " days";
|
|
38
|
-
} else if (t >= 36e5) {
|
|
39
|
-
return (t / 36e5).toFixed(1) + " hours";
|
|
40
|
-
} else if (t >= 6e4) {
|
|
41
|
-
return (t / 6e4).toFixed(1) + " minutes";
|
|
42
|
-
}
|
|
43
|
-
return (t / 1e3).toFixed(1) + " seconds";
|
|
44
|
-
}
|
|
45
|
-
case "long": {
|
|
46
|
-
var a = [],
|
|
47
|
-
s = ((t % 6e4) / 1e3) >> 0,
|
|
48
|
-
m = ((t % 36e5) / 6e4) >> 0;
|
|
49
|
-
a.push(pad("0", 2, s));
|
|
50
|
-
if (t >= 36e5) {
|
|
51
|
-
var h = ((t % 864e5) / 36e5) >> 0;
|
|
52
|
-
a.push(pad("0", 2, m));
|
|
53
|
-
if (t >= 864e5) {
|
|
54
|
-
a.push(pad("0", 2, h));
|
|
55
|
-
a.push(Math.floor(t / 864e5).toFixed());
|
|
56
|
-
} else {
|
|
57
|
-
a.push(h.toFixed());
|
|
58
|
-
}
|
|
59
|
-
} else {
|
|
60
|
-
a.push(m.toFixed());
|
|
61
|
-
}
|
|
62
|
-
return a.reverse().join(":");
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Formats the specified time, returning the string representation.
|
|
69
|
-
*
|
|
70
|
-
* @function
|
|
71
|
-
* @name pv.Format.time.prototype.format
|
|
72
|
-
* @param {number} t the duration in milliseconds. May also be a <tt>Date</tt>.
|
|
73
|
-
* @returns {string} the formatted string.
|
|
74
|
-
*/
|
|
75
|
-
format.format = format;
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Parses the specified string, returning the time in milliseconds.
|
|
79
|
-
*
|
|
80
|
-
* @function
|
|
81
|
-
* @name pv.Format.time.prototype.parse
|
|
82
|
-
* @param {string} s a formatted string.
|
|
83
|
-
* @returns {number} the parsed duration in milliseconds.
|
|
84
|
-
*/
|
|
85
|
-
format.parse = function(s) {
|
|
86
|
-
switch (type) {
|
|
87
|
-
case "short": {
|
|
88
|
-
var re = /([0-9,.]+)\s*([a-z]+)/g, a, t = 0;
|
|
89
|
-
while (a = re.exec(s)) {
|
|
90
|
-
var f = parseFloat(a[0].replace(",", "")), u = 0;
|
|
91
|
-
switch (a[2].toLowerCase()) {
|
|
92
|
-
case "year": case "years": u = 31536e6; break;
|
|
93
|
-
case "week": case "weeks": u = 6048e5; break;
|
|
94
|
-
case "day": case "days": u = 864e5; break;
|
|
95
|
-
case "hour": case "hours": u = 36e5; break;
|
|
96
|
-
case "minute": case "minutes": u = 6e4; break;
|
|
97
|
-
case "second": case "seconds": u = 1e3; break;
|
|
98
|
-
}
|
|
99
|
-
t += f * u;
|
|
100
|
-
}
|
|
101
|
-
return t;
|
|
102
|
-
}
|
|
103
|
-
case "long": {
|
|
104
|
-
var a = s.replace(",", "").split(":").reverse(), t = 0;
|
|
105
|
-
if (a.length) t += parseFloat(a[0]) * 1e3;
|
|
106
|
-
if (a.length > 1) t += parseFloat(a[1]) * 6e4;
|
|
107
|
-
if (a.length > 2) t += parseFloat(a[2]) * 36e5;
|
|
108
|
-
if (a.length > 3) t += parseFloat(a[3]) * 864e5;
|
|
109
|
-
return t;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
return format;
|
|
115
|
-
};
|