rails-timeago 1.0.0 → 1.1.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/README.md +30 -5
- data/lib/rails-timeago/helper.rb +62 -14
- data/lib/rails-timeago/version.rb +1 -1
- data/spec/timeago_spec.rb +20 -0
- data/vendor/assets/javascripts/jquery.timeago.js +23 -22
- metadata +8 -8
data/README.md
CHANGED
@@ -21,6 +21,8 @@ To use bundled jQuery Timeago plugin add this require statement to your applicat
|
|
21
21
|
|
22
22
|
//=require rails-timeago
|
23
23
|
|
24
|
+
This will also convert all matching time tags on page load.
|
25
|
+
|
24
26
|
## Usage
|
25
27
|
|
26
28
|
Use the timeago_tag helper like any other regular tag helper:
|
@@ -31,22 +33,45 @@ Use the timeago_tag helper like any other regular tag helper:
|
|
31
33
|
### Available options:
|
32
34
|
|
33
35
|
* nojs
|
34
|
-
|
36
|
+
|
37
|
+
Add time ago in words as time tag content instead of absolute time.
|
38
|
+
(default: false)
|
35
39
|
|
36
40
|
* date_only
|
37
|
-
|
41
|
+
|
42
|
+
Only print date as tag content instead of full time.
|
43
|
+
(default: true)
|
38
44
|
|
39
45
|
* format
|
40
|
-
|
46
|
+
|
47
|
+
A time format for localize method used to format static time.
|
48
|
+
(default: default)
|
41
49
|
|
42
50
|
* limit
|
43
|
-
|
51
|
+
|
52
|
+
Set a limit for time ago tags. All dates before given limit will not be converted.
|
53
|
+
(default: 4.days.ago)
|
44
54
|
|
45
55
|
* force
|
46
|
-
|
56
|
+
|
57
|
+
Force time ago tag ignoring limit option.
|
58
|
+
(default: false)
|
59
|
+
|
60
|
+
* default
|
61
|
+
|
62
|
+
String that will be returned if time is nil.
|
63
|
+
(default: '-')
|
47
64
|
|
48
65
|
All other options will be given as options to the time tag helper.
|
49
66
|
|
67
|
+
The above options can be assigned globally as defaults using
|
68
|
+
|
69
|
+
Rails::Timeago.default_options :limit => proc { 20.days.ago }, :nojs => true
|
70
|
+
|
71
|
+
A global limit should always be given as a block that will be evaluated each time
|
72
|
+
the rails timeago_tag helper is called. That avoids the limit becoming smaller the
|
73
|
+
longer the application runs.
|
74
|
+
|
50
75
|
## License
|
51
76
|
|
52
77
|
[MIT License](http://www.opensource.org/licenses/mit-license.php)
|
data/lib/rails-timeago/helper.rb
CHANGED
@@ -4,17 +4,20 @@ module Rails
|
|
4
4
|
# Create a time tag usable for jQuery timeago plugin.
|
5
5
|
#
|
6
6
|
# timeago_tag Time.zone.now
|
7
|
-
# => ""
|
7
|
+
# => "<time datetime="2012-03-10T12:07:07+01:00" title="Sat, 10 Mar 2012 12:07:07 +0100" data-time-ago="2012-03-10T12:07:07+01:00">2012-03-10</time>"
|
8
8
|
#
|
9
9
|
# Available options:
|
10
10
|
# [:+nojs+]
|
11
11
|
# Add time ago in words as time tag content instead of absolute time.
|
12
|
+
# (default: false)
|
12
13
|
#
|
13
14
|
# [:+date_only+]
|
14
15
|
# Only print date as tag content instead of full time.
|
16
|
+
# (default: true)
|
15
17
|
#
|
16
18
|
# [:+format+]
|
17
19
|
# A time format for localize method used to format static time.
|
20
|
+
# (default: :default)
|
18
21
|
#
|
19
22
|
# [:+limit+]
|
20
23
|
# Set a limit for time ago tags. All dates before given limit will not be converted.
|
@@ -22,28 +25,28 @@ module Rails
|
|
22
25
|
#
|
23
26
|
# [:+force+]
|
24
27
|
# Force time ago tag ignoring limit option.
|
28
|
+
# (default: false)
|
29
|
+
#
|
30
|
+
# [:+default+]
|
31
|
+
# String that will be returned if time is nil.
|
32
|
+
# (default: '-')
|
25
33
|
#
|
26
34
|
# All other options will be given as options to tag helper.
|
27
35
|
#
|
28
36
|
def timeago_tag(time, html_options = {})
|
29
|
-
time_options =
|
30
|
-
:nojs => false,
|
31
|
-
:force => false,
|
32
|
-
:format => :default,
|
33
|
-
:limit => 4.days.ago,
|
34
|
-
:date_only => true
|
35
|
-
}
|
37
|
+
time_options = Rails::Timeago.default_options
|
36
38
|
|
37
|
-
time_options.merge
|
39
|
+
time_options = time_options.merge html_options.extract!(*time_options.keys.select{|k| html_options.include?(k)})
|
38
40
|
html_options.merge! :title => I18n.l(time, :format => time_options[:format])
|
39
41
|
|
40
|
-
|
41
|
-
html_options.reverse_merge!('data-time-ago' => time.iso8601)
|
42
|
+
return time_options[:default] if time.nil?
|
42
43
|
|
43
|
-
|
44
|
-
|
45
|
-
|
44
|
+
time_options[:limit] = time_options[:limit].call if time_options[:limit].is_a?(Proc)
|
45
|
+
|
46
|
+
if time_options[:force] or time_options[:limit].nil? or time_options[:limit] < time
|
47
|
+
html_options.merge!('data-time-ago' => time.iso8601)
|
46
48
|
end
|
49
|
+
time_tag time, timeago_tag_content(time, time_options), html_options
|
47
50
|
end
|
48
51
|
|
49
52
|
def timeago_tag_content(time, time_options = {}) # :nodoc:
|
@@ -53,5 +56,50 @@ module Rails
|
|
53
56
|
I18n.l time, :format => time_options[:format]
|
54
57
|
end
|
55
58
|
end
|
59
|
+
|
60
|
+
# Read or write global rails-timeago default options. If no options are given
|
61
|
+
# the current defaults will be returned.
|
62
|
+
#
|
63
|
+
# Available options:
|
64
|
+
# [:+nojs+]
|
65
|
+
# Add time ago in words as time tag content instead of absolute time.
|
66
|
+
# (default: false)
|
67
|
+
#
|
68
|
+
# [:+date_only+]
|
69
|
+
# Only print date as tag content instead of full time.
|
70
|
+
# (default: true)
|
71
|
+
#
|
72
|
+
# [:+format+]
|
73
|
+
# A time format for localize method used to format static time.
|
74
|
+
# (default: :default)
|
75
|
+
#
|
76
|
+
# [:+limit+]
|
77
|
+
# Set a limit for time ago tags. All dates before given limit will not be converted.
|
78
|
+
# Global limit should be given as a block to reevaluate limit each time timeago_tag is called.
|
79
|
+
# (default: proc { 4.days.ago })
|
80
|
+
#
|
81
|
+
# [:+force+]
|
82
|
+
# Force time ago tag ignoring limit option.
|
83
|
+
# (default: false)
|
84
|
+
#
|
85
|
+
# [:+default+]
|
86
|
+
# String that will be returned if time is nil.
|
87
|
+
# (default: '-')
|
88
|
+
#
|
89
|
+
def self.default_options(opts = nil)
|
90
|
+
@defaults ||= {
|
91
|
+
:nojs => false,
|
92
|
+
:force => false,
|
93
|
+
:format => :default,
|
94
|
+
:limit => proc { 4.days.ago },
|
95
|
+
:date_only => true,
|
96
|
+
:default => '-'
|
97
|
+
}
|
98
|
+
if opts
|
99
|
+
@defaults.merge! opts.extract!(*@defaults.keys.select{|k| opts.include?(k)})
|
100
|
+
else
|
101
|
+
@defaults
|
102
|
+
end
|
103
|
+
end
|
56
104
|
end
|
57
105
|
end
|
data/spec/timeago_spec.rb
CHANGED
@@ -61,4 +61,24 @@ describe Rails::Timeago::Helper do
|
|
61
61
|
it 'should pass html option to tag helper' do
|
62
62
|
@stub.timeago_tag(Time.now, :myattr => 'abc').should =~ /<time.*myattr="abc".*>.*<\/time>/
|
63
63
|
end
|
64
|
+
|
65
|
+
it "should allow to set global options" do
|
66
|
+
Rails::Timeago.default_options :format => :short, :limit => proc { 8.days.ago }
|
67
|
+
time = 7.days.ago
|
68
|
+
|
69
|
+
@stub.timeago_tag(time).
|
70
|
+
should include(">#{I18n.l time.to_date, :format => :short}<")
|
71
|
+
@stub.timeago_tag(time).
|
72
|
+
should =~ /<time.*data-time-ago=".*".*>.*<\/time>/
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should allow to override global options" do
|
76
|
+
Rails::Timeago.default_options :format => :short, :limit => proc { 8.days.ago }
|
77
|
+
time = 7.days.ago
|
78
|
+
|
79
|
+
@stub.timeago_tag(time, :format => :long).
|
80
|
+
should include(">#{I18n.l time.to_date, :format => :long}<")
|
81
|
+
@stub.timeago_tag(time, :limit => 4.days.ago).
|
82
|
+
should_not =~ /<time.*data-time-ago=".*".*>.*<\/time>/
|
83
|
+
end
|
64
84
|
end
|
@@ -1,18 +1,18 @@
|
|
1
1
|
/**
|
2
|
-
* Timeago is a jQuery plugin that makes it easy to support automatically
|
3
|
-
* updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago").
|
4
|
-
*
|
5
|
-
* @name timeago
|
6
|
-
* @version 0.
|
7
|
-
* @requires jQuery v1.2.3+
|
8
|
-
* @author Ryan McGeary
|
9
|
-
* @license MIT License - http://www.opensource.org/licenses/mit-license.php
|
10
|
-
*
|
11
|
-
* For usage and examples, visit:
|
12
|
-
* http://timeago.yarp.com/
|
13
|
-
*
|
14
|
-
* Copyright (c) 2008-2011, Ryan McGeary (ryanonjavascript -[at]- mcgeary [*dot*] org)
|
15
|
-
*/
|
2
|
+
* Timeago is a jQuery plugin that makes it easy to support automatically
|
3
|
+
* updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago").
|
4
|
+
*
|
5
|
+
* @name timeago
|
6
|
+
* @version 0.11
|
7
|
+
* @requires jQuery v1.2.3+
|
8
|
+
* @author Ryan McGeary
|
9
|
+
* @license MIT License - http://www.opensource.org/licenses/mit-license.php
|
10
|
+
*
|
11
|
+
* For usage and examples, visit:
|
12
|
+
* http://timeago.yarp.com/
|
13
|
+
*
|
14
|
+
* Copyright (c) 2008-2011, Ryan McGeary (ryanonjavascript -[at]- mcgeary [*dot*] org)
|
15
|
+
*/
|
16
16
|
(function($) {
|
17
17
|
$.timeago = function(timestamp) {
|
18
18
|
if (timestamp instanceof Date) {
|
@@ -45,6 +45,7 @@
|
|
45
45
|
months: "%d months",
|
46
46
|
year: "about a year",
|
47
47
|
years: "%d years",
|
48
|
+
wordSeparator: " ",
|
48
49
|
numbers: []
|
49
50
|
}
|
50
51
|
},
|
@@ -76,14 +77,14 @@
|
|
76
77
|
minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
|
77
78
|
minutes < 90 && substitute($l.hour, 1) ||
|
78
79
|
hours < 24 && substitute($l.hours, Math.round(hours)) ||
|
79
|
-
hours <
|
80
|
-
days < 30 && substitute($l.days, Math.
|
81
|
-
days <
|
82
|
-
days < 365 && substitute($l.months, Math.
|
83
|
-
years <
|
84
|
-
substitute($l.years, Math.
|
80
|
+
hours < 42 && substitute($l.day, 1) ||
|
81
|
+
days < 30 && substitute($l.days, Math.round(days)) ||
|
82
|
+
days < 45 && substitute($l.month, 1) ||
|
83
|
+
days < 365 && substitute($l.months, Math.round(days / 30)) ||
|
84
|
+
years < 1.5 && substitute($l.year, 1) ||
|
85
|
+
substitute($l.years, Math.round(years));
|
85
86
|
|
86
|
-
return $.trim([prefix, words, suffix].join(
|
87
|
+
return $.trim([prefix, words, suffix].join($l.wordSeparator));
|
87
88
|
},
|
88
89
|
parse: function(iso8601) {
|
89
90
|
var s = $.trim(iso8601);
|
@@ -143,4 +144,4 @@
|
|
143
144
|
// fix for IE6 suckage
|
144
145
|
document.createElement("abbr");
|
145
146
|
document.createElement("time");
|
146
|
-
}(jQuery));
|
147
|
+
}(jQuery));
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-timeago
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-03-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
requirement: &
|
16
|
+
requirement: &15835140 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '3.1'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *15835140
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: actionpack
|
27
|
-
requirement: &
|
27
|
+
requirement: &15834280 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '3.1'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *15834280
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &15833840 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *15833840
|
47
47
|
description: jQuery Timeago helper for Rails 3
|
48
48
|
email:
|
49
49
|
- jan.graichen@altimos.de
|