Skip to content

A Rails helper for time tags that can be used with the jQuery Timeago plugin.

License

Notifications You must be signed in to change notification settings

jgraichen/rails-timeago

Folders and files

NameName
Last commit message
Last commit date
Feb 17, 2025
Aug 5, 2024
Jun 13, 2020
Aug 5, 2024
Jun 13, 2020
Feb 11, 2021
Mar 20, 2014
Aug 5, 2024
Mar 4, 2022
Jan 27, 2025
Feb 22, 2012
Oct 23, 2023
Feb 11, 2021
Oct 23, 2023
Jan 25, 2022

Repository files navigation

rails-timeago

Gem Version Build Status

rails-timeago provides a timeago_tag helper to create time tags usable for jQuery Timeago plugin.

Installation

Add this line to your Gemfile:

gem 'rails-timeago', '~> 2.0'

And then execute:

$ bundle

Or install it yourself as:

$ gem install rails-timeago

Use bundled JavaScript with Sprockets

Note: The bundled JavaScript can only be used with sprockets. Rails-webpacker cannot load scripts bundled with the gem. If you use rails-webpacker you need to install, load, and setup jquery-timeago on your own.

To use bundled jQuery Timeago plugin add this require statement to your application.js file:

//= require rails-timeago

This will also convert all matching time tags on page load.

Use the following to also include all available locale files:

//= require rails-timeago-all

If using a recent Rails with rails-ujs, jQuery might not be present anymore. You need to add jquery-rails to your Gemfile and load it, e.g.:

//= require jquery
//= require rails-timeago
//= require rails-timeago-all

Usage

Use the timeago_tag helper like any other regular tag helper:

<%= timeago_tag Time.zone.now limit: 10.days.ago %>

Available options:

date_only Only print date as tag content instead of full time. (default: true)

format A time format for localize method used to format static time. (default: default)

limit Set a limit for time ago tags. All dates before given limit will not be converted. (default: 4.days.ago)

force Force time ago tag ignoring limit option. (default: false)

default String that will be returned if time is nil. (default: '-')

title A string or block that will be used to create a title attribute for timeago tags. It set to nil or false no title attribute will be set. (default: proc { |time, options| I18n.l time, format: options[:format] })

All other options will be given as options to the time tag helper. The above options can be assigned globally as defaults using

Rails::Timeago.default_options limit: proc { 20.days.ago }

A global limit should always be given as a block that will be evaluated each time the rails timeago_tag helper is called. That avoids the limit becoming smaller the longer the application runs.

I18n

rails-timeago 2 ships with a modified version of jQuery timeago that allows to include all locale files at once and set the locale via an option or per element via the lang attribute:

<%= timeago_tag Time.zone.now, lang: :de %>

The following snippet will print a script tag that set the jQuery timeago locale according to your I18n.locale:

<%= timeago_script_tag %>

Arguments are passed to Rails' javascript_tag helper, e.g. to assign a CSP nonce: timeago_script_tag(nonce: true).

Just insert it in your application layout's html head. If you use another I18n framework for JavaScript you can also directly set jQuery.timeago.settings.lang. For example:

jQuery.timeago.settings.lang = $('html').attr('lang')

Do not forget to require the needed locale files by either require rails-timeago-all in your application.js file or require specific locale files:

//= require locales/jquery.timeago.de.js
//= require locales/jquery.timeago.ru.js

Note: English is included in jQuery timeago library, but can be easily override by include an own file that defines jQuery.timeago.settings.strings["en"]. See a locale file for more details.

rails-timeago includes locale files for the following locales taken from jQuery Timeago.

Your customized jQuery locale files must be changed to work with rails-timeago 2. Instead of defining your locale strings as jQuery.timeago.settings.strings you need to define them like this:

jQuery.timeago.settings.strings["en"] = {
    ...
}

License

MIT License

Copyright (c) 2014, Jan Graichen