jekyll-timeago 0.4.2 → 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/README.md +53 -2
- data/_config.yml.example +17 -0
- data/jekyll-timeago.gemspec +2 -2
- data/lib/jekyll/timeago.rb +52 -15
- data/lib/jekyll/timeago/version.rb +1 -1
- metadata +8 -11
data/README.md
CHANGED
@@ -1,11 +1,29 @@
|
|
1
1
|
Jekyll-Timeago
|
2
2
|
==============
|
3
|
-
Custom and simple implementation of `timeago` date filter. Futures and personalization (level of detail) supported.
|
4
3
|
|
5
|
-
|
4
|
+
Custom and simple implementation of `timeago` date filter. Main features:
|
5
|
+
|
6
|
+
* Localization
|
7
|
+
* Future time
|
8
|
+
* Level of detail
|
9
|
+
|
10
|
+
In fact, `jekyll-timeago` is an extension of [Liquid](https://github.com/Shopify/liquid) filters, so you can use it in all your Liquid templates (Octopress as well).
|
6
11
|
|
7
12
|
|
8
13
|
## Installation
|
14
|
+
|
15
|
+
You have 3 options for installing the plugin:
|
16
|
+
|
17
|
+
**Via Jekyll plugin system**
|
18
|
+
|
19
|
+
In your `_config.yml` file, add a new array with the key gems and the values of the gem names of the plugins you’d like to use. In this case:
|
20
|
+
|
21
|
+
```
|
22
|
+
gems: [jekyll-timeago]
|
23
|
+
```
|
24
|
+
|
25
|
+
**Via Bundler**
|
26
|
+
|
9
27
|
Add this gem to your `Gemfile` and run `bundle`:
|
10
28
|
|
11
29
|
```
|
@@ -18,10 +36,13 @@ To use this filter, just add the following to the top of another plugin (found u
|
|
18
36
|
require 'jekyll/timeago'
|
19
37
|
```
|
20
38
|
|
39
|
+
**Manually**
|
40
|
+
|
21
41
|
Alternatively, you can simply copy [this file](https://github.com/markets/jekyll-timeago/blob/master/lib/jekyll/timeago.rb) directly into your `_plugins/` directory! :)
|
22
42
|
|
23
43
|
|
24
44
|
## Usage
|
45
|
+
|
25
46
|
```html
|
26
47
|
<span>{{ page.date | timeago }}</span>
|
27
48
|
<h2>{{ page.title }}</h2>
|
@@ -32,13 +53,41 @@ Alternatively, you can simply copy [this file](https://github.com/markets/jekyll
|
|
32
53
|
```
|
33
54
|
|
34
55
|
### Customization
|
56
|
+
|
35
57
|
You can personalize the level of detail (from 1 up to 4, 2 by default) passing a parameter:
|
58
|
+
|
36
59
|
```html
|
37
60
|
<span>{{ page.date | timeago: 4 }}</span>
|
38
61
|
```
|
39
62
|
|
63
|
+
## Localization
|
64
|
+
|
65
|
+
This plugin allows you to localize the strings needed to build the time ago sentences. For do this, you must add some extra keys to your `_config.yml`. You can simply copy them from [this example file](https://github.com/markets/jekyll-timeago/blob/master/_config.yml.example) and translate it to your site's language. Sample:
|
66
|
+
|
67
|
+
```
|
68
|
+
jekyll_timeago:
|
69
|
+
today: 'today'
|
70
|
+
yesterday: 'yesterday'
|
71
|
+
tomorrow: 'tomorrow'
|
72
|
+
and: 'and'
|
73
|
+
suffix: 'ago'
|
74
|
+
prefix: ''
|
75
|
+
suffix_future: 'in'
|
76
|
+
prefix_future: ''
|
77
|
+
years: 'years'
|
78
|
+
year: 'year'
|
79
|
+
months: 'months'
|
80
|
+
month: 'month'
|
81
|
+
weeks: 'weeks'
|
82
|
+
week: 'week'
|
83
|
+
days: 'days'
|
84
|
+
day: 'day'
|
85
|
+
```
|
86
|
+
|
40
87
|
## Output Examples
|
88
|
+
|
41
89
|
Default behavior:
|
90
|
+
|
42
91
|
```ruby
|
43
92
|
> timeago(Date.today)
|
44
93
|
=> "today"
|
@@ -59,6 +108,7 @@ Default behavior:
|
|
59
108
|
```
|
60
109
|
|
61
110
|
Change level of detail to get higher or lower granularity:
|
111
|
+
|
62
112
|
```ruby
|
63
113
|
> timeago(Date.today - 500.days) # default
|
64
114
|
=> "1 year ago and 4 months ago"
|
@@ -71,4 +121,5 @@ Change level of detail to get higher or lower granularity:
|
|
71
121
|
```
|
72
122
|
|
73
123
|
## License
|
124
|
+
|
74
125
|
Copyright (c) 2013 Marc Anguera. Unscoped Associations is released under the [MIT](http://opensource.org/licenses/MIT) License.
|
data/_config.yml.example
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
jekyll_timeago:
|
2
|
+
today: 'today'
|
3
|
+
yesterday: 'yesterday'
|
4
|
+
tomorrow: 'tomorrow'
|
5
|
+
and: 'and'
|
6
|
+
suffix: 'ago'
|
7
|
+
prefix: ''
|
8
|
+
suffix_future: 'in'
|
9
|
+
prefix_future: ''
|
10
|
+
years: 'years'
|
11
|
+
year: 'year'
|
12
|
+
months: 'months'
|
13
|
+
month: 'month'
|
14
|
+
weeks: 'weeks'
|
15
|
+
week: 'week'
|
16
|
+
days: 'days'
|
17
|
+
day: 'day'
|
data/jekyll-timeago.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Jekyll::Timeago::VERSION
|
9
9
|
spec.authors = ["markets"]
|
10
10
|
spec.email = ["srmarc.ai@gmail.com"]
|
11
|
-
spec.description = %q{Custom timeago filter for Jekyll (Liquid filter)}
|
12
|
-
spec.summary = %q{Custom timeago filter for Jekyll (Liquid filter)}
|
11
|
+
spec.description = %q{Custom timeago filter for Jekyll (Liquid filter). Localization and futures supported.}
|
12
|
+
spec.summary = %q{Custom timeago filter for Jekyll (Liquid filter). Localization and futures supported.}
|
13
13
|
spec.homepage = "https://github.com/markets/jekyll-timeago"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
data/lib/jekyll/timeago.rb
CHANGED
@@ -6,8 +6,8 @@ module Jekyll
|
|
6
6
|
DAYS_PER = {
|
7
7
|
:days => 1,
|
8
8
|
:weeks => 7,
|
9
|
-
:months =>
|
10
|
-
:years => 365
|
9
|
+
:months => 30,
|
10
|
+
:years => 365
|
11
11
|
}
|
12
12
|
|
13
13
|
# Max level of detail
|
@@ -20,6 +20,15 @@ module Jekyll
|
|
20
20
|
DEFAULT_DEPTH_LEVEL = 2
|
21
21
|
|
22
22
|
def timeago(input, depth = DEFAULT_DEPTH_LEVEL)
|
23
|
+
validate!(input, depth)
|
24
|
+
|
25
|
+
time_ago_to_now(input, depth)
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
# Validates inputs
|
31
|
+
def validate!(input, depth)
|
23
32
|
unless depth_allowed?(depth)
|
24
33
|
raise "Invalid depth level: #{depth.inspect}"
|
25
34
|
end
|
@@ -27,27 +36,55 @@ module Jekyll
|
|
27
36
|
unless input.is_a?(Date) || input.is_a?(Time)
|
28
37
|
raise "Invalid input type: #{input.inspect}"
|
29
38
|
end
|
39
|
+
end
|
30
40
|
|
31
|
-
|
32
|
-
|
41
|
+
# Get plugin configuration from site. Returns an empty hash if not provided.
|
42
|
+
def config
|
43
|
+
@config ||= Jekyll.configuration({}).fetch('jekyll_timeago', {})
|
33
44
|
end
|
34
45
|
|
35
|
-
|
46
|
+
def strings
|
47
|
+
{
|
48
|
+
:today => config['day'] || 'today',
|
49
|
+
:yesterday => config['yesterday'] || 'yesterday',
|
50
|
+
:tomorrow => config['tomorrow'] || 'tomorrow',
|
51
|
+
:and => config['and'] ||'and',
|
52
|
+
:suffix => config['suffix'] || 'ago',
|
53
|
+
:prefix => config['prefix'] || '',
|
54
|
+
:suffix_future => config['suffix_future'] || '',
|
55
|
+
:prefix_future => config['prefix_future'] || 'in',
|
56
|
+
:years => config['years'] || 'years',
|
57
|
+
:year => config['year'] || 'year',
|
58
|
+
:months => config['months'] || 'months',
|
59
|
+
:month => config['month'] || 'month',
|
60
|
+
:weeks => config['weeks'] || 'weeks',
|
61
|
+
:week => config['week'] || 'week',
|
62
|
+
:days => config['days'] || 'days',
|
63
|
+
:day => config['day'] || 'day'
|
64
|
+
}
|
65
|
+
end
|
66
|
+
|
67
|
+
def translate(key)
|
68
|
+
strings[key.to_sym]
|
69
|
+
end
|
70
|
+
alias_method :t, :translate
|
36
71
|
|
37
72
|
# Days passed to time ago sentence
|
38
|
-
def time_ago_to_now(
|
39
|
-
|
40
|
-
|
41
|
-
return
|
73
|
+
def time_ago_to_now(input_date, depth)
|
74
|
+
days_passed = (Date.today - Date.parse(input_date.to_s)).to_i
|
75
|
+
|
76
|
+
return t(:today) if days_passed == 0
|
77
|
+
return t(:yesterday) if days_passed == 1
|
78
|
+
return t(:tomorrow) if days_passed == -1
|
42
79
|
|
43
80
|
future = days_passed < 0
|
44
81
|
slots = build_time_ago_slots(days_passed.abs, depth)
|
45
82
|
sentence = to_sentence(slots)
|
46
83
|
|
47
84
|
if future
|
48
|
-
"
|
85
|
+
"#{t(:prefix_future)} #{sentence} #{t(:suffix_future)}".strip
|
49
86
|
else
|
50
|
-
"#{sentence}
|
87
|
+
"#{t(:prefix)} #{sentence} #{t(:suffix)}".strip
|
51
88
|
end
|
52
89
|
end
|
53
90
|
|
@@ -62,9 +99,9 @@ module Jekyll
|
|
62
99
|
days = DAYS_PER[time_range]
|
63
100
|
num_elems = days_passed / days
|
64
101
|
range_type = if num_elems == 1
|
65
|
-
time_range
|
102
|
+
t(time_range[0...-1]) # singularize key
|
66
103
|
else
|
67
|
-
time_range
|
104
|
+
t(time_range)
|
68
105
|
end
|
69
106
|
|
70
107
|
current_slots << "#{num_elems} #{range_type}"
|
@@ -96,10 +133,10 @@ module Jekyll
|
|
96
133
|
if slots.length == 1
|
97
134
|
slots[0]
|
98
135
|
else
|
99
|
-
"#{slots[0...-1].join(', ')} and #{slots[-1]}"
|
136
|
+
"#{slots[0...-1].join(', ')} #{t(:and)} #{slots[-1]}"
|
100
137
|
end
|
101
138
|
end
|
102
139
|
end
|
103
140
|
end
|
104
141
|
|
105
|
-
Liquid::Template.register_filter(Jekyll::Timeago)
|
142
|
+
Liquid::Template.register_filter(Jekyll::Timeago) if defined?(Liquid)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-timeago
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-01-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -43,7 +43,8 @@ dependencies:
|
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
|
-
description: Custom timeago filter for Jekyll (Liquid filter)
|
46
|
+
description: Custom timeago filter for Jekyll (Liquid filter). Localization and futures
|
47
|
+
supported.
|
47
48
|
email:
|
48
49
|
- srmarc.ai@gmail.com
|
49
50
|
executables: []
|
@@ -54,6 +55,7 @@ files:
|
|
54
55
|
- Gemfile
|
55
56
|
- README.md
|
56
57
|
- Rakefile
|
58
|
+
- _config.yml.example
|
57
59
|
- jekyll-timeago.gemspec
|
58
60
|
- lib/jekyll/timeago.rb
|
59
61
|
- lib/jekyll/timeago/version.rb
|
@@ -70,22 +72,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
70
72
|
- - ! '>='
|
71
73
|
- !ruby/object:Gem::Version
|
72
74
|
version: '0'
|
73
|
-
segments:
|
74
|
-
- 0
|
75
|
-
hash: 1046143283
|
76
75
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
76
|
none: false
|
78
77
|
requirements:
|
79
78
|
- - ! '>='
|
80
79
|
- !ruby/object:Gem::Version
|
81
80
|
version: '0'
|
82
|
-
segments:
|
83
|
-
- 0
|
84
|
-
hash: 1046143283
|
85
81
|
requirements: []
|
86
82
|
rubyforge_project:
|
87
|
-
rubygems_version: 1.8.
|
83
|
+
rubygems_version: 1.8.23
|
88
84
|
signing_key:
|
89
85
|
specification_version: 3
|
90
|
-
summary: Custom timeago filter for Jekyll (Liquid filter)
|
86
|
+
summary: Custom timeago filter for Jekyll (Liquid filter). Localization and futures
|
87
|
+
supported.
|
91
88
|
test_files: []
|