[Pkg-javascript-commits] [libjs-jquery-timeago] 01/02: Imported Upstream version 1.4.1

Praveen Arimbrathodiyil praveen at moszumanska.debian.org
Tue Sep 9 15:39:15 UTC 2014


This is an automated email from the git hooks/post-receive script.

praveen pushed a commit to branch master
in repository libjs-jquery-timeago.

commit ce9995abaab987eab4e66a64b6128a8a32e3badf
Author: Praveen Arimbrathodiyil <praveen at debian.org>
Date:   Tue Sep 9 21:06:54 2014 +0530

    Imported Upstream version 1.4.1
---
 .gitignore                         |   3 +
 CNAME                              |   1 +
 CONTRIBUTING.md                    |  37 ++
 LICENSE.txt                        |  22 ++
 README.markdown                    |  93 +++++
 Rakefile                           |  17 +
 bower.json                         |  13 +
 clock.png                          | Bin 0 -> 5530 bytes
 contrib/timeago-koext.js           |  14 +
 index.html                         | 221 ++++++++++++
 jquery.timeago.js                  | 214 ++++++++++++
 locales/README.md                  |  27 ++
 locales/jquery.timeago.ar.js       |  96 ++++++
 locales/jquery.timeago.bg.js       |  18 +
 locales/jquery.timeago.bs.js       |  49 +++
 locales/jquery.timeago.ca.js       |  18 +
 locales/jquery.timeago.cs.js       |  18 +
 locales/jquery.timeago.cy.js       |  20 ++
 locales/jquery.timeago.da.js       |  18 +
 locales/jquery.timeago.de.js       |  18 +
 locales/jquery.timeago.el.js       |  18 +
 locales/jquery.timeago.en-short.js |  20 ++
 locales/jquery.timeago.en.js       |  20 ++
 locales/jquery.timeago.es-short.js |  20 ++
 locales/jquery.timeago.es.js       |  18 +
 locales/jquery.timeago.et.js       |  18 +
 locales/jquery.timeago.fa.js       |  22 ++
 locales/jquery.timeago.fi.js       |  28 ++
 locales/jquery.timeago.fr-short.js |  16 +
 locales/jquery.timeago.fr.js       |  17 +
 locales/jquery.timeago.gl.js       |  18 +
 locales/jquery.timeago.he.js       |  18 +
 locales/jquery.timeago.hr.js       |  49 +++
 locales/jquery.timeago.hu.js       |  18 +
 locales/jquery.timeago.hy.js       |  18 +
 locales/jquery.timeago.id.js       |  18 +
 locales/jquery.timeago.is.js       |  19 +
 locales/jquery.timeago.it.js       |  16 +
 locales/jquery.timeago.ja.js       |  19 +
 locales/jquery.timeago.jv.js       |  18 +
 locales/jquery.timeago.ko.js       |  17 +
 locales/jquery.timeago.lt.js       |  20 ++
 locales/jquery.timeago.mk.js       |  20 ++
 locales/jquery.timeago.nl.js       |  20 ++
 locales/jquery.timeago.no.js       |  18 +
 locales/jquery.timeago.pl.js       |  31 ++
 locales/jquery.timeago.pt-br.js    |  18 +
 locales/jquery.timeago.pt.js       |  16 +
 locales/jquery.timeago.ro.js       |  18 +
 locales/jquery.timeago.rs.js       |  49 +++
 locales/jquery.timeago.ru.js       |  34 ++
 locales/jquery.timeago.sk.js       |  18 +
 locales/jquery.timeago.sl.js       |  44 +++
 locales/jquery.timeago.sv.js       |  18 +
 locales/jquery.timeago.th.js       |  20 ++
 locales/jquery.timeago.tr.js       |  16 +
 locales/jquery.timeago.uk.js       |  34 ++
 locales/jquery.timeago.uz.js       |  19 +
 locales/jquery.timeago.vi.js       |  20 ++
 locales/jquery.timeago.zh-CN.js    |  20 ++
 locales/jquery.timeago.zh-TW.js    |  20 ++
 test/index.html                    | 690 +++++++++++++++++++++++++++++++++++++
 test/test_helpers.js               | 179 ++++++++++
 timeago.jquery.json                |  30 ++
 vendor/cache/fssm-0.2.0.gem        | Bin 0 -> 24576 bytes
 65 files changed, 2714 insertions(+)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..96d8e0d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+.bundle
+vendor/ruby
+public
diff --git a/CNAME b/CNAME
new file mode 100644
index 0000000..0e83d43
--- /dev/null
+++ b/CNAME
@@ -0,0 +1 @@
+timeago.yarp.com
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..accb164
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,37 @@
+## Want to Contribute?
+
+Found an issue? Thank you for helping out by reporting it. Please describe the
+problem, what you tried, what you expected to see, and what you actually
+experienced. Please [re-read the documentation](http://timeago.yarp.com/) to
+make sure you're using the API as designed, but if you found something that's
+broken, we really appreciate your efforts in letting us know. Bonus points for
+submitting a failing test case to help us diagnose and potentially fix the
+issue.
+
+## Want to Contribute?
+
+Awesome. We love help, but before getting started, please read:
+
+**[Don't "Push" Your Pull Requests](http://www.igvita.com/2011/12/19/dont-push-your-pull-requests/)**
+
+## Ready for a Pull-Request?
+
+1. Fork the repo.
+
+2. Run the tests. Run `rake` or open `open test/index.html`. We only take pull
+   requests with passing tests, and it's great to know that you started from a
+   clean slate.
+
+3. Add a test for your change. Only refactoring and documentation change
+  require no new tests. If you are adding functionality or fixing a bug, we
+  need a test!
+
+4. Make the test pass.
+
+5. Push to your fork (hopefully this comes from a topical branch) and submit a
+   pull request.
+
+At this point you're waiting on us. Please keep in mind that OSS maintainers
+are often very busy. We'll do our best to at least comment on issues and
+pull-requests as soon as possible, but sometimes life gets in the way.  We may
+also suggest some changes or improvements or alternatives.
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000..fbc801d
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright (c) 2008-2013 Ryan McGeary
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/README.markdown b/README.markdown
new file mode 100644
index 0000000..7b9419e
--- /dev/null
+++ b/README.markdown
@@ -0,0 +1,93 @@
+# timeago: a jQuery plugin
+
+Timeago is a jQuery plugin that makes it easy to support automatically updating
+fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago") from ISO 8601
+formatted dates and times embedded in your HTML (à la microformats).
+
+**If you like this project, please help by donating.**
+
+* Gittip: https://www.gittip.com/rmm5t/
+* Bitcoin: `1wzBnMjWVZfpiFMc5i2nzKT7sCBaZNfLK`
+
+## Usage
+
+First, load jQuery and the plugin:
+
+```html
+<script src="jquery.min.js" type="text/javascript"></script>
+<script src="jquery.timeago.js" type="text/javascript"></script>
+```
+
+Now, let's attach it to your timestamps on DOM ready - put this in the head
+section:
+
+```html
+<script type="text/javascript">
+   jQuery(document).ready(function() {
+     $("abbr.timeago").timeago();
+   });
+</script>
+```
+
+This will turn all abbr elements with a class of timeago and an ISO 8601
+timestamp in the title (conforming to the
+[datetime design pattern microformat](http://microformats.org/wiki/datetime-design-pattern)):
+
+```html
+<abbr class="timeago" title="2011-12-17T09:24:17Z">December 17, 2011</abbr>
+```
+
+into something like this:
+
+```html
+<abbr class="timeago" title="December 17, 2011">about 1 day ago</abbr>
+```
+
+HTML5 `<time>` elements are also supported:
+
+```html
+<time class="timeago" datetime="2011-12-17T09:24:17Z">December 17, 2011</time>
+```
+
+As time passes, the timestamps will automatically update.
+
+**For more usage and examples**: [http://timeago.yarp.com/](http://timeago.yarp.com/)
+
+**For different language configurations**: visit the [`locales`](https://github.com/rmm5t/jquery-timeago/tree/master/locales) directory.
+
+## Changes
+
+| Version | Notes                                                                           |
+|---------|---------------------------------------------------------------------------------|
+|   1.4.x | ([compare][compare-1.4]) Added allowPast setting                                |
+|   1.3.x | ([compare][compare-1.3]) Added updateFromDOM function; bug fixes; bower support |
+|   1.2.x | ([compare][compare-1.2]) Added cutoff setting                                   |
+|   1.1.x | ([compare][compare-1.1]) Added update function                                  |
+|   1.0.x | ([compare][compare-1.0]) locale updates; bug fixes; AMD wrapper                 |
+|  0.11.x | ([compare][compare-0.11]) natural rounding; locale updates;                     |
+|  0.10.x | ([compare][compare-0.10]) locale updates                                        |
+|   0.9.x | ([compare][compare-0.9]) microsecond support; bug fixes                         |
+|   0.8.x | ([compare][compare-0.8]) `<time>` element support; bug fixes                    |
+|   0.7.x | ([compare][compare-0.7]) locale function overrides; unit tests                  |
+|     ... | ...                                                                             |
+
+[compare-1.4]: https://github.com/rmm5t/jquery-timeago/compare/v1.3.2...v1.4.1
+[compare-1.3]: https://github.com/rmm5t/jquery-timeago/compare/v1.2.0...v1.3.2
+[compare-1.2]: https://github.com/rmm5t/jquery-timeago/compare/v1.1.0...v1.2.0
+[compare-1.1]: https://github.com/rmm5t/jquery-timeago/compare/v1.0.2...v1.1.0
+[compare-1.0]: https://github.com/rmm5t/jquery-timeago/compare/v0.11.4...v1.0.2
+[compare-0.11]: https://github.com/rmm5t/jquery-timeago/compare/v0.10.1...v0.11.4
+[compare-0.10]: https://github.com/rmm5t/jquery-timeago/compare/v0.9.3...v0.10.1
+[compare-0.9]: https://github.com/rmm5t/jquery-timeago/compare/v0.8.2...v0.9.3
+[compare-0.8]: https://github.com/rmm5t/jquery-timeago/compare/v0.7.2...v0.8.2
+[compare-0.7]: https://github.com/rmm5t/jquery-timeago/compare/v0.6.2...v0.7.2
+
+## Author
+
+[Ryan McGeary](http://ryan.mcgeary.org) ([@rmm5t](http://twitter.com/rmm5t))
+
+## Other
+
+[MIT License](http://www.opensource.org/licenses/mit-license.php)
+
+Copyright (c) 2008-2013, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org)
diff --git a/Rakefile b/Rakefile
new file mode 100644
index 0000000..4ae17bd
--- /dev/null
+++ b/Rakefile
@@ -0,0 +1,17 @@
+require "bundler/setup"
+
+task :default => :test
+
+desc "Publish \"marketing\" docs"
+task :publish do
+  sh("git rebase master gh-pages")
+  sh("git checkout master")
+  sh("git push origin master")
+  sh("git push origin gh-pages")
+  sh("git push --tags")
+end
+
+desc "Open your default browser with the test page"
+task :test do
+  sh("open test/index.html")
+end
diff --git a/bower.json b/bower.json
new file mode 100644
index 0000000..5bfb729
--- /dev/null
+++ b/bower.json
@@ -0,0 +1,13 @@
+{
+  "name": "jquery-timeago",
+  "version": "1.4.1",
+  "license": "MIT",
+  "main": "jquery.timeago.js",
+  "ignore": [
+    "test",
+    "vendor"
+  ],
+  "dependencies": {
+    "jquery": ">=1.4"
+  }
+}
diff --git a/clock.png b/clock.png
new file mode 100644
index 0000000..4225cef
Binary files /dev/null and b/clock.png differ
diff --git a/contrib/timeago-koext.js b/contrib/timeago-koext.js
new file mode 100644
index 0000000..bec4d13
--- /dev/null
+++ b/contrib/timeago-koext.js
@@ -0,0 +1,14 @@
+ko.bindingHandlers.timeago = {
+    init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
+        var value = valueAccessor();
+        var valueUnwrapped = ko.unwrap(value);
+        element.title = moment(valueUnwrapped).toISOString();
+        $(element).timeago();
+    },
+    update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
+        var value = valueAccessor();
+        var valueUnwrapped = ko.unwrap(value);
+        element.title = moment(valueUnwrapped).toISOString();
+        $(element).timeago('update', element.title);
+    }
+}
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..9df6513
--- /dev/null
+++ b/index.html
@@ -0,0 +1,221 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="microid" content="mailto+http:sha1:566841e568e84b46c92d2291b44b836dfddc5c42" />
+    <title>timeago: a jQuery plugin</title>
+    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
+    <script src="jquery.timeago.js" type="text/javascript"></script>
+    <script src="test/test_helpers.js" type="text/javascript"></script>
+    <script type="text/javascript">
+      jQuery(document).ready(function($) {
+        prepareDynamicDates();
+        $("abbr.timeago").timeago();
+
+        $("#prog_date").text(jQuery.timeago(new Date()));
+        $("#prog_string").text(jQuery.timeago("2008-07-17"));
+        $("#prog_element").text(jQuery.timeago("2008-07-20"));
+      });
+
+    </script>
+    <style>
+      * { margin: 0; padding: 0; }
+      body { font-family: Helvetica,Arial,sans-serif; color: #333; background-color: #ccc; font-size: 16px; line-height: 24px; }
+      h1 { margin: 0; font-size: 60px; line-height: 100px; text-align: center; }
+      h2 { margin: -30px 0 40px 50px; font-size: 20px; line-height: 20px; text-align: center; color: #999; }
+      h3 { margin: 24px 0 6px 0; font-size: 18px; line-height: 18px; border-bottom: 1px solid #ccc; }
+      h1 img { vertical-align: middle; }
+      p { margin: 0 0 24px 0; }
+      p.example { margin: 0 0 12px 0; }
+      p.how, p.last { margin: 0; }
+      ul { margin: 0 24px 24px; }
+      li { line-height: 24px; }
+      pre { background-color: #333; color: #fff; margin: 12px 0; font-size: 12px; padding: 0 6px; }
+      pre em { font-style: normal; background-color: #554; }
+      pre, tt { font-family: monaco,"courier new",mono; }
+      abbr { border-bottom: 1px dotted #333; }
+      tt { font-size: 14px; }
+      a { color: #06e; padding: 1px; }
+      em { font-style: normal; background-color: #feb }
+      a:hover { background-color: #06c; color: #fff; text-decoration: none; }
+      #content { margin:0 auto; padding: 24px; width:700px; background-color:#fff; border: 1px solid #999; border-width: 0 1px 1px 1px; }
+      #footer { margin:0 auto 24px; padding: 12px; width:700px; line-height: 24px; }
+      .help { font-size: 14px; color: #888; }
+    </style>
+  </head>
+  <body>
+    <div id="content">
+      <h1><img src="clock.png" /> timeago</h1>
+      <h2>a jQuery plugin</h2>
+
+      <h3>What?</h3>
+      <p>
+        Timeago is a jQuery plugin that makes it easy to support automatically updating fuzzy
+        timestamps (e.g. "4 minutes ago" or "about 1 day ago").  <a href="jquery.timeago.js">Download</a>, view
+        the examples, and enjoy.
+      </p>
+      <noscript><p class="example"><strong>Whoah, whoah, whoah. You see the irony here, don't you? You're looking for a jQuery plugin, yet you surf the Internet with JavaScript turned off. This confuses the Interwebs. Afterall, there might be some useful demos and such that you could enjoy, but instead, you're wasting your time reading this. I'm so sorry.</strong></p></noscript>
+      <p class="example">
+        You opened this page <abbr class="loaded timeago">when you opened the page</abbr>. <span class="help">(This will update every minute. Wait for it.)</span>
+      </p>
+      <p class="example">
+        This page was last modified <abbr class="modified timeago">sometime before now [browser might not support document.lastModified]</abbr>.
+      </p>
+      <p class="example">
+        Ryan was born <abbr class="timeago" title="1978-12-18T17:17:00Z">Dec 18, 1978</abbr>.
+      </p>
+
+      <h3>Why?</h3>
+      <p>Timeago was originally built for use with <a href="http://yarp.com">Yarp.com</a> to timestamp comments.</p>
+      <ul>
+        <li>Avoid timestamps dated "1 minute ago" even though the page was opened 10 minutes ago; <em>timeago refreshes automatically</em>.</li>
+        <li>You can <em>take full advantage of page caching</em> in your web applications, because the timestamps aren't calculated on the server.</li>
+        <li>You get to <em>use <a href="http://microformats.org/wiki/datetime-design-pattern">microformats</a></em> like the cool kids.</li>
+      </ul>
+
+      <h3>How?</h3>
+      <p class="how">
+        First, load <a href="http://jquery.com/">jQuery</a> and the plugin:
+      </p>
+      <pre>
+<script src="jquery.min.js" type="text/javascript"></script>
+<script src="jquery.timeago.js" type="text/javascript"></script></pre>
+      <p class="how">
+        Now, let's attach it to your timestamps on DOM ready:
+      </p>
+      <pre>
+jQuery(document).ready(function() {
+  jQuery("abbr.timeago").timeago();
+});</pre>
+      <p class="how">
+        This will turn all <tt>abbr</tt> elements with a class
+        of <tt>timeago</tt> and an <a href="http://en.wikipedia.org/wiki/ISO_8601">ISO 8601</a> timestamp in the title:
+      </p>
+      <pre>
+<abbr class="<em>timeago</em>" title="<em>2008-07-17T09:24:17Z</em>">July 17, 2008</abbr></pre>
+      <p class="how">
+        into something like this:
+      </p>
+      <pre>
+<abbr class="timeago" title="July 17, 2008"><em><abbr class="timeago" title="2008-07-17T09:24:17Z">time ago</abbr></em></abbr></pre>
+      <p>
+        which yields: <abbr class="timeago" title="2008-07-17T09:24:17Z">July 17, 2008</abbr>.  As time passes, the timestamps will automatically update.
+      </p>
+
+      <p class="how">
+        You can also use it programmatically:
+      </p>
+      <pre>
+jQuery.timeago(new Date());             //=> "<span id="prog_date"></span>"
+jQuery.timeago("2008-07-17");           //=> "<span id="prog_string"></span>"
+jQuery.timeago(jQuery("abbr#some_id")); //=> "<span id="prog_element"></span>"     // [title="2008-07-20"]</pre>
+
+      <p class="how">
+        To support timestamps in the future, use the <tt>allowFuture</tt> setting:
+      </p>
+      <pre>
+jQuery.timeago.settings.allowFuture = true;</pre>
+
+      <p class="how">
+        To disable timestamps in the past, use the <tt>allowPast</tt> setting.
+        This setting is set to true by default. When set to false, if the time is in the past then instead of displaying a message like "5 minutes ago" a static message will be displayed.
+        The staic message displayed can be configured with the <tt>strings.inPast</tt> setting:
+      </p>
+      <pre>
+jQuery.timeago.settings.strings.inPast = "time has elapsed";
+jQuery.timeago.settings.allowPast = false;</pre>
+
+      <h3>Excusez-moi?</h3>
+      <p>
+        Yes, timeago has locale/i18n/language support.  Here are some <a href="https://github.com/rmm5t/jquery-timeago/tree/master/locales">configuration examples</a>.  Please submit a <a href="https://github.com/rmm5t/jquery-timeago">GitHub pull request</a> for corrections or additional languages.
+      </p>
+
+      <h3>Where?</h3>
+      <p><a href="jquery.timeago.js">Download the "stable" release</a>.</p>
+      <p>
+        The code is hosted on
+        GitHub: <a href="http://github.com/rmm5t/jquery-timeago">http://github.com/rmm5t/jquery-timeago</a>.
+        Go on, live on the edge.
+      </p>
+
+      <h3>Who?</h3>
+      <p>
+        Timeago was built by <a href="http://ryan.mcgeary.org">Ryan McGeary</a>
+        (<a href="http://twitter.com/rmm5t">@rmm5t</a>) while standing on the
+        shoulders of giants.  John Resig wrote about
+        a <a href="http://ejohn.org/blog/javascript-pretty-date/">similar
+        approach</a>.  The verbiage was based on
+        the <tt>distance_of_time_in_words</tt> ActionView helper
+        in <a href="http://rubyonrails.org">Ruby on Rails</a>.
+      </p>
+
+      <h3>When?</h3>
+      <p>
+        Timeago was conceived <abbr class="timeago" title="2008-07-17T02:30:00-0500">on July 17, 2008</abbr>.  <span class="help">(Yup, that's powered by timeago too)</span>
+      </p>
+
+      <h3>What else?</h3>
+      <p class="example">
+        HTML5 has a new <tt>time</tt> tag and timeago supports it too.
+      </p>
+      <pre>
+<time class="<em>timeago</em>" datetime="<em>2008-07-17T09:24:17Z</em>">July 17, 2008</time></pre>
+      <p class="how">
+        Attach timeago like so:
+      </p>
+      <pre>
+jQuery(document).ready(function() {
+  jQuery("time.timeago").timeago();
+});</pre>
+
+      <p>
+        Are you concerned about time zone support? Don't be. Timeago handles
+        this too. As long as your timestamps are
+        in <a href="http://en.wikipedia.org/wiki/ISO_8601">ISO 8601</a> format
+        and include a
+        full <a href="http://en.wikipedia.org/wiki/ISO_8601#Time_zone_designators">time
+        zone designator</a> (±hhmm), everything should work out of the box
+        regardless of the time zone that your visitors live in.
+      </p>
+
+      <h3>Huh?</h3>
+      <p class="last">
+        Need a Rails helper to make those fancy microformat <tt>abbr</tt> tags?  Fine, here ya go:
+      </p>
+      <pre>
+def timeago(time, options = {})
+  options[:class] ||= "timeago"
+  content_tag(:abbr, time.to_s, options.merge(:title => time.getutc.iso8601)) if time
+end</pre>
+
+      <h3>Do you use Timeago?</h3>
+
+      <p>
+        Great! Please add your site to the list
+        of <a href="https://github.com/rmm5t/jquery-timeago/wiki/Sites-that-use-Timeago">Sites
+        that use Timeago</a>.
+      </p>
+
+    </div>
+    <div id="footer">
+      <div style="float:right;">
+        <a href="http://www.opensource.org/licenses/mit-license.php">MIT
+        License</a>
+      </div>
+      Copyright © 2008-2013 <a href="http://ryan.mcgeary.org">Ryan McGeary</a>
+      (<a href="http://twitter.com/rmm5t">@rmm5t</a>)
+    </div>
+
+    <a href="http://github.com/rmm5t/jquery-timeago"><img style="position: absolute; top: 0; right: 0; border: 0;" src="http://s3.amazonaws.com/github/ribbons/forkme_right_orange_ff7600.png" alt="Fork me on GitHub" /></a>
+
+    <script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+    </script>
+    <script type="text/javascript">
+    var pageTracker = _gat._getTracker("UA-2856277-2");
+    pageTracker._initData();
+    pageTracker._trackPageview();
+    </script>
+  </body>
+</html>
diff --git a/jquery.timeago.js b/jquery.timeago.js
new file mode 100644
index 0000000..483be57
--- /dev/null
+++ b/jquery.timeago.js
@@ -0,0 +1,214 @@
+/**
+ * Timeago is a jQuery plugin that makes it easy to support automatically
+ * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago").
+ *
+ * @name timeago
+ * @version 1.4.1
+ * @requires jQuery v1.2.3+
+ * @author Ryan McGeary
+ * @license MIT License - http://www.opensource.org/licenses/mit-license.php
+ *
+ * For usage and examples, visit:
+ * http://timeago.yarp.com/
+ *
+ * Copyright (c) 2008-2013, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org)
+ */
+
+(function (factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module.
+    define(['jquery'], factory);
+  } else {
+    // Browser globals
+    factory(jQuery);
+  }
+}(function ($) {
+  $.timeago = function(timestamp) {
+    if (timestamp instanceof Date) {
+      return inWords(timestamp);
+    } else if (typeof timestamp === "string") {
+      return inWords($.timeago.parse(timestamp));
+    } else if (typeof timestamp === "number") {
+      return inWords(new Date(timestamp));
+    } else {
+      return inWords($.timeago.datetime(timestamp));
+    }
+  };
+  var $t = $.timeago;
+
+  $.extend($.timeago, {
+    settings: {
+      refreshMillis: 60000,
+      allowPast: true,
+      allowFuture: false,
+      localeTitle: false,
+      cutoff: 0,
+      strings: {
+        prefixAgo: null,
+        prefixFromNow: null,
+        suffixAgo: "ago",
+        suffixFromNow: "from now",
+        inPast: 'any moment now',
+        seconds: "less than a minute",
+        minute: "about a minute",
+        minutes: "%d minutes",
+        hour: "about an hour",
+        hours: "about %d hours",
+        day: "a day",
+        days: "%d days",
+        month: "about a month",
+        months: "%d months",
+        year: "about a year",
+        years: "%d years",
+        wordSeparator: " ",
+        numbers: []
+      }
+    },
+
+    inWords: function(distanceMillis) {
+      if(!this.settings.allowPast && ! this.settings.allowFuture) {
+          throw 'timeago allowPast and allowFuture settings can not both be set to false.';
+      }
+
+      var $l = this.settings.strings;
+      var prefix = $l.prefixAgo;
+      var suffix = $l.suffixAgo;
+      if (this.settings.allowFuture) {
+        if (distanceMillis < 0) {
+          prefix = $l.prefixFromNow;
+          suffix = $l.suffixFromNow;
+        }
+      }
+
+      if(!this.settings.allowPast && distanceMillis >= 0) {
+        return this.settings.strings.inPast;
+      }
+
+      var seconds = Math.abs(distanceMillis) / 1000;
+      var minutes = seconds / 60;
+      var hours = minutes / 60;
+      var days = hours / 24;
+      var years = days / 365;
+
+      function substitute(stringOrFunction, number) {
+        var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
+        var value = ($l.numbers && $l.numbers[number]) || number;
+        return string.replace(/%d/i, value);
+      }
+
+      var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
+        seconds < 90 && substitute($l.minute, 1) ||
+        minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
+        minutes < 90 && substitute($l.hour, 1) ||
+        hours < 24 && substitute($l.hours, Math.round(hours)) ||
+        hours < 42 && substitute($l.day, 1) ||
+        days < 30 && substitute($l.days, Math.round(days)) ||
+        days < 45 && substitute($l.month, 1) ||
+        days < 365 && substitute($l.months, Math.round(days / 30)) ||
+        years < 1.5 && substitute($l.year, 1) ||
+        substitute($l.years, Math.round(years));
+
+      var separator = $l.wordSeparator || "";
+      if ($l.wordSeparator === undefined) { separator = " "; }
+      return $.trim([prefix, words, suffix].join(separator));
+    },
+
+    parse: function(iso8601) {
+      var s = $.trim(iso8601);
+      s = s.replace(/\.\d+/,""); // remove milliseconds
+      s = s.replace(/-/,"/").replace(/-/,"/");
+      s = s.replace(/T/," ").replace(/Z/," UTC");
+      s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400
+      s = s.replace(/([\+\-]\d\d)$/," $100"); // +09 -> +0900
+      return new Date(s);
+    },
+    datetime: function(elem) {
+      var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title");
+      return $t.parse(iso8601);
+    },
+    isTime: function(elem) {
+      // jQuery's `is()` doesn't play well with HTML5 in IE
+      return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time");
+    }
+  });
+
+  // functions that can be called via $(el).timeago('action')
+  // init is default when no action is given
+  // functions are called with context of a single element
+  var functions = {
+    init: function(){
+      var refresh_el = $.proxy(refresh, this);
+      refresh_el();
+      var $s = $t.settings;
+      if ($s.refreshMillis > 0) {
+        this._timeagoInterval = setInterval(refresh_el, $s.refreshMillis);
+      }
+    },
+    update: function(time){
+      var parsedTime = $t.parse(time);
+      $(this).data('timeago', { datetime: parsedTime });
+      if($t.settings.localeTitle) $(this).attr("title", parsedTime.toLocaleString());
+      refresh.apply(this);
+    },
+    updateFromDOM: function(){
+      $(this).data('timeago', { datetime: $t.parse( $t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title") ) });
+      refresh.apply(this);
+    },
+    dispose: function () {
+      if (this._timeagoInterval) {
+        window.clearInterval(this._timeagoInterval);
+        this._timeagoInterval = null;
+      }
+    }
+  };
+
+  $.fn.timeago = function(action, options) {
+    var fn = action ? functions[action] : functions.init;
+    if(!fn){
+      throw new Error("Unknown function name '"+ action +"' for timeago");
+    }
+    // each over objects here and call the requested function
+    this.each(function(){
+      fn.call(this, options);
+    });
+    return this;
+  };
+
+  function refresh() {
+    var data = prepareData(this);
+    var $s = $t.settings;
+
+    if (!isNaN(data.datetime)) {
+      if ( $s.cutoff == 0 || Math.abs(distance(data.datetime)) < $s.cutoff) {
+        $(this).text(inWords(data.datetime));
+      }
+    }
+    return this;
+  }
+
+  function prepareData(element) {
+    element = $(element);
+    if (!element.data("timeago")) {
+      element.data("timeago", { datetime: $t.datetime(element) });
+      var text = $.trim(element.text());
+      if ($t.settings.localeTitle) {
+        element.attr("title", element.data('timeago').datetime.toLocaleString());
+      } else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) {
+        element.attr("title", text);
+      }
+    }
+    return element.data("timeago");
+  }
+
+  function inWords(date) {
+    return $t.inWords(distance(date));
+  }
+
+  function distance(date) {
+    return (new Date().getTime() - date.getTime());
+  }
+
+  // fix for IE6 suckage
+  document.createElement("abbr");
+  document.createElement("time");
+}));
diff --git a/locales/README.md b/locales/README.md
new file mode 100644
index 0000000..7557112
--- /dev/null
+++ b/locales/README.md
@@ -0,0 +1,27 @@
+# Locale override examples for timeago
+
+You can represent time statements in most western languages where
+a prefix and/or suffix is used.
+
+The default case is to use suffix only (as in English), which you
+do by providing the `suffixAgo` and `suffixFromNow` settings in
+the strings hash (earlier versions of timeago used the deprecated
+`ago` and `fromNow` options). If present, they are used.
+
+    2 minutes [suffixAgo]
+    2 minutes [suffixFromNow]
+
+In case you want to use prefix only instead of
+suffix (e.g. Greek), you provide the `prefixAgo` and
+`prefixFromNow` options in the strings hash and leave `suffixAgo`
+and `suffixFromNow` empty or null.
+
+    [prefixAgo] 2 minutes
+    [prefixFromNow] 2 minutes
+
+For languages where you want to use a prefix only for future
+tense and prefix/suffix for past tense (for example swedish), you
+can combine the prefix and suffixes as needed.
+
+    [prefixAgo] 2 minutes [suffixAgo]
+    [prefixFromNow] 2 minutes
diff --git a/locales/jquery.timeago.ar.js b/locales/jquery.timeago.ar.js
new file mode 100644
index 0000000..9e73d74
--- /dev/null
+++ b/locales/jquery.timeago.ar.js
@@ -0,0 +1,96 @@
+(function() {
+  function numpf(n, a) {
+    return a[plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5];
+  }
+
+jQuery.timeago.settings.strings = {
+    prefixAgo: "منذ",
+    prefixFromNow: "بعد",
+    suffixAgo: null,
+    suffixFromNow: null, // null OR "من الآن"
+    second: function(value) { return numpf(value, [
+      'أقل من ثانية',
+       'ثانية واحدة',
+       'ثانيتين',
+       '%d ثوانٍ',
+       '%d ثانية',
+       '%d ثانية']); },
+    seconds: function(value) { return numpf(value, [
+      'أقل من ثانية',
+       'ثانية واحدة',
+       'ثانيتين',
+       '%d ثوانٍ',
+       '%d ثانية',
+       '%d ثانية']); },
+    minute: function(value) { return numpf(value, [
+      'أقل من دقيقة',
+       'دقيقة واحدة',
+       'دقيقتين',
+       '%d دقائق',
+       '%d دقيقة',
+       'دقيقة']); },
+    minutes: function(value) { return numpf(value, [
+      'أقل من دقيقة',
+       'دقيقة واحدة',
+       'دقيقتين',
+       '%d دقائق',
+       '%d دقيقة',
+       'دقيقة']); },
+    hour:  function(value) { return numpf(value, [
+      'أقل من ساعة',
+       'ساعة واحدة',
+       'ساعتين',
+       '%d ساعات',
+       '%d ساعة',
+       '%d ساعة']); },
+    hours: function(value) { return numpf(value, [
+      'أقل من ساعة',
+       'ساعة واحدة',
+       'ساعتين',
+       '%d ساعات',
+       '%d ساعة',
+       '%d ساعة']); },
+    day:  function(value) { return numpf(value, [
+      'أقل من يوم',
+       'يوم واحد',
+       'يومين',
+       '%d أيام',
+       '%d يومًا',
+       '%d يوم']); },
+    days: function(value) { return numpf(value, [
+      'أقل من يوم',
+       'يوم واحد',
+       'يومين',
+       '%d أيام',
+       '%d يومًا',
+       '%d يوم']); },
+    month:  function(value) { return numpf(value, [
+      'أقل من شهر',
+       'شهر واحد',
+       'شهرين',
+       '%d أشهر',
+       '%d شهرًا',
+       '%d شهر']); },
+    months: function(value) { return numpf(value, [
+      'أقل من شهر',
+       'شهر واحد',
+       'شهرين',
+       '%d أشهر',
+       '%d شهرًا',
+       '%d شهر']); },
+    year:  function(value) { return numpf(value,  [
+      'أقل من عام',
+       'عام واحد',
+       '%d عامين',
+       '%d أعوام',
+       '%d عامًا']);
+     },
+    years: function(value) { return numpf(value,  [
+      'أقل من عام',
+       'عام واحد',
+       'عامين',
+       '%d أعوام',
+       '%d عامًا',
+       '%d عام']);}
+  };
+})();
diff --git a/locales/jquery.timeago.bg.js b/locales/jquery.timeago.bg.js
new file mode 100644
index 0000000..df6b865
--- /dev/null
+++ b/locales/jquery.timeago.bg.js
@@ -0,0 +1,18 @@
+// Bulgarian
+jQuery.timeago.settings.strings = {
+  prefixAgo: "преди",
+  prefixFromNow: "след",
+  suffixAgo: null,
+  suffixFromNow: null,
+  seconds: "по-малко от минута",
+  minute: "една минута",
+  minutes: "%d минути",
+  hour: "един час",
+  hours: "%d часа",
+  day: "един ден",
+  days: "%d дни",
+  month: "един месец",
+  months: "%d месеца",
+  year: "една година",
+  years: "%d години"
+};
\ No newline at end of file
diff --git a/locales/jquery.timeago.bs.js b/locales/jquery.timeago.bs.js
new file mode 100644
index 0000000..01530fe
--- /dev/null
+++ b/locales/jquery.timeago.bs.js
@@ -0,0 +1,49 @@
+// Bosnian
+(function() {
+  var numpf;
+
+  numpf = function(n, f, s, t) {
+    var n10;
+    n10 = n % 10;
+    if (n10 === 1 && (n === 1 || n > 20)) {
+      return f;
+    } else if (n10 > 1 && n10 < 5 && (n > 20 || n < 10)) {
+      return s;
+    } else {
+      return t;
+    }
+  };
+
+  jQuery.timeago.settings.strings = {
+    prefixAgo: "prije",
+    prefixFromNow: "za",
+    suffixAgo: null,
+    suffixFromNow: null,
+    second: "sekund",
+    seconds: function(value) {
+      return numpf(value, "%d sekund", "%d sekunde", "%d sekundi");
+    },
+    minute: "oko minut",
+    minutes: function(value) {
+      return numpf(value, "%d minut", "%d minute", "%d minuta");
+    },
+    hour: "oko sat",
+    hours: function(value) {
+      return numpf(value, "%d sat", "%d sata", "%d sati");
+    },
+    day: "oko jednog dana",
+    days: function(value) {
+      return numpf(value, "%d dan", "%d dana", "%d dana");
+    },
+    month: "mjesec dana",
+    months: function(value) {
+      return numpf(value, "%d mjesec", "%d mjeseca", "%d mjeseci");
+    },
+    year: "prije godinu dana ",
+    years: function(value) {
+      return numpf(value, "%d godinu", "%d godine", "%d godina");
+    },
+    wordSeparator: " "
+  };
+
+}).call(this);
\ No newline at end of file
diff --git a/locales/jquery.timeago.ca.js b/locales/jquery.timeago.ca.js
new file mode 100644
index 0000000..59014ea
--- /dev/null
+++ b/locales/jquery.timeago.ca.js
@@ -0,0 +1,18 @@
+// Catalan
+jQuery.timeago.settings.strings = {
+  prefixAgo: "fa",
+  prefixFromNow: "d'aqui a",
+  suffixAgo: null,
+  suffixFromNow: null,
+  seconds: "menys d'1 minut",
+  minute: "1 minut",
+  minutes: "uns %d minuts",
+  hour: "1 hora",
+  hours: "unes %d hores",
+  day: "1 dia",
+  days: "%d dies",
+  month: "aproximadament un mes",
+  months: "%d mesos",
+  year: "aproximadament un any",
+  years: "%d anys"
+};
\ No newline at end of file
diff --git a/locales/jquery.timeago.cs.js b/locales/jquery.timeago.cs.js
new file mode 100644
index 0000000..b713738
--- /dev/null
+++ b/locales/jquery.timeago.cs.js
@@ -0,0 +1,18 @@
+// Czech
+jQuery.timeago.settings.strings = {
+  prefixAgo: "před",
+  prefixFromNow: null,
+  suffixAgo: null,
+  suffixFromNow: null,
+  seconds: "méně než minutou",
+  minute: "minutou",
+  minutes: "%d minutami",
+  hour: "hodinou",
+  hours: "%d hodinami",
+  day: "1 dnem",
+  days: "%d dny",
+  month: "1 měsícem",
+  months: "%d měsíci",
+  year: "1 rokem",
+  years: "%d roky"
+};
\ No newline at end of file
diff --git a/locales/jquery.timeago.cy.js b/locales/jquery.timeago.cy.js
new file mode 100644
index 0000000..a285ff4
--- /dev/null
+++ b/locales/jquery.timeago.cy.js
@@ -0,0 +1,20 @@
+// Welsh
+jQuery.timeago.settings.strings = {
+  prefixAgo: null,
+  prefixFromNow: null,
+  suffixAgo: "yn ôl",
+  suffixFromNow: "o hyn",
+  seconds: "llai na munud",
+  minute: "am funud",
+  minutes: "%d munud",
+  hour: "tua awr",
+  hours: "am %d awr",
+  day: "y dydd",
+  days: "%d diwrnod",
+  month: "tua mis",
+  months: "%d mis",
+  year: "am y flwyddyn",
+  years: "%d blynedd",
+  wordSeparator: " ",
+  numbers: []
+};
diff --git a/locales/jquery.timeago.da.js b/locales/jquery.timeago.da.js
new file mode 100644
index 0000000..ff50e87
--- /dev/null
+++ b/locales/jquery.timeago.da.js
@@ -0,0 +1,18 @@
+// Danish
+jQuery.timeago.settings.strings = {
+  prefixAgo: "for",
+  prefixFromNow: "om",
+  suffixAgo: "siden",
+  suffixFromNow: "",
+  seconds: "mindre end et minut",
+  minute: "ca. et minut",
+  minutes: "%d minutter",
+  hour: "ca. en time",
+  hours: "ca. %d timer",
+  day: "en dag",
+  days: "%d dage",
+  month: "ca. en måned",
+  months: "%d måneder",
+  year: "ca. et år",
+  years: "%d år"
+};
\ No newline at end of file
diff --git a/locales/jquery.timeago.de.js b/locales/jquery.timeago.de.js
new file mode 100644
index 0000000..f10b06e
--- /dev/null
+++ b/locales/jquery.timeago.de.js
@@ -0,0 +1,18 @@
+// German
+jQuery.timeago.settings.strings = {
+  prefixAgo: "vor",
+  prefixFromNow: "in",
+  suffixAgo: "",
+  suffixFromNow: "",
+  seconds: "wenigen Sekunden",
+  minute: "etwa einer Minute",
+  minutes: "%d Minuten",
+  hour: "etwa einer Stunde",
+  hours: "%d Stunden",
+  day: "etwa einem Tag",
+  days: "%d Tagen",
+  month: "etwa einem Monat",
+  months: "%d Monaten",
+  year: "etwa einem Jahr",
+  years: "%d Jahren"
+};
\ No newline at end of file
diff --git a/locales/jquery.timeago.el.js b/locales/jquery.timeago.el.js
new file mode 100644
index 0000000..61aaafe
--- /dev/null
+++ b/locales/jquery.timeago.el.js
@@ -0,0 +1,18 @@
+// Greek
+jQuery.timeago.settings.strings = {
+  prefixAgo: "πριν",
+  prefixFromNow: "σε",
+  suffixAgo: "",
+  suffixFromNow: "",
+  seconds: "λιγότερο από ένα λεπτό",
+  minute: "περίπου ένα λεπτό",
+  minutes: "%d λεπτά",
+  hour: "περίπου μία ώρα",
+  hours: "περίπου %d ώρες",
+  day: "μία μέρα",
+  days: "%d μέρες",
+  month: "περίπου ένα μήνα",
+  months: "%d μήνες",
+  year: "περίπου ένα χρόνο",
+  years: "%d χρόνια"
+};
\ No newline at end of file
diff --git a/locales/jquery.timeago.en-short.js b/locales/jquery.timeago.en-short.js
new file mode 100644
index 0000000..4cab7ff
--- /dev/null
+++ b/locales/jquery.timeago.en-short.js
@@ -0,0 +1,20 @@
+// English shortened
+jQuery.timeago.settings.strings = {
+  prefixAgo: null,
+  prefixFromNow: null,
+  suffixAgo: "",
+  suffixFromNow: "",
+  seconds: "1m",
+  minute: "1m",
+  minutes: "%dm",
+  hour: "1h",
+  hours: "%dh",
+  day: "1d",
+  days: "%dd",
+  month: "1mo",
+  months: "%dmo",
+  year: "1yr",
+  years: "%dyr",
+  wordSeparator: " ",
+  numbers: []
+};
diff --git a/locales/jquery.timeago.en.js b/locales/jquery.timeago.en.js
new file mode 100644
index 0000000..3d6652c
--- /dev/null
+++ b/locales/jquery.timeago.en.js
@@ -0,0 +1,20 @@
+// English (Template)
+jQuery.timeago.settings.strings = {
+  prefixAgo: null,
+  prefixFromNow: null,
+  suffixAgo: "ago",
+  suffixFromNow: "from now",
+  seconds: "less than a minute",
+  minute: "about a minute",
+  minutes: "%d minutes",
+  hour: "about an hour",
+  hours: "about %d hours",
+  day: "a day",
+  days: "%d days",
+  month: "about a month",
+  months: "%d months",
+  year: "about a year",
+  years: "%d years",
+  wordSeparator: " ",
+  numbers: []
+};
diff --git a/locales/jquery.timeago.es-short.js b/locales/jquery.timeago.es-short.js
new file mode 100644
index 0000000..65d85c7
--- /dev/null
+++ b/locales/jquery.timeago.es-short.js
@@ -0,0 +1,20 @@
+// Spanish shortened
+jQuery.timeago.settings.strings = {
+  prefixAgo: null,
+  prefixFromNow: null,
+  suffixAgo: "",
+  suffixFromNow: "",
+  seconds: "1m",
+  minute: "1m",
+  minutes: "%dm",
+  hour: "1h",
+  hours: "%dh",
+  day: "1d",
+  days: "%dd",
+  month: "1me",
+  months: "%dme",
+  year: "1a",
+  years: "%da",
+  wordSeparator: " ",
+  numbers: []
+};
diff --git a/locales/jquery.timeago.es.js b/locales/jquery.timeago.es.js
new file mode 100644
index 0000000..00c6d0a
--- /dev/null
+++ b/locales/jquery.timeago.es.js
@@ -0,0 +1,18 @@
+// Spanish
+jQuery.timeago.settings.strings = {
+   prefixAgo: "hace",
+   prefixFromNow: "dentro de",
+   suffixAgo: "",
+   suffixFromNow: "",
+   seconds: "menos de un minuto",
+   minute: "un minuto",
+   minutes: "unos %d minutos",
+   hour: "una hora",
+   hours: "%d horas",
+   day: "un día",
+   days: "%d días",
+   month: "un mes",
+   months: "%d meses",
+   year: "un año",
+   years: "%d años"
+};
\ No newline at end of file
diff --git a/locales/jquery.timeago.et.js b/locales/jquery.timeago.et.js
new file mode 100644
index 0000000..7d17eb5
--- /dev/null
+++ b/locales/jquery.timeago.et.js
@@ -0,0 +1,18 @@
+// Estonian
+jQuery.timeago.settings.strings = {
+  prefixAgo: null,
+  prefixFromNow: null,
+  suffixAgo: "tagasi",
+  suffixFromNow: "pärast",
+  seconds: function(n, d) { return d < 0 ? "vähem kui minuti aja" : "vähem kui minut aega" },
+  minute: function(n, d) { return d < 0 ? "umbes minuti aja" : "umbes minut aega" },
+  minutes: function(n, d) { return d < 0 ? "%d minuti" : "%d minutit" },
+  hour: function(n, d) { return d < 0 ? "umbes tunni aja" : "umbes tund aega" },
+  hours: function(n, d) { return d < 0 ? "%d tunni" : "%d tundi" },
+  day: function(n, d) { return d < 0 ? "umbes päeva" : "umbes päev" },
+  days: function(n, d) { return d < 0 ? "%d päeva" : "%d päeva" },
+  month: function(n, d) { return d < 0 ? "umbes kuu aja" : "umbes kuu aega" },
+  months: function(n, d) { return d < 0 ? "%d kuu" : "%d kuud" },
+  year: function(n, d) { return d < 0 ? "umbes aasta aja" : "umbes aasta aega" },
+  years: function(n, d) { return d < 0 ? "%d aasta" : "%d aastat" }
+};
diff --git a/locales/jquery.timeago.fa.js b/locales/jquery.timeago.fa.js
new file mode 100644
index 0000000..0a70819
--- /dev/null
+++ b/locales/jquery.timeago.fa.js
@@ -0,0 +1,22 @@
+
+// Persian
+// Use DIR attribute for RTL text in Persian Language for ABBR tag .
+// By MB.seifollahi at gmail.com
+jQuery.timeago.settings.strings = {
+  prefixAgo: null,
+  prefixFromNow: null,
+  suffixAgo: "پیش",
+  suffixFromNow: "از حال",
+  seconds: "کمتر از یک دقیقه",
+  minute: "حدود یک دقیقه",
+  minutes: "%d دقیقه",
+  hour: "حدود یک ساعت",
+  hours: "حدود %d ساعت",
+  day: "یک روز",
+  days: "%d روز",
+  month: "حدود یک ماه",
+  months: "%d ماه",
+  year: "حدود یک سال",
+  years: "%d سال",
+  wordSeparator: " "
+};
\ No newline at end of file
diff --git a/locales/jquery.timeago.fi.js b/locales/jquery.timeago.fi.js
new file mode 100644
index 0000000..06b12ee
--- /dev/null
+++ b/locales/jquery.timeago.fi.js
@@ -0,0 +1,28 @@
+// Finnish
+jQuery.timeago.settings.strings = {
+  prefixAgo: null,
+  prefixFromNow: null,
+  suffixAgo: "sitten",
+  suffixFromNow: "tulevaisuudessa",
+  seconds: "alle minuutti",
+  minute: "minuutti",
+  minutes: "%d minuuttia",
+  hour: "tunti",
+  hours: "%d tuntia",
+  day: "päivä",
+  days: "%d päivää",
+  month: "kuukausi",
+  months: "%d kuukautta",
+  year: "vuosi",
+  years: "%d vuotta"
+};
+
+// The above is not a great localization because one would usually
+// write "2 days ago" in Finnish as "2 päivää sitten", however
+// one would write "2 days into the future" as "2:n päivän päästä"
+// which cannot be achieved with localization support this simple.
+// This is because Finnish has word suffixes (attached directly
+// to the end of the word). The word "day" is "päivä" in Finnish.
+// As workaround, the above localizations will say
+// "2 päivää tulevaisuudessa" which is understandable but
+// not as fluent.
\ No newline at end of file
diff --git a/locales/jquery.timeago.fr-short.js b/locales/jquery.timeago.fr-short.js
new file mode 100644
index 0000000..dbfe3bb
--- /dev/null
+++ b/locales/jquery.timeago.fr-short.js
@@ -0,0 +1,16 @@
+// French shortened
+jQuery.timeago.settings.strings = {
+   prefixAgo: "il y a",
+   prefixFromNow: "d'ici",
+   seconds: "moins d'une minute",
+   minute: "une minute",
+   minutes: "%d minutes",
+   hour: "une heure",
+   hours: "%d heures",
+   day: "un jour",
+   days: "%d jours",
+   month: "un mois",
+   months: "%d mois",
+   year: "un an",
+   years: "%d ans"
+};
\ No newline at end of file
diff --git a/locales/jquery.timeago.fr.js b/locales/jquery.timeago.fr.js
new file mode 100644
index 0000000..5028342
--- /dev/null
+++ b/locales/jquery.timeago.fr.js
@@ -0,0 +1,17 @@
+// French
+jQuery.timeago.settings.strings = {
+   // environ ~= about, it's optional
+   prefixAgo: "il y a",
+   prefixFromNow: "d'ici",
+   seconds: "moins d'une minute",
+   minute: "environ une minute",
+   minutes: "environ %d minutes",
+   hour: "environ une heure",
+   hours: "environ %d heures",
+   day: "environ un jour",
+   days: "environ %d jours",
+   month: "environ un mois",
+   months: "environ %d mois",
+   year: "un an",
+   years: "%d ans"
+};
\ No newline at end of file
diff --git a/locales/jquery.timeago.gl.js b/locales/jquery.timeago.gl.js
new file mode 100644
index 0000000..14bc56d
--- /dev/null
+++ b/locales/jquery.timeago.gl.js
@@ -0,0 +1,18 @@
+// Galician
+jQuery.timeago.settings.strings = {
+   prefixAgo: "hai",
+   prefixFromNow: "dentro de",
+   suffixAgo: "",
+   suffixFromNow: "",
+   seconds: "menos dun minuto",
+   minute: "un minuto",
+   minutes: "uns %d minutos",
+   hour: "unha hora",
+   hours: "%d horas",
+   day: "un día",
+   days: "%d días",
+   month: "un mes",
+   months: "%d meses",
+   year: "un ano",
+   years: "%d anos"
+};
diff --git a/locales/jquery.timeago.he.js b/locales/jquery.timeago.he.js
new file mode 100644
index 0000000..33074a0
--- /dev/null
+++ b/locales/jquery.timeago.he.js
@@ -0,0 +1,18 @@
+// Hebrew
+jQuery.timeago.settings.strings = {
+  prefixAgo: "לפני",
+  prefixFromNow: "עוד",
+  suffixAgo: "",
+  suffixFromNow: "",
+  seconds: "פחות מדקה",
+  minute: "דקה",
+  minutes: "%d דקות",
+  hour: "שעה",
+  hours: "%d שעות",
+  day: "יום",
+  days: "%d ימים",
+  month: "חודש",
+  months: "%d חודשים",
+  year: "שנה",
+  years: "%d שנים"
+};
diff --git a/locales/jquery.timeago.hr.js b/locales/jquery.timeago.hr.js
new file mode 100644
index 0000000..a85bd80
--- /dev/null
+++ b/locales/jquery.timeago.hr.js
@@ -0,0 +1,49 @@
+// Croatian
+(function () {
+    var numpf;
+
+    numpf = function (n, f, s, t) {
+        var n10;
+        n10 = n % 10;
+        if (n10 === 1 && (n === 1 || n > 20)) {
+            return f;
+        } else if (n10 > 1 && n10 < 5 && (n > 20 || n < 10)) {
+            return s;
+        } else {
+            return t;
+        }
+    };
+
+    jQuery.timeago.settings.strings = {
+        prefixAgo: "prije",
+        prefixFromNow: "za",
+        suffixAgo: null,
+        suffixFromNow: null,
+        second: "sekundu",
+        seconds: function (value) {
+            return numpf(value, "%d sekundu", "%d sekunde", "%d sekundi");
+        },
+        minute: "oko minutu",
+        minutes: function (value) {
+            return numpf(value, "%d minutu", "%d minute", "%d minuta");
+        },
+        hour: "oko jedan sat",
+        hours: function (value) {
+            return numpf(value, "%d sat", "%d sata", "%d sati");
+        },
+        day: "jedan dan",
+        days: function (value) {
+            return numpf(value, "%d dan", "%d dana", "%d dana");
+        },
+        month: "mjesec dana",
+        months: function (value) {
+            return numpf(value, "%d mjesec", "%d mjeseca", "%d mjeseci");
+        },
+        year: "prije godinu dana",
+        years: function (value) {
+            return numpf(value, "%d godinu", "%d godine", "%d godina");
+        },
+        wordSeparator: " "
+    };
+
+}).call(this);
\ No newline at end of file
diff --git a/locales/jquery.timeago.hu.js b/locales/jquery.timeago.hu.js
new file mode 100644
index 0000000..3079c22
--- /dev/null
+++ b/locales/jquery.timeago.hu.js
@@ -0,0 +1,18 @@
+// Hungarian
+jQuery.timeago.settings.strings = {
+  prefixAgo: null,
+  prefixFromNow: null,
+  suffixAgo: null,
+  suffixFromNow: null,
+  seconds: "kevesebb mint egy perce",
+  minute: "körülbelül egy perce",
+  minutes: "%d perce",
+  hour: "körülbelül egy órája",
+  hours: "körülbelül %d órája",
+  day: "körülbelül egy napja",
+  days: "%d napja",
+  month: "körülbelül egy hónapja",
+  months: "%d hónapja",
+  year: "körülbelül egy éve",
+  years: "%d éve"
+};
\ No newline at end of file
diff --git a/locales/jquery.timeago.hy.js b/locales/jquery.timeago.hy.js
new file mode 100644
index 0000000..cd6e195
--- /dev/null
+++ b/locales/jquery.timeago.hy.js
@@ -0,0 +1,18 @@
+// Armenian
+jQuery.timeago.settings.strings = {
+  prefixAgo: null,
+  prefixFromNow: null,
+  suffixAgo: "առաջ",
+  suffixFromNow: "հետո",
+  seconds: "վայրկյաններ",
+  minute: "մեկ րոպե",
+  minutes: "%d րոպե",
+  hour: "մեկ ժամ",
+  hours: "%d ժամ",
+  day: "մեկ օր",
+  days: "%d օր",
+  month: "մեկ ամիս",
+  months: "%d ամիս",
+  year: "մեկ տարի",
+  years: "%d տարի"
+};
\ No newline at end of file
diff --git a/locales/jquery.timeago.id.js b/locales/jquery.timeago.id.js
new file mode 100644
index 0000000..296d84e
--- /dev/null
+++ b/locales/jquery.timeago.id.js
@@ -0,0 +1,18 @@
+// Indonesian
+jQuery.timeago.settings.strings = {
+  prefixAgo: null,
+  prefixFromNow: null,
+  suffixAgo: "yang lalu",
+  suffixFromNow: "dari sekarang",
+  seconds: "kurang dari semenit",
+  minute: "sekitar satu menit",
+  minutes: "%d menit",
+  hour: "sekitar sejam",
+  hours: "sekitar %d jam",
+  day: "sehari",
+  days: "%d hari",
+  month: "sekitar sebulan",
+  months: "%d bulan",
+  year: "sekitar setahun",
+  years: "%d tahun"
+};
diff --git a/locales/jquery.timeago.is.js b/locales/jquery.timeago.is.js
new file mode 100644
index 0000000..d8074cf
--- /dev/null
+++ b/locales/jquery.timeago.is.js
@@ -0,0 +1,19 @@
+jQuery.timeago.settings.strings = {
+  prefixAgo: "fyrir",
+  prefixFromNow: "eftir",
+  suffixAgo: "síðan",
+  suffixFromNow: null,
+  seconds: "minna en mínútu",
+  minute: "mínútu",
+  minutes: "%d mínútum",
+  hour: "klukkutíma",
+  hours: "um %d klukkutímum",
+  day: "degi",
+  days: "%d dögum",
+  month: "mánuði",
+  months: "%d mánuðum",
+  year: "ári",
+  years: "%d árum",
+  wordSeparator: " ",
+  numbers: []
+};
diff --git a/locales/jquery.timeago.it.js b/locales/jquery.timeago.it.js
new file mode 100644
index 0000000..6308dd3
--- /dev/null
+++ b/locales/jquery.timeago.it.js
@@ -0,0 +1,16 @@
+// Italian
+jQuery.timeago.settings.strings = {
+  suffixAgo: "fa",
+  suffixFromNow: "da ora",
+  seconds: "meno di un minuto",
+  minute: "circa un minuto",
+  minutes: "%d minuti",
+  hour: "circa un'ora",
+  hours: "circa %d ore",
+  day: "un giorno",
+  days: "%d giorni",
+  month: "circa un mese",
+  months: "%d mesi",
+  year: "circa un anno",
+  years: "%d anni"
+};
\ No newline at end of file
diff --git a/locales/jquery.timeago.ja.js b/locales/jquery.timeago.ja.js
new file mode 100644
index 0000000..fd81f27
--- /dev/null
+++ b/locales/jquery.timeago.ja.js
@@ -0,0 +1,19 @@
+// Japanese
+jQuery.timeago.settings.strings = {
+  prefixAgo: "",
+  prefixFromNow: "今から",
+  suffixAgo: "前",
+  suffixFromNow: "後",
+  seconds: "1 分未満",
+  minute: "約 1 分",
+  minutes: "%d 分",
+  hour: "約 1 時間",
+  hours: "約 %d 時間",
+  day: "約 1 日",
+  days: "約 %d 日",
+  month: "約 1 月",
+  months: "約 %d 月",
+  year: "約 1 年",
+  years: "約 %d 年",
+  wordSeparator: ""
+};
diff --git a/locales/jquery.timeago.jv.js b/locales/jquery.timeago.jv.js
new file mode 100644
index 0000000..98f43ef
--- /dev/null
+++ b/locales/jquery.timeago.jv.js
@@ -0,0 +1,18 @@
+// Javanesse (Boso Jowo)
+jQuery.timeago.settings.strings = {
+  prefixAgo: null,
+  prefixFromNow: null,
+  suffixAgo: "kepungkur",
+  suffixFromNow: "seko saiki",
+  seconds: "kurang seko sakmenit",
+  minute: "kurang luwih sakmenit",
+  minutes: "%d menit",
+  hour: "kurang luwih sakjam",
+  hours: "kurang luwih %d jam",
+  day: "sedina",
+  days: "%d dina",
+  month: "kurang luwih sewulan",
+  months: "%d wulan",
+  year: "kurang luwih setahun",
+  years: "%d tahun"
+};
diff --git a/locales/jquery.timeago.ko.js b/locales/jquery.timeago.ko.js
new file mode 100644
index 0000000..a192b97
--- /dev/null
+++ b/locales/jquery.timeago.ko.js
@@ -0,0 +1,17 @@
+// Korean
+jQuery.timeago.settings.strings = {
+  suffixAgo: "전",
+  suffixFromNow: "후",
+  seconds: "1분 이내",
+  minute: "1분",
+  minutes: "%d분",
+  hour: "1시간",
+  hours: "%d시간",
+  day: "하루",
+  days: "%d일",
+  month: "한 달",
+  months: "%d달",
+  year: "1년",
+  years: "%d년",
+  wordSeparator: " "
+};
\ No newline at end of file
diff --git a/locales/jquery.timeago.lt.js b/locales/jquery.timeago.lt.js
new file mode 100644
index 0000000..0814555
--- /dev/null
+++ b/locales/jquery.timeago.lt.js
@@ -0,0 +1,20 @@
+//Lithuanian      
+jQuery.timeago.settings.strings = {
+  prefixAgo: "prieš",
+  prefixFromNow: null,
+  suffixAgo: null,
+  suffixFromNow: "nuo dabar",
+  seconds: "%d sek.",
+  minute: "min.",
+  minutes: "%d min.",
+  hour: "val.",
+  hours: "%d val.",
+  day: "1 d.",
+  days: "%d d.",
+  month: "mėn.",
+  months: "%d mėn.",
+  year: "metus",
+  years: "%d metus",
+  wordSeparator: " ",
+  numbers: []
+};
diff --git a/locales/jquery.timeago.mk.js b/locales/jquery.timeago.mk.js
new file mode 100644
index 0000000..9afdd46
--- /dev/null
+++ b/locales/jquery.timeago.mk.js
@@ -0,0 +1,20 @@
+// Macedonian
+(function() {
+ jQuery.timeago.settings.strings={
+    prefixAgo: "пред",
+    prefixFromNow: "за",
+    suffixAgo: null,
+    suffixFromNow: null,
+    seconds: "%d секунди",
+    minute: "%d минута",
+    minutes: "%d минути",
+    hour: "%d час",
+    hours: "%d часа",
+    day: "%d ден",
+    days: "%d денови" ,
+    month: "%d месец",
+    months: "%d месеци",
+    year: "%d година",
+    years: "%d години"
+ }
+})();
diff --git a/locales/jquery.timeago.nl.js b/locales/jquery.timeago.nl.js
new file mode 100644
index 0000000..cd68438
--- /dev/null
+++ b/locales/jquery.timeago.nl.js
@@ -0,0 +1,20 @@
+// Dutch
+jQuery.timeago.settings.strings = {
+  prefixAgo: null,
+  prefixFromNow: "",
+  suffixAgo: "geleden",
+  suffixFromNow: "van nu",
+  seconds: "minder dan een minuut",
+  minute: "ongeveer een minuut",
+  minutes: "%d minuten",
+  hour: "ongeveer een uur",
+  hours: "ongeveer %d uur",
+  day: "een dag",
+  days: "%d dagen",
+  month: "ongeveer een maand",
+  months: "%d maanden",
+  year: "ongeveer een jaar",
+  years: "%d jaar",
+  wordSeparator: " ",
+  numbers: []
+};
diff --git a/locales/jquery.timeago.no.js b/locales/jquery.timeago.no.js
new file mode 100644
index 0000000..65d1b0d
--- /dev/null
+++ b/locales/jquery.timeago.no.js
@@ -0,0 +1,18 @@
+// Norwegian
+jQuery.timeago.settings.strings = {
+  prefixAgo: "for",
+  prefixFromNow: "om",
+  suffixAgo: "siden",
+  suffixFromNow: "",
+  seconds: "mindre enn et minutt",
+  minute: "ca. et minutt",
+  minutes: "%d minutter",
+  hour: "ca. en time",
+  hours: "ca. %d timer",
+  day: "en dag",
+  days: "%d dager",
+  month: "ca. en måned",
+  months: "%d måneder",
+  year: "ca. et år",
+  years: "%d år"
+};
\ No newline at end of file
diff --git a/locales/jquery.timeago.pl.js b/locales/jquery.timeago.pl.js
new file mode 100644
index 0000000..21d26fc
--- /dev/null
+++ b/locales/jquery.timeago.pl.js
@@ -0,0 +1,31 @@
+// Polish
+(function() {
+  function numpf(n, s, t) {
+    // s - 2-4, 22-24, 32-34 ...
+    // t - 5-21, 25-31, ...
+    var n10 = n % 10;
+    if ( (n10 > 1) && (n10 < 5) && ( (n > 20) || (n < 10) ) ) {
+      return s;
+    } else {
+      return t;
+    }
+  }
+
+  jQuery.timeago.settings.strings = {
+    prefixAgo: null,
+    prefixFromNow: "za",
+    suffixAgo: "temu",
+    suffixFromNow: null,
+    seconds: "mniej niż minutę",
+    minute: "minutę",
+    minutes: function(value) { return numpf(value, "%d minuty", "%d minut"); },
+    hour: "godzinę",
+    hours: function(value) { return numpf(value, "%d godziny", "%d godzin"); },
+    day: "dzień",
+    days: "%d dni",
+    month: "miesiąc",
+    months: function(value) { return numpf(value, "%d miesiące", "%d miesięcy"); },
+    year: "rok",
+    years: function(value) { return numpf(value, "%d lata", "%d lat"); }
+  };
+})();
\ No newline at end of file
diff --git a/locales/jquery.timeago.pt-br.js b/locales/jquery.timeago.pt-br.js
new file mode 100644
index 0000000..c72ea38
--- /dev/null
+++ b/locales/jquery.timeago.pt-br.js
@@ -0,0 +1,18 @@
+// Brazilian Portuguese 
+jQuery.timeago.settings.strings = {
+   prefixAgo: "há",
+   prefixFromNow: "em",
+   suffixAgo: null,
+   suffixFromNow: null,
+   seconds: "alguns segundos",
+   minute: "um minuto",
+   minutes: "%d minutos",
+   hour: "uma hora",
+   hours: "%d horas",
+   day: "um dia",
+   days: "%d dias",
+   month: "um mês",
+   months: "%d meses",
+   year: "um ano",
+   years: "%d anos"
+};
diff --git a/locales/jquery.timeago.pt.js b/locales/jquery.timeago.pt.js
new file mode 100644
index 0000000..416333c
--- /dev/null
+++ b/locales/jquery.timeago.pt.js
@@ -0,0 +1,16 @@
+// Portuguese
+jQuery.timeago.settings.strings = {
+   suffixAgo: "atrás",
+   suffixFromNow: "a partir de agora",
+   seconds: "menos de um minuto",
+   minute: "cerca de um minuto",
+   minutes: "%d minutos",
+   hour: "cerca de uma hora",
+   hours: "cerca de %d horas",
+   day: "um dia",
+   days: "%d dias",
+   month: "cerca de um mês",
+   months: "%d meses",
+   year: "cerca de um ano",
+   years: "%d anos"
+};
\ No newline at end of file
diff --git a/locales/jquery.timeago.ro.js b/locales/jquery.timeago.ro.js
new file mode 100644
index 0000000..883b548
--- /dev/null
+++ b/locales/jquery.timeago.ro.js
@@ -0,0 +1,18 @@
+// Romanian
+$.timeago.settings.strings = {
+  prefixAgo: "acum",
+  prefixFromNow: "in timp de",
+  suffixAgo: "",
+  suffixFromNow: "",
+  seconds: "mai putin de un minut",
+  minute: "un minut",
+  minutes: "%d minute",
+  hour: "o ora",
+  hours: "%d ore",
+  day: "o zi",
+  days: "%d zile",
+  month: "o luna",
+  months: "%d luni",
+  year: "un an",
+  years: "%d ani"
+};
\ No newline at end of file
diff --git a/locales/jquery.timeago.rs.js b/locales/jquery.timeago.rs.js
new file mode 100644
index 0000000..1fc1613
--- /dev/null
+++ b/locales/jquery.timeago.rs.js
@@ -0,0 +1,49 @@
+// Serbian
+(function () {
+    var numpf;
+
+    numpf = function (n, f, s, t) {
+        var n10;
+        n10 = n % 10;
+        if (n10 === 1 && (n === 1 || n > 20)) {
+            return f;
+        } else if (n10 > 1 && n10 < 5 && (n > 20 || n < 10)) {
+            return s;
+        } else {
+            return t;
+        }
+    };
+
+    jQuery.timeago.settings.strings = {
+        prefixAgo: "pre",
+        prefixFromNow: "za",
+        suffixAgo: null,
+        suffixFromNow: null,
+        second: "sekund",
+        seconds: function (value) {
+            return numpf(value, "%d sekund", "%d sekunde", "%d sekundi");
+        },
+        minute: "oko minut",
+        minutes: function (value) {
+            return numpf(value, "%d minut", "%d minuta", "%d minuta");
+        },
+        hour: "oko jedan sat",
+        hours: function (value) {
+            return numpf(value, "%d sat", "%d sata", "%d sati");
+        },
+        day: "jedan dan",
+        days: function (value) {
+            return numpf(value, "%d dan", "%d dana", "%d dana");
+        },
+        month: "mesec dana",
+        months: function (value) {
+            return numpf(value, "%d mesec", "%d meseca", "%d meseci");
+        },
+        year: "pre godinu dana",
+        years: function (value) {
+            return numpf(value, "%d godinu", "%d godine", "%d godina");
+        },
+        wordSeparator: " "
+    };
+
+}).call(this);
diff --git a/locales/jquery.timeago.ru.js b/locales/jquery.timeago.ru.js
new file mode 100644
index 0000000..4cdc01b
--- /dev/null
+++ b/locales/jquery.timeago.ru.js
@@ -0,0 +1,34 @@
+// Russian
+(function() {
+  function numpf(n, f, s, t) {
+    // f - 1, 21, 31, ...
+    // s - 2-4, 22-24, 32-34 ...
+    // t - 5-20, 25-30, ...
+    var n10 = n % 10;
+    if ( (n10 == 1) && ( (n == 1) || (n > 20) ) ) {
+      return f;
+    } else if ( (n10 > 1) && (n10 < 5) && ( (n > 20) || (n < 10) ) ) {
+      return s;
+    } else {
+      return t;
+    }
+  }
+
+  jQuery.timeago.settings.strings = {
+    prefixAgo: null,
+    prefixFromNow: "через",
+    suffixAgo: "назад",
+    suffixFromNow: null,
+    seconds: "меньше минуты",
+    minute: "минуту",
+    minutes: function(value) { return numpf(value, "%d минута", "%d минуты", "%d минут"); },
+    hour: "час",
+    hours: function(value) { return numpf(value, "%d час", "%d часа", "%d часов"); },
+    day: "день",
+    days: function(value) { return numpf(value, "%d день", "%d дня", "%d дней"); },
+    month: "месяц",
+    months: function(value) { return numpf(value, "%d месяц", "%d месяца", "%d месяцев"); },
+    year: "год",
+    years: function(value) { return numpf(value, "%d год", "%d года", "%d лет"); }
+  };
+})();
\ No newline at end of file
diff --git a/locales/jquery.timeago.sk.js b/locales/jquery.timeago.sk.js
new file mode 100644
index 0000000..24493a2
--- /dev/null
+++ b/locales/jquery.timeago.sk.js
@@ -0,0 +1,18 @@
+// Slovak
+jQuery.timeago.settings.strings = {
+  prefixAgo: "pred",
+  prefixFromNow: null,
+  suffixAgo: null,
+  suffixFromNow: null,
+  seconds: "menej než minútou",
+  minute: "minútou",
+  minutes: "%d minútami",
+  hour: "hodinou",
+  hours: "%d hodinami",
+  day: "1 dňom",
+  days: "%d dňami",
+  month: "1 mesiacom",
+  months: "%d mesiacmi",
+  year: "1 rokom",
+  years: "%d rokmi"
+};
diff --git a/locales/jquery.timeago.sl.js b/locales/jquery.timeago.sl.js
new file mode 100644
index 0000000..e546c0d
--- /dev/null
+++ b/locales/jquery.timeago.sl.js
@@ -0,0 +1,44 @@
+// Slovenian with support for dual
+(function () {
+    var numpf;
+    numpf = function (n, d, m) {
+        if (n == 2) {
+            return d;
+        } else {
+            return m;
+        }
+    };
+
+    jQuery.timeago.settings.strings = {
+        prefixAgo: "pred",
+        prefixFromNow: "čez",
+        suffixAgo: null,
+        suffixFromNow: null,
+        second: "sekundo",
+        seconds: function (value) {
+            return numpf(value, "%d sekundama", "%d sekundami");
+        },
+        minute: "minuto",
+        minutes: function (value) {
+            return numpf(value, "%d minutama", "%d minutami");
+        },
+        hour: "uro",
+        hours: function (value) {
+            return numpf(value, "%d urama", "%d urami");
+        },
+        day: "dnevom",
+        days: function (value) {
+            return numpf(value, "%d dnevi", "%d dnevi");
+        },
+        month: "enim mescem",
+        months: function (value) {
+            return numpf(value, "%d mesecema", "%d meseci");
+        },
+        year: "enim letom",
+        years: function (value) {
+            return numpf(value, "%d letoma", "%d leti");
+        },
+        wordSeparator: " "
+    };
+
+}).call(this);
diff --git a/locales/jquery.timeago.sv.js b/locales/jquery.timeago.sv.js
new file mode 100644
index 0000000..b5c3947
--- /dev/null
+++ b/locales/jquery.timeago.sv.js
@@ -0,0 +1,18 @@
+// Swedish
+jQuery.timeago.settings.strings = {
+  prefixAgo: "för",
+  prefixFromNow: "om",
+  suffixAgo: "sedan",
+  suffixFromNow: "",
+  seconds: "mindre än en minut",
+  minute: "ungefär en minut",
+  minutes: "%d minuter",
+  hour: "ungefär en timme",
+  hours: "ungefär %d timmar",
+  day: "en dag",
+  days: "%d dagar",
+  month: "ungefär en månad",
+  months: "%d månader",
+  year: "ungefär ett år",
+  years: "%d år"
+};
\ No newline at end of file
diff --git a/locales/jquery.timeago.th.js b/locales/jquery.timeago.th.js
new file mode 100644
index 0000000..894bf7f
--- /dev/null
+++ b/locales/jquery.timeago.th.js
@@ -0,0 +1,20 @@
+// Thai
+jQuery.timeago.settings.strings = {
+  prefixAgo: null,
+  prefixFromNow: null,
+  suffixAgo: "ที่แล้ว",
+  suffixFromNow: "จากตอนนี้",
+  seconds: "น้อยกว่าหนึ่งนาที",
+  minute: "ประมาณหนึ่งนาที",
+  minutes: "%d นาที",
+  hour: "ประมาณหนึ่งชั่วโมง",
+  hours: "ประมาณ %d ชั่วโมง",
+  day: "หนึ่งวัน",
+  days: "%d วัน",
+  month: "ประมาณหนึ่งเดือน",
+  months: "%d เดือน",
+  year: "ประมาณหนึ่งปี",
+  years: "%d ปี",
+  wordSeparator: "",
+  numbers: []
+};
diff --git a/locales/jquery.timeago.tr.js b/locales/jquery.timeago.tr.js
new file mode 100644
index 0000000..f3e3a67
--- /dev/null
+++ b/locales/jquery.timeago.tr.js
@@ -0,0 +1,16 @@
+// Turkish
+jQuery.extend($.timeago.settings.strings, {
+   suffixAgo: 'önce',
+   suffixFromNow: null,
+   seconds: '1 dakikadan',
+   minute: '1 dakika',
+   minutes: '%d dakika',
+   hour: '1 saat',
+   hours: '%d saat',
+   day: '1 gün',
+   days: '%d gün',
+   month: '1 ay',
+   months: '%d ay',
+   year: '1 yıl',
+   years: '%d yıl'
+});
\ No newline at end of file
diff --git a/locales/jquery.timeago.uk.js b/locales/jquery.timeago.uk.js
new file mode 100644
index 0000000..4382549
--- /dev/null
+++ b/locales/jquery.timeago.uk.js
@@ -0,0 +1,34 @@
+// Ukrainian
+(function() {
+  function numpf(n, f, s, t) {
+    // f - 1, 21, 31, ...
+    // s - 2-4, 22-24, 32-34 ...
+    // t - 5-20, 25-30, ...
+    var n10 = n % 10;
+    if ( (n10 == 1) && ( (n == 1) || (n > 20) ) ) {
+      return f;
+    } else if ( (n10 > 1) && (n10 < 5) && ( (n > 20) || (n < 10) ) ) {
+      return s;
+    } else {
+      return t;
+    }
+  }
+
+  jQuery.timeago.settings.strings = {
+    prefixAgo: null,
+    prefixFromNow: "через",
+    suffixAgo: "тому",
+    suffixFromNow: null,
+    seconds: "менше хвилини",
+    minute: "хвилина",
+    minutes: function(value) { return numpf(value, "%d хвилина", "%d хвилини", "%d хвилин"); },
+    hour: "година",
+    hours: function(value) { return numpf(value, "%d година", "%d години", "%d годин"); },
+    day: "день",
+    days: function(value) { return numpf(value, "%d день", "%d дні", "%d днів"); },
+    month: "місяць",
+    months: function(value) { return numpf(value, "%d місяць", "%d місяці", "%d місяців"); },
+    year: "рік",
+    years: function(value) { return numpf(value, "%d рік", "%d роки", "%d років"); }
+  };
+})();
\ No newline at end of file
diff --git a/locales/jquery.timeago.uz.js b/locales/jquery.timeago.uz.js
new file mode 100755
index 0000000..31c0c02
--- /dev/null
+++ b/locales/jquery.timeago.uz.js
@@ -0,0 +1,19 @@
+//Uzbek
+jQuery.timeago.settings.strings = {
+  prefixAgo: null,
+  prefixFromNow: "keyin",
+  suffixAgo: "avval",
+  suffixFromNow: null,
+  seconds: "bir necha soniya",
+  minute: "1 daqiqa",
+  minutes: function(value) { return "%d daqiqa" },
+  hour: "1 soat",
+  hours: function(value) { return "%d soat" },
+  day: "1 kun",
+  days: function(value) { return "%d kun" },
+  month: "1 oy",
+  months: function(value) { return "%d oy" },
+  year: "1 yil",
+  years: function(value) { return "%d yil" },
+  wordSeparator: " "
+};
diff --git a/locales/jquery.timeago.vi.js b/locales/jquery.timeago.vi.js
new file mode 100644
index 0000000..84d6618
--- /dev/null
+++ b/locales/jquery.timeago.vi.js
@@ -0,0 +1,20 @@
+// Vietnamese
+jQuery.timeago.settings.strings = {
+  prefixAgo: 'cách đây',
+  prefixFromNow: null,
+  suffixAgo: null,
+  suffixFromNow: "trước",
+  seconds: "chưa đến một phút",
+  minute: "khoảng một phút",
+  minutes: "%d phút",
+  hour: "khoảng một tiếng",
+  hours: "khoảng %d tiếng",
+  day: "một ngày",
+  days: "%d ngày",
+  month: "khoảng một tháng",
+  months: "%d tháng",
+  year: "khoảng một năm",
+  years: "%d năm",
+  wordSeparator: " ",
+  numbers: []
+};
diff --git a/locales/jquery.timeago.zh-CN.js b/locales/jquery.timeago.zh-CN.js
new file mode 100644
index 0000000..f7b9797
--- /dev/null
+++ b/locales/jquery.timeago.zh-CN.js
@@ -0,0 +1,20 @@
+// Simplified Chinese
+jQuery.timeago.settings.strings = {
+  prefixAgo: null,
+  prefixFromNow: "从现在开始",
+  suffixAgo: "之前",
+  suffixFromNow: null,
+  seconds: "不到1分钟",
+  minute: "大约1分钟",
+  minutes: "%d分钟",
+  hour: "大约1小时",
+  hours: "大约%d小时",
+  day: "1天",
+  days: "%d天",
+  month: "大约1个月",
+  months: "%d月",
+  year: "大约1年",
+  years: "%d年",
+  numbers: [],
+  wordSeparator: ""
+};
diff --git a/locales/jquery.timeago.zh-TW.js b/locales/jquery.timeago.zh-TW.js
new file mode 100644
index 0000000..5263390
--- /dev/null
+++ b/locales/jquery.timeago.zh-TW.js
@@ -0,0 +1,20 @@
+// Traditional Chinese, zh-tw
+jQuery.timeago.settings.strings = {
+  prefixAgo: null,
+  prefixFromNow: "從現在開始",
+  suffixAgo: "之前",
+  suffixFromNow: null,
+  seconds: "不到1分鐘",
+  minute: "大約1分鐘",
+  minutes: "%d分鐘",
+  hour: "大約1小時",
+  hours: "%d小時",
+  day: "大約1天",
+  days: "%d天",
+  month: "大約1個月",
+  months: "%d個月",
+  year: "大約1年",
+  years: "%d年",
+  numbers: [],
+  wordSeparator: ""
+};
diff --git a/test/index.html b/test/index.html
new file mode 100644
index 0000000..b2a153a
--- /dev/null
+++ b/test/index.html
@@ -0,0 +1,690 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>jQuery-Timeago Test Suite</title>
+  <link rel="stylesheet" href="http://code.jquery.com/qunit/qunit-1.11.0.css">
+</head>
+<body>
+  <div id="qunit"></div>
+  <div id="qunit-fixture"></div>
+
+  <div id="main">
+    <h2>Short term</h2>
+
+    <p>You opened this page <abbr class="loaded timeago testShortTerm">(you shouldn't see this)</abbr>.</p>
+
+    <p>
+      This page was last modified <abbr class="modified timeago">sometime before
+      now (your browser might not support document.lastModified for local resources)</abbr>.
+    </p>
+
+    <h2>Long term</h2>
+
+    <p>
+      Jett was born
+      <abbr class="timeago testLongTerm" title="2008-02-27T00:23:00Z">(you shouldn't see this)</abbr>
+      [from Z].
+    </p>
+    <p>
+      Jett was born
+      <abbr class="timeago testLongTerm" title="2008-02-26T19:23:00-0500">(you shouldn't see this)</abbr>
+      [from -0500].
+    </p>
+    <p>
+      Logan was born
+      <abbr class="timeago testLongTerm" title="2005-06-17T23:42:00Z">(you shouldn't see this)</abbr>
+      [from Z].
+    </p>
+    <p>
+      Logan was born
+      <abbr class="timeago testLongTerm" title="2005-06-17T19:42:00-0400">(you shouldn't see this)</abbr>
+      [from -0400].
+    </p>
+    <p>
+      Ryan was born
+      <abbr class="timeago testLongTerm" title="1978-12-18T17:17:00Z">(you shouldn't see this)</abbr>
+      [from Z].
+    </p>
+    <p>
+      Ryan was born
+      <abbr class="timeago testLongTerm" title="1978-12-18T12:17:00-05:00">(you shouldn't see this)</abbr>
+      [from -0500].
+    </p>
+
+    <h2>Other formats</h2>
+
+    <p>Date only (abbr element): <abbr class="timeago" title="2008-02-26">(you shouldn't see this)</abbr>.</p>
+    <p>Date only (time element): <time class="timeago" datetime="2008-02-26">(you shouldn't see this)</time>.</p>
+    <p>Date only (friendly tooltip): <abbr id="testTooltip" class="timeago" title="2008-02-26">February 26th</abbr>.</p>
+    <p>Date only (default tooltip): <abbr id="defaultTooltip" class="timeago" title="2008-02-26"> </abbr>.</p>
+    <p>Timestsamp (with millis): <abbr class="timeago" title="1978-12-18T17:17:00.021Z">(you shouldn't see this)</abbr>.</p>
+
+    <p><time id="testTimeTitle" class="timeago" datetime="2012-05-07T10:06:02+02:00" title="May 10, 2012 10:06">May 10, 2012</time></p>
+    <p><time id="testTimeTitle2" class="timeago" datetime="2012-05-07T10:06:02+02:00">May 10, 2012</time></p>
+
+    <h2>Cutoff</h2>
+
+    <p>Date that is before a past cutoff: <abbr class="timeago cutoff doCutoffPast" title="1978-12-18">(this should be displayed)</abbr></p>
+
+    <p>Date that is after a past cutoff: <abbr class="timeago loaded cutoff dontCutoffPast">(you shouldn't see this)</abbr></p>
+
+    <p>Date that is past a future cutoff: <abbr class="timeago cutoff doCutoffFuture" title="2999-12-18">(this should be displayed)</abbr></p>
+
+    <p>Date that is before a future cutoff: <abbr class="timeago loaded cutoff dontCutoffFuture">(you shouldn't see this)</abbr></p>
+
+    <h2>Errors</h2>
+
+    <p>Bad (letters): <abbr class="bad timeago" title="bleh">(this should be displayed)</abbr>.</p>
+    <p>Bad (blank): <abbr class="bad timeago" title="">(this should be displayed)</abbr>.</p>
+    <p>Bad (missing): <abbr class="bad timeago">(this should be displayed)</abbr>.</p>
+
+    <h2>Parsing</h2>
+
+    <p>Ryan was born…</p>
+    <ul>
+      <li><abbr id="testParsing1" class="todate" title="1978-12-18T17:17:00Z"></abbr> [from Z]</li>
+      <li><abbr id="testParsing2" class="todate" title="1978-12-18T17:17:00-00:00"></abbr> [from -00:00]</li>
+      <li><abbr id="testParsing3" class="todate" title="1978-12-18T12:17:00-05:00"></abbr> [from -05:00]</li>
+      <li><abbr id="testParsing4" class="todate" title="1978-12-18T12:17:00-0500"></abbr> [from -0500]</li>
+      <li><abbr id="testParsing5" class="todate" title="1978-12-19T02:17:00+09:00"></abbr> [from +09:00]</li>
+      <li><abbr id="testParsing6" class="todate" title="1978-12-19T02:17:00+0900"></abbr> [from +0900]</li>
+      <li><abbr id="testParsing7" class="todate" title="1978-12-18 17:17:00"></abbr> [from blank TZ]</li>
+      <li><abbr id="testParsing8" class="todate" title="1978-12-18 17:17:00.021Z"></abbr> [from Z with milliseconds]</li>
+      <li><abbr id="testParsing9" class="todate" title="1978-12-18 17:17:00.021432Z"></abbr> [from Z with microseconds]</li>
+      <li><abbr id="testParsing10" class="todate" title="1978-12-18 17:17:00.0Z"></abbr> [from Z with tenths of a second]</li>
+      <li><abbr id="testParsing11" class="todate" title="1978-12-18 17:17:00.02Z"></abbr> [from Z with hundreths of a second]</li>
+      <li><abbr id="testParsing12" class="todate" title="1978-12-19T02:17:00+09"></abbr> [from +09]</li>
+    </ul>
+
+    <h2>Wording</h2>
+
+    <ul>
+      <li><abbr id="testWording1" class="towords" title="-7200"></abbr> [-120 min]</li>
+      <li><abbr id="testWording2" class="towords" title="-60"></abbr> [-60 sec]</li>
+      <li><abbr id="testWording3" class="towords" title="-30"></abbr> [-30 sec]</li>
+      <li><abbr id="testWording4" class="towords" title="-1"></abbr> [-1 sec]</li>
+      <li><abbr id="testWording5" class="towords" title="0"></abbr> [0 sec]</li>
+      <li><abbr id="testWording6" class="towords" title="30"></abbr> [30 sec]</li>
+      <li><abbr id="testWording7" class="towords" title="45"></abbr> [45 sec]</li>
+      <li><abbr id="testWording8" class="towords" title="90"></abbr> [90 sec]</li>
+      <li><abbr id="testWording9" class="towords" title="120"></abbr> [120 sec]</li>
+      <li><abbr id="testWording10" class="towords" title="2700"></abbr> [45 min]</li>
+      <li><abbr id="testWording11" class="towords" title="5340"></abbr> [89 min]</li>
+      <li><abbr id="testWording12" class="towords" title="5400"></abbr> [90 min]</li>
+      <li><abbr id="testWording13" class="towords" title="7200"></abbr> [120 min]</li>
+      <li><abbr id="testWording14" class="towords" title="82800"></abbr> [1380 min]</li>
+      <li><abbr id="testWording15" class="towords" title="90000"></abbr> [25 hours]</li>
+      <li><abbr id="testWording16a" class="towords" title="147600"></abbr> [41 hours]</li>
+      <li><abbr id="testWording16b" class="towords" title="151200"></abbr> [42 hours]</li>
+      <li><abbr id="testWording16c" class="towords" title="172800"></abbr> [48 hours]</li>
+      <li><abbr id="testWording17" class="towords" title="2505600"></abbr> [696 hours]</li>
+      <li><abbr id="testWording18" class="towords" title="2592000"></abbr> [30 days]</li>
+      <li><abbr id="testWording19" class="towords" title="16416000"></abbr> [190 days]</li>
+      <li><abbr id="testWording20" class="towords" title="31622400"></abbr> [366 days]</li>
+      <li><abbr id="testWording21" class="towords" title="62640000"></abbr> [725 days]</li>
+      <li><abbr id="testWording22" class="towords" title="94608000"></abbr> [1095 days]</li>
+    </ul>
+
+    <h2>Settings</h2>
+
+    <ul>
+      <li><abbr id="testNumbersSettings1" class="tonumbers" title="120"></abbr> [2 min]</li>
+      <li><abbr id="testNumbersSettings2" class="tonumbers" title="540"></abbr> [9 min]</li>
+      <li><abbr id="testNumbersSettings3" class="tonumbers" title="600"></abbr> [10 min]</li>
+
+      <li><abbr id="testYoungOldSettings1" class="toyoungold" title="504576000"></abbr> [5840 days]</li>
+      <li><abbr id="testYoungOldSettings2" class="toyoungold" title="2018304000"></abbr> [23360 days]</li>
+
+      <li><abbr id="testNoSpaces1" class="nospaces" title="120"></abbr> [120 sec]</li>
+      <li><abbr id="testNullSpaces1" class="nullspaces" title="120"></abbr> [120 sec]</li>
+
+      <li><abbr id="testLatinSettings1" class="tolatin" title="-7200"></abbr> [-120 min]</li>
+      <li><abbr id="testLatinSettings2" class="tolatin" title="-60"></abbr> [-60 sec]</li>
+      <li><abbr id="testLatinSettings3" class="tolatin" title="-30"></abbr> [-30 sec]</li>
+      <li><abbr id="testLatinSettings4" class="tolatin" title="-1"></abbr> [-1 sec]</li>
+      <li><abbr id="testLatinSettings5" class="tolatin" title="0"></abbr> [0 sec]</li>
+      <li><abbr id="testLatinSettings6" class="tolatin" title="30"></abbr> [30 sec]</li>
+      <li><abbr id="testLatinSettings7" class="tolatin" title="45"></abbr> [45 sec]</li>
+      <li><abbr id="testLatinSettings8" class="tolatin" title="90"></abbr> [90 sec]</li>
+      <li><abbr id="testLatinSettings9" class="tolatin" title="120"></abbr> [120 sec]</li>
+      <li><abbr id="testLatinSettings10" class="tolatin" title="2700"></abbr> [45 min]</li>
+      <li><abbr id="testLatinSettings11" class="tolatin" title="5340"></abbr> [89 min]</li>
+      <li><abbr id="testLatinSettings12" class="tolatin" title="5400"></abbr> [90 min]</li>
+      <li><abbr id="testLatinSettings13" class="tolatin" title="7200"></abbr> [120 min]</li>
+      <li><abbr id="testLatinSettings14" class="tolatin" title="82800"></abbr> [1380 min]</li>
+      <li><abbr id="testLatinSettings15" class="tolatin" title="90000"></abbr> [25 hours]</li>
+      <li><abbr id="testLatinSettings16" class="tolatin" title="172800"></abbr> [48 hours]</li>
+      <li><abbr id="testLatinSettings17" class="tolatin" title="2505600"></abbr> [696 hours]</li>
+      <li><abbr id="testLatinSettings18" class="tolatin" title="2592000"></abbr> [30 days]</li>
+      <li><abbr id="testLatinSettings19" class="tolatin" title="16416000"></abbr> [190 days]</li>
+      <li><abbr id="testLatinSettings20" class="tolatin" title="31622400"></abbr> [366 days]</li>
+      <li><abbr id="testLatinSettings21" class="tolatin" title="94608000"></abbr> [1095 days]</li>
+
+      <li><abbr id="testRussianSettings1" class="torussian" title="-7200"></abbr> [-120 min]</li>
+      <li><abbr id="testRussianSettings2" class="torussian" title="-60"></abbr> [-60 sec]</li>
+      <li><abbr id="testRussianSettings3" class="torussian" title="-30"></abbr> [-30 sec]</li>
+      <li><abbr id="testRussianSettings4" class="torussian" title="-1"></abbr> [-1 sec]</li>
+      <li><abbr id="testRussianSettings5" class="torussian" title="0"></abbr> [0 sec]</li>
+      <li><abbr id="testRussianSettings6" class="torussian" title="30"></abbr> [30 sec]</li>
+      <li><abbr id="testRussianSettings7" class="torussian" title="45"></abbr> [45 sec]</li>
+      <li><abbr id="testRussianSettings8" class="torussian" title="90"></abbr> [90 sec]</li>
+      <li><abbr id="testRussianSettings9" class="torussian" title="120"></abbr> [120 sec]</li>
+      <li><abbr id="testRussianSettings10" class="torussian" title="2700"></abbr> [45 min]</li>
+      <li><abbr id="testRussianSettings11" class="torussian" title="5340"></abbr> [89 min]</li>
+      <li><abbr id="testRussianSettings12" class="torussian" title="5400"></abbr> [90 min]</li>
+      <li><abbr id="testRussianSettings13" class="torussian" title="7200"></abbr> [120 min]</li>
+      <li><abbr id="testRussianSettings14" class="torussian" title="82800"></abbr> [1380 min]</li>
+      <li><abbr id="testRussianSettings15" class="torussian" title="90000"></abbr> [25 hours]</li>
+      <li><abbr id="testRussianSettings16" class="torussian" title="172800"></abbr> [48 hours]</li>
+      <li><abbr id="testRussianSettings17" class="torussian" title="2505600"></abbr> [696 hours]</li>
+      <li><abbr id="testRussianSettings18" class="torussian" title="2592000"></abbr> [30 days]</li>
+      <li><abbr id="testRussianSettings19" class="torussian" title="16416000"></abbr> [190 days]</li>
+      <li><abbr id="testRussianSettings20" class="torussian" title="31622400"></abbr> [366 days]</li>
+      <li><abbr id="testRussianSettings21" class="torussian" title="94608000"></abbr> [1095 days]</li>
+
+      <li><abbr id="testMillisSettings1" class="tomillis" title="-7200"></abbr> [-120 min]</li>
+      <li><abbr id="testMillisSettings2" class="tomillis" title="-60"></abbr> [-60 sec]</li>
+      <li><abbr id="testMillisSettings3" class="tomillis" title="-30"></abbr> [-30 sec]</li>
+      <li><abbr id="testMillisSettings4" class="tomillis" title="-1"></abbr> [-1 sec]</li>
+      <li><abbr id="testMillisSettings5" class="tomillis" title="0"></abbr> [0 sec]</li>
+      <li><abbr id="testMillisSettings6" class="tomillis" title="30"></abbr> [30 sec]</li>
+      <li><abbr id="testMillisSettings7" class="tomillis" title="45"></abbr> [45 sec]</li>
+      <li><abbr id="testMillisSettings8" class="tomillis" title="90"></abbr> [90 sec]</li>
+      <li><abbr id="testMillisSettings9" class="tomillis" title="120"></abbr> [120 sec]</li>
+    </ul>
+
+    <h2>Do Not Allow Future</h2>
+
+    <ul>
+      <li><abbr id="testAllowFutureFalse1" class="doNotAllowFuture" title="2012-01-01T09:24:17Z">(you shouldn't see this)</abbr></li>
+    </ul>
+
+    <h2>Do Not Allow Past</h2>
+
+    <ul>
+      <li><abbr id="testAllowPastFalse1" class="doNotAllowPast" title="2008-01-01T09:24:17Z">(you shouldn't see this)</abbr></li>
+      <li><abbr id="testAllowPastAndFutureFalse" title="2008-01-01T09:24:17Z"></abbr></li>
+    </ul>
+
+    <h2>Disposal</h2>
+    <p><abbr class="disposal disposed"></abbr></p>
+    <p><abbr class="disposal notDisposed"></abbr></p>
+  </div>
+
+  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
+  <script src="http://code.jquery.com/qunit/qunit-1.11.0.js"></script>
+  <script src="../jquery.timeago.js"></script>
+  <script src="test_helpers.js" type="text/javascript"></script>
+  <script type="text/javascript">
+    //<![CDATA[
+    (function ($) {
+      function testElements(selector, test) {
+        var elements       = $(selector);
+        var numberOfTests  = elements.length;
+        var numberOfPasses = 0;
+
+        elements.each(function () {
+          if (test($(this))) { numberOfPasses++; }
+        });
+
+        return (numberOfTests === numberOfPasses);
+      }
+
+      function toWords() {
+        var string = $.timeago.inWords(parseInt(this.title, 10) * 1000);
+        $(this).text(string);
+      }
+
+      $.timeago.settings.allowFuture = true;
+
+      prepareDynamicDates();
+
+      $("abbr.timeago").not("abbr.cutoff").timeago();
+      $("time.timeago").timeago();
+
+      loadCutoffSetting();
+      $("abbr.cutoff").timeago();
+      unloadCutoffSetting();
+
+      var tooltip = $("#testTooltip").data("timeago");
+
+      $("abbr.todate").each(function () {
+        var date = $.timeago.parse(this.title);
+        $(this).text(date.toUTCString());
+      });
+
+      $("abbr.towords").each(toWords);
+
+      loadNumbers();
+      $("abbr.tonumbers").each(toWords);
+      unloadNumbers();
+
+      loadDoNotAllowFuture();
+      $("abbr.doNotAllowFuture").timeago();
+      unloadDoNotAllowFuture();
+
+      loadDoNotAllowPast();
+      $("abbr.doNotAllowPast").timeago();
+      unloadDoNotAllowPast();
+
+      setupDisposal();
+
+      loadYoungOldYears();
+      $("abbr.toyoungold").each(toWords);
+
+      loadNoSpaces();
+      $("abbr.nospaces").each(toWords);
+
+      loadNullSpaces();
+      $("abbr.nullspaces").each(toWords);
+
+      loadPigLatin();
+      $("abbr.tolatin").each(toWords);
+
+      loadRussian();
+      $("abbr.torussian").each(toWords);
+
+      loadMillis();
+      $("abbr.tomillis").each(toWords);
+
+      module("Valid date");
+
+      test("Text in abbr tag should be replaced", function () {
+        ok(testElements("abbr.timeago", function (element) {
+          return (element.html() !== "(you shouldn't see this)");
+        }), "All text was replaced");
+      });
+
+      test("Text in time tag should be replaced", function () {
+        ok(testElements("time.timeago", function (element) {
+          return (element.html() !== "(you shouldn't see this)");
+        }), "All text was replaced");
+      });
+
+      module("Invalid date");
+
+      test("Text in abbr should not be replaced", function () {
+        ok(testElements("abbr.bad", function (element) {
+          return (element.html() === "(this should be displayed)");
+        }), "No text was replaced");
+      });
+
+      module("Short term");
+
+      test("Dates shorter than a minute should be replaced with short term text", function () {
+        ok(testElements("abbr.testShortTerm", function (element) {
+          return (element.html() === "less than a minute ago");
+        }), "All short term dates correctly parsed");
+      });
+
+      module("Long term");
+
+      test("Dates older than one year should contain the word 'year'", function () {
+        ok(testElements("abbr.testLongTerm", function (element) {
+          return (element.html().match(/year/));
+        }), "All long term dates correctly parsed");
+      });
+
+      module("Data object");
+
+      test("should set timeago data object", function () {
+        ok(tooltip, "data set");
+        ok(tooltip.datetime, "datetime set");
+      });
+
+      module("Cutoff");
+
+      test("should not change dates older than cutoff setting", function () {
+        ok(testElements("abbr.doCutoffPast", function (element) {
+          return (element.html() === "(this should be displayed)");
+        }), "Cutoff setting working fine");
+      });
+
+      test("should change dates newer than cutoff setting", function () {
+        ok(testElements("abbr.dontCutoffPast", function (element) {
+          return (element.html() === "less than a minute ago");
+        }), "Cutoff setting working fine");
+      });
+
+      test("should not change dates older than cutoff setting", function () {
+        ok(testElements("abbr.doCutoffFuture", function (element) {
+          return (element.html() === "(this should be displayed)");
+        }), "Cutoff setting working fine");
+      });
+
+      test("should change dates newer than cutoff setting", function () {
+        ok(testElements("abbr.dontCutoffFuture", function (element) {
+          return (element.html() === "less than a minute ago");
+        }), "Cutoff setting working fine");
+      });
+
+      module("Tooltip");
+
+      test("should set title to original text contents", function () {
+        ok($("#testTooltip").attr("title") == "February 26th", "correctly set");
+      });
+
+      test("should leave title alone if no text text content", function () {
+        ok($("#defaultTooltip").attr("title") == "2008-02-26", "correctly set");
+      });
+
+      test("should preserve title in time tags", function () {
+        ok(($("#testTimeTitle").attr('title') === "May 10, 2012 10:06"), "title preserved")
+      });
+
+      test("should set title in time tags without a title", function () {
+        ok(($("#testTimeTitle2").attr('title') === "May 10, 2012"), "title set")
+      });
+
+      module("Parsing");
+
+      // Note, different browsers behave slightly different
+      var correctMatch = /Mon, 18 Dec 1978 17:17:00 (GMT|UTC)/;
+
+      test("From Z", function () {
+        var time = $("#testParsing1");
+        ok((time.html().match(correctMatch)), "Incorrectly parsed " + time.attr("title"));
+      });
+
+      test("From -00:00", function () {
+        var time = $("#testParsing2");
+        ok((time.html().match(correctMatch)), "Incorrectly parsed " + time.attr("title"));
+      });
+
+      test("From -05:00", function () {
+        var time = $("#testParsing3");
+        ok((time.html().match(correctMatch)), "Incorrectly parsed " + time.attr("title"));
+      });
+
+      test("From -0500", function () {
+        var time = $("#testParsing4");
+        ok((time.html().match(correctMatch)), "Incorrectly parsed " + time.attr("title"));
+      });
+
+      test("From +09:00", function () {
+        var time = $("#testParsing5");
+        ok((time.html().match(correctMatch)), "Incorrectly parsed " + time.attr("title"));
+      });
+
+      test("From +0900", function () {
+        var time = $("#testParsing6");
+        ok((time.html().match(correctMatch)), "Incorrectly parsed " + time.attr("title"));
+      });
+
+      test("From blank TZ", function () {
+        var time = $("#testParsing7");
+        var correctMatch = /Mon, 18 Dec 1978 \d\d:17:00 (GMT|UTC)/;
+        ok((time.html().match(correctMatch)), "Incorrectly parsed " + time.attr("title"));
+      });
+
+      test("From Z with milliseconds", function () {
+        var time = $("#testParsing8");
+        ok((time.html().match(correctMatch)), "Incorrectly parsed " + time.attr("title"));
+      });
+
+      test("From Z with microseconds", function () {
+        var time = $("#testParsing9");
+        ok((time.html().match(correctMatch)), "Incorrectly parsed " + time.attr("title"));
+      });
+
+      test("From Z with tenths of a second", function () {
+        var time = $("#testParsing10");
+        ok((time.html().match(correctMatch)), "Incorrectly parsed " + time.attr("title"));
+      });
+
+      test("From Z with hundreths of a second", function () {
+        var time = $("#testParsing11");
+        ok((time.html().match(correctMatch)), "Incorrectly parsed " + time.attr("title"));
+      });
+
+      test("From +09", function () {
+        var time = $("#testParsing12");
+        ok((time.html().match(correctMatch)), "Incorrectly parsed " + time.attr("title"));
+      });
+
+      module("Wording");
+
+      test("-120 min", function () {
+        ok(($("#testWording1").html() === "about 2 hours from now"), "Incorrectly parsed");
+      });
+
+      test("-60 sec", function () {
+        ok(($("#testWording2").html() === "about a minute from now"), "Incorrectly parsed");
+      });
+
+      test("-30 sec", function () {
+        ok(($("#testWording3").html() === "less than a minute from now"), "Incorrectly parsed");
+      });
+
+      test("-1 sec", function () {
+        ok(($("#testWording4").html() === "less than a minute from now"), "Incorrectly parsed");
+      });
+
+      test("0 sec", function () {
+        ok(($("#testWording5").html() === "less than a minute ago"), "Incorrectly parsed");
+      });
+
+      test("30 sec", function () {
+        ok(($("#testWording6").html() === "less than a minute ago"), "Incorrectly parsed");
+      });
+
+      test("45 sec", function () {
+        ok(($("#testWording7").html() === "about a minute ago"), "Incorrectly parsed");
+      });
+
+      test("90 sec", function () {
+        ok(($("#testWording8").html() === "2 minutes ago"), "Incorrectly parsed");
+      });
+
+      test("120 sec", function () {
+        ok(($("#testWording9").html() === "2 minutes ago"), "Incorrectly parsed");
+      });
+
+      test("45 min", function () {
+        ok(($("#testWording10").html() === "about an hour ago"), "Incorrectly parsed");
+      });
+
+      test("89 min", function () {
+        ok(($("#testWording11").html() === "about an hour ago"), "Incorrectly parsed");
+      });
+
+      test("90 min", function () {
+        ok(($("#testWording12").html() === "about 2 hours ago"), "Incorrectly parsed");
+      });
+
+      test("120 min", function () {
+        ok(($("#testWording13").html() === "about 2 hours ago"), "Incorrectly parsed");
+      });
+
+      test("1380 min", function () {
+        ok(($("#testWording14").html() === "about 23 hours ago"), "Incorrectly parsed");
+      });
+
+      test("25 hours", function () {
+        ok(($("#testWording15").html() === "a day ago"), "Incorrectly parsed");
+      });
+
+      test("41 hour", function () {
+        ok(($("#testWording16a").html() === "a day ago"), "Incorrectly parsed");
+      });
+      test("42 hours", function () {
+        ok(($("#testWording16b").html() === "2 days ago"), "Incorrectly parsed");
+      });
+      test("48 hours", function () {
+        ok(($("#testWording16c").html() === "2 days ago"), "Incorrectly parsed");
+      });
+
+      test("696 hours", function () {
+        ok(($("#testWording17").html() === "29 days ago"), "Incorrectly parsed");
+      });
+
+      test("30 days", function () {
+        ok(($("#testWording18").html() === "about a month ago"), "Incorrectly parsed");
+      });
+
+      test("190 days", function () {
+        ok(($("#testWording19").html() === "6 months ago"), "Incorrectly parsed");
+      });
+
+      test("366 days", function () {
+        ok(($("#testWording20").html() === "about a year ago"), "Incorrectly parsed");
+      });
+
+      test("725 days", function () {
+        ok(($("#testWording21").html() === "2 years ago"), "Incorrectly parsed");
+      });
+
+      test("1095 days", function () {
+        ok(($("#testWording22").html() === "3 years ago"), "Incorrectly parsed");
+      });
+
+      module("Settings");
+
+      test("suffixFromNow", function () {
+        ok($("#testLatinSettings1").html().match(/omNow-fray$/), "Settings correctly applied");
+        ok($("#testMillisSettings1").html().match(/from now$/), "Settings correctly applied");
+      });
+
+      test("suffixAgo", function () {
+        ok($("#testLatinSettings5").html().match(/ago-hay$/), "Settings correctly applied");
+        ok($("#testRussianSettings5").html().match(/назад$/), "Settings correctly applied");
+        ok($("#testMillisSettings5").html().match(/ago/), "Settings correctly applied");
+      });
+
+      test("prefixFromNow", function () {
+        ok($("#testRussianSettings2").html().match(/^через/), "Settings correctly applied");
+      });
+
+      test("seconds", function () {
+        ok($("#testLatinSettings5").html().match(/^ess-lay an-thay a-hay inute-may/), "Settings correctly applied");
+        ok($("#testRussianSettings5").html().match(/^меньше минуты/), "Settings correctly applied");
+        ok($("#testMillisSettings5").html().match(/0 milliseconds/), "Settings correctly applied");
+      });
+
+      test("minute", function () {
+        ok($("#testLatinSettings7").html().match(/^about-hay a-hay inute-may/), "Settings correctly applied");
+        ok($("#testRussianSettings7").html().match(/^минуту/), "Settings correctly applied");
+        ok($("#testMillisSettings7").html().match(/45000 milliseconds/), "Settings correctly applied");
+      });
+
+      test("minutes", function () {
+        ok($("#testLatinSettings8").html().match(/^2 inutes-may/), "Settings correctly applied");
+        ok($("#testRussianSettings8").html().match(/^2 минуты/), "Settings correctly applied");
+        // TODO: Test "минута" and "минут"
+      });
+
+      test("hour", function () {
+        ok($("#testLatinSettings10").html().match(/^about-hay an-hay hour-hay/), "Settings correctly applied");
+        ok($("#testRussianSettings10").html().match(/^час/), "Settings correctly applied");
+      });
+
+      test("hours", function () {
+        ok($("#testLatinSettings12").html().match(/^about-hay 2 hours-hay/), "Settings correctly applied");
+        ok($("#testRussianSettings12").html().match(/^2 часа/), "Settings correctly applied");
+        // TODO: Test "час" and "часов"
+      });
+
+      test("day", function () {
+        ok($("#testLatinSettings15").html().match(/^a-hay ay-day/), "Settings correctly applied");
+        ok($("#testRussianSettings15").html().match(/^день/), "Settings correctly applied");
+      });
+
+      test("days", function () {
+        ok($("#testLatinSettings16").html().match(/^2 ays-day/), "Settings correctly applied");
+        ok($("#testRussianSettings16").html().match(/^2 дня/), "Settings correctly applied");
+        ok($("#testRussianSettings17").html().match(/^29 дней/), "Settings correctly applied");
+        // TODO: Test "день"
+      });
+
+      test("month", function () {
+        ok($("#testLatinSettings18").html().match(/^about-hay a-hay onth-may/), "Settings correctly applied");
+        ok($("#testRussianSettings18").html().match(/^месяц/), "Settings correctly applied");
+      });
+
+      test("months", function () {
+        ok($("#testLatinSettings19").html().match(/^6 onths-may/), "Settings correctly applied");
+        ok($("#testRussianSettings19").html().match(/^6 месяцев/), "Settings correctly applied");
+        // TODO: Test "месяца" and "месяц"
+      });
+
+      test("year", function () {
+        ok($("#testLatinSettings20").html().match(/^about-hay a-hay ear-yay/), "Settings correctly applied");
+        ok($("#testRussianSettings20").html().match(/^год/), "Settings correctly applied");
+      });
+
+      test("years", function () {
+        ok($("#testYoungOldSettings1").html().match(/^16 young years/), "Settings correctly applied");
+        ok($("#testYoungOldSettings2").html().match(/^64 old years/), "Settings correctly applied");
+        ok($("#testLatinSettings21").html().match(/^3 years-yay/), "Settings correctly applied");
+        ok($("#testRussianSettings21").html().match(/^3 года/), "Settings correctly applied");
+        // TODO: Test "год" and "лет"
+      });
+
+      test("numbers", function () {
+        ok($("#testNumbersSettings1").html().match(/^two minutes/), "Settings correctly applied");
+        ok($("#testNumbersSettings2").html().match(/^nine minutes/), "Settings correctly applied");
+        ok($("#testNumbersSettings3").html().match(/^10 minutes/), "Settings correctly applied");
+      });
+
+      test("wordSeparator", function () {
+        ok($("#testNoSpaces1").html().match(/^2minutesago$/), "Settings correctly applied");
+        ok($("#testNullSpaces1").html().match(/^2minutesago$/), "Settings correctly applied");
+      });
+
+      module("Allow Future and Past");
+
+      // if allowFuture is false, then a minute into the future is actually reported as a minute in the past.
+      // we did not want to alter the current behavior and break backwards compatability
+      test("allow future false with a future date moves time backwards", function () {
+        equal($("#testAllowFutureFalse1").html(), "2 years ago");
+      });
+
+      test("allow future false with a future date moves time backwards", function () {
+        equal($("#testAllowPastFalse1").html(), "in the past");
+      });
+
+      test("throws if allowPast and allowFuture are both false", function () {
+        // setup
+        var origAllowFuture = $.timeago.settings.allowFuture;
+        var origAllowPast = $.timeago.settings.allowPast;
+        $.timeago.settings.allowFuture = false;
+        $.timeago.settings.allowPast = false;
+
+        try {
+          throws(function () {
+            $("#testAllowPastAndFutureFalse").timeago();
+          });
+        } finally {
+          // teardown
+          $.timeago.settings.allowFuture = origAllowFuture;
+          $.timeago.settings.allowPast = origAllowPast;
+        }
+      });
+
+      module("Disposal");
+
+      asyncTest("disposal", function() {
+        $(".disposal.disposed").timeago('dispose');
+        var initialTime_disposedTimeago = $(".disposal.disposed").html();
+        var initialTime_activeTimeago = $(".disposal.notDisposed").html();
+
+        expect(2);
+        setTimeout(function() {
+          var updatedTime_disposedTimeago = $(".disposal.disposed").html();
+          var updatedTime_activeTimeago = $(".disposal.notDisposed").html();
+
+          ok(initialTime_disposedTimeago === updatedTime_disposedTimeago, "A disposed timeago didn't get updated");
+          ok(initialTime_activeTimeago !== updatedTime_activeTimeago, "A non-disposed timeago continued to be updated");
+
+          // Dispose still-active timeago
+          $(".disposal.notDisposed").timeago('dispose');
+          resetRefreshMillis();
+          start();
+        }, 50);
+      });
+    })(jQuery);
+    //]]>
+  </script>
+</body>
+</html>
diff --git a/test/test_helpers.js b/test/test_helpers.js
new file mode 100644
index 0000000..2438c3f
--- /dev/null
+++ b/test/test_helpers.js
@@ -0,0 +1,179 @@
+var zeropad = function (num) {
+  return ((num < 10) ? '0' : '') + num;
+};
+var iso8601 = function (date) {
+  return date.getUTCFullYear()
+    + "-" + zeropad(date.getUTCMonth()+1)
+    + "-" + zeropad(date.getUTCDate())
+    + "T" + zeropad(date.getUTCHours())
+    + ":" + zeropad(date.getUTCMinutes())
+    + ":" + zeropad(date.getUTCSeconds()) + "Z";
+};
+
+function prepareDynamicDates() {
+  $('abbr.loaded').attr("title", iso8601(new Date()));
+  $('abbr.modified').attr("title", iso8601(new Date(document.lastModified)));
+}
+
+function loadNumbers() {
+  jQuery.timeago.settings.strings.numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
+}
+function unloadNumbers() {
+  jQuery.timeago.settings.strings.numbers = [];
+}
+
+function loadCutoffSetting() {
+	jQuery.timeago.settings.cutoff = 7*24*60*60*1000;
+}
+
+function unloadCutoffSetting() {
+	jQuery.timeago.settings.cutoff = 0;
+}
+
+function setupDisposal() {
+  jQuery.timeago.settings.refreshMillis = 50;
+  $('abbr.disposal').attr("title", iso8601(new Date())).timeago();
+}
+
+function loadPigLatin() {
+  jQuery.timeago.settings.strings = {
+    suffixAgo: "ago-hay",
+    suffixFromNow: "omNow-fray",
+    seconds: "ess-lay an-thay a-hay inute-may",
+    minute: "about-hay a-hay inute-may",
+    minutes: "%d inutes-may",
+    hour: "about-hay an-hay hour-hay",
+    hours: "about-hay %d hours-hay",
+    day: "a-hay ay-day",
+    days: "%d ays-day",
+    month: "about-hay a-hay onth-may",
+    months: "%d onths-may",
+    year: "about-hay a-hay ear-yay",
+    years: "%d years-yay"
+  };
+}
+
+function loadRussian() {
+  (function() {
+    function numpf(n, f, s, t) {
+      // f - 1, 21, 31, ...
+      // s - 2-4, 22-24, 32-34 ...
+      // t - 5-20, 25-30, ...
+      var n10 = n % 10;
+      if ( (n10 == 1) && ( (n == 1) || (n > 20) ) ) {
+        return f;
+      } else if ( (n10 > 1) && (n10 < 5) && ( (n > 20) || (n < 10) ) ) {
+        return s;
+      } else {
+        return t;
+      }
+    }
+
+    jQuery.timeago.settings.strings = {
+      prefixAgo: null,
+      prefixFromNow: "через",
+      suffixAgo: "назад",
+      suffixFromNow: null,
+      seconds: "меньше минуты",
+      minute: "минуту",
+      minutes: function(value) { return numpf(value, "%d минута", "%d минуты", "%d минут"); },
+      hour: "час",
+      hours: function(value) { return numpf(value, "%d час", "%d часа", "%d часов"); },
+      day: "день",
+      days: function(value) { return numpf(value, "%d день", "%d дня", "%d дней"); },
+      month: "месяц",
+      months: function(value) { return numpf(value, "%d месяц", "%d месяца", "%d месяцев"); },
+      year: "год",
+      years: function(value) { return numpf(value, "%d год", "%d года", "%d лет"); }
+    };
+  })();
+}
+
+function resetRefreshMillis() {
+  jQuery.timeago.settings.refreshMillis = 60000;
+}
+
+function loadMillis() {
+  var millisSubstitution = function(number, millis) { return millis + " milliseconds"; };
+  jQuery.timeago.settings.strings = {
+    suffixAgo: "ago",
+    suffixFromNow: "from now",
+    seconds: millisSubstitution,
+    minute: millisSubstitution,
+    minutes: millisSubstitution,
+    hour: millisSubstitution,
+    hours: millisSubstitution,
+    day: millisSubstitution,
+    days: millisSubstitution,
+    month: millisSubstitution,
+    months: millisSubstitution,
+    year: millisSubstitution,
+    years: millisSubstitution
+  };
+}
+
+function loadNoSpaces() {
+  jQuery.extend(jQuery.timeago.settings.strings, {
+    minutes: "%dminutes",
+    wordSeparator: ""
+  });
+}
+
+function loadNullSpaces() {
+  jQuery.extend(jQuery.timeago.settings.strings, {
+    minutes: "%dminutes",
+    wordSeparator: null
+  });
+}
+
+function loadYoungOldYears() {
+  jQuery.extend(jQuery.timeago.settings.strings, {
+    years: function(value) { return (value < 21) ? "%d young years" : "%d old years"; }
+  });
+}
+
+function loadDoNotAllowFuture() {
+  var mockDateToUse = "2010-01-01";
+  $.timeago.settings.allowFuture = false;
+  enableMockedDate(mockDateToUse);
+}
+
+function unloadDoNotAllowFuture() {
+  $.timeago.settings.allowFuture = true;
+  disableMockedDate();
+}
+
+function loadDoNotAllowPast() {
+  var mockDateToUse = "2010-01-01";
+  $.timeago.settings.allowFuture = true;
+  $.timeago.settings.allowPast = false;
+  $.timeago.settings.strings.inPast = "in the past";
+  enableMockedDate(mockDateToUse);
+}
+
+function unloadDoNotAllowPast() {
+  $.timeago.settings.allowFuture = true;
+  $.timeago.settings.allowPast = true;
+  disableMockedDate();
+}
+
+function enableMockedDate(dateToReturn) {
+  var mockDate = dateToReturn;
+  window.NativeDate = Date;
+  window.Date = function () {
+    if(arguments.length === 0) {
+      return new window.NativeDate(mockDate);
+    } else if(arguments.length === 1) {
+      return new window.NativeDate(arguments[0]);
+    } else  if(arguments.length === 7) {
+      return new window.NativeDate(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6]);
+    } else {
+      throw "Mocking Date with this number of parameters is not implemented.";
+    }
+  }
+}
+
+function disableMockedDate() {
+  window.Date = window.NativeDate;
+  delete window.NativeDate;
+}
\ No newline at end of file
diff --git a/timeago.jquery.json b/timeago.jquery.json
new file mode 100644
index 0000000..7b21693
--- /dev/null
+++ b/timeago.jquery.json
@@ -0,0 +1,30 @@
+{
+  "name": "timeago",
+  "version": "1.4.1",
+  "title": "jQuery Timeago",
+  "author": {
+    "name": "Ryan McGeary",
+    "email": "ryan at mcgeary.org",
+    "url": "http://ryan.mcgeary.org/"
+  },
+  "licenses": [
+    {
+      "type": "MIT",
+      "url": "http://opensource.org/licenses/mit-license.php"
+    }
+  ],
+  "dependencies": {
+    "jquery": ">=1.2.3"
+  },
+  "description": "jQuery plugin that makes it easy to support automatically updating fuzzy timestamps (e.g. \"4 minutes ago\" or \"about 1 day ago\").",
+  "keywords": [
+    "time",
+    "microformat"
+  ],
+  "homepage": "http://timeago.yarp.com/",
+  "docs": "https://github.com/rmm5t/jquery-timeago",
+  "demo": "http://timeago.yarp.com/",
+  "download": "http://timeago.yarp.com/jquery.timeago.js",
+  "bugs": "https://github.com/rmm5t/jquery-timeago/issues",
+  "maintainers": []
+}
diff --git a/vendor/cache/fssm-0.2.0.gem b/vendor/cache/fssm-0.2.0.gem
new file mode 100644
index 0000000..13b47c2
Binary files /dev/null and b/vendor/cache/fssm-0.2.0.gem differ

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/libjs-jquery-timeago.git



More information about the Pkg-javascript-commits mailing list