Simple History - Version 2.5.2

Version Description

(February 2016) =

  • Added: The GUI log now updates the relative "fuzzy" timestamps in real time. This means that if you keep the log opened, the relative date for each event, for example "2 minutes ago" or "2 hours ago", will always be up to date (hah!). Keep the log opened for 5 minutes and you will see that the event that previously said "2 minutes ago" now says "7 minutes ago". Fixes https://github.com/bonny/WordPress-Simple-History/issues/88 and is implemented using the great timeago jquery plugin.
  • Added: Filter simple_history/user_logger/plain_text_output_use_you. Works the same way as the simple_history/header_initiator_use_you filter, but for the rich text part when a user has edited their profile.
  • Fixed: Logger slugs that contained for example backslashes (becuase they where namespaced) would not show up in the log. Now logger slugs are escaped. Fixes https://github.com/bonny/WordPress-Simple-History/issues/103.
  • Changed: Actions and things that only is needed in admin area are now only called if is_admin(). Fixes https://github.com/bonny/WordPress-Simple-History/issues/105.
Download this release

Release Info

Developer eskapism
Plugin Icon 128x128 Simple History
Version 2.5.2
Comparing to
See all releases

Code changes from version 2.5.1 to 2.5.2

Files changed (67) hide show
  1. inc/SimpleHistory.php +61 -19
  2. index.php +2 -2
  3. js/scripts.js +29 -0
  4. js/timeago/jquery.timeago.js +225 -0
  5. js/timeago/locales/jquery.timeago.af.js +20 -0
  6. js/timeago/locales/jquery.timeago.ar.js +96 -0
  7. js/timeago/locales/jquery.timeago.bg.js +18 -0
  8. js/timeago/locales/jquery.timeago.bs.js +49 -0
  9. js/timeago/locales/jquery.timeago.ca.js +18 -0
  10. js/timeago/locales/jquery.timeago.cs.js +24 -0
  11. js/timeago/locales/jquery.timeago.cy.js +20 -0
  12. js/timeago/locales/jquery.timeago.da.js +18 -0
  13. js/timeago/locales/jquery.timeago.de.js +18 -0
  14. js/timeago/locales/jquery.timeago.dv.js +22 -0
  15. js/timeago/locales/jquery.timeago.el.js +18 -0
  16. js/timeago/locales/jquery.timeago.en-short.js +20 -0
  17. js/timeago/locales/jquery.timeago.en.js +20 -0
  18. js/timeago/locales/jquery.timeago.es-short.js +20 -0
  19. js/timeago/locales/jquery.timeago.es.js +18 -0
  20. js/timeago/locales/jquery.timeago.et.js +18 -0
  21. js/timeago/locales/jquery.timeago.eu.js +17 -0
  22. js/timeago/locales/jquery.timeago.fa-short.js +20 -0
  23. js/timeago/locales/jquery.timeago.fa.js +22 -0
  24. js/timeago/locales/jquery.timeago.fi.js +28 -0
  25. js/timeago/locales/jquery.timeago.fr-short.js +16 -0
  26. js/timeago/locales/jquery.timeago.fr.js +17 -0
  27. js/timeago/locales/jquery.timeago.gl.js +18 -0
  28. js/timeago/locales/jquery.timeago.he.js +16 -0
  29. js/timeago/locales/jquery.timeago.hr.js +49 -0
  30. js/timeago/locales/jquery.timeago.hu.js +18 -0
  31. js/timeago/locales/jquery.timeago.hy.js +18 -0
  32. js/timeago/locales/jquery.timeago.id.js +18 -0
  33. js/timeago/locales/jquery.timeago.is.js +19 -0
  34. js/timeago/locales/jquery.timeago.it-short.js +20 -0
  35. js/timeago/locales/jquery.timeago.it.js +16 -0
  36. js/timeago/locales/jquery.timeago.ja.js +19 -0
  37. js/timeago/locales/jquery.timeago.jv.js +18 -0
  38. js/timeago/locales/jquery.timeago.ko.js +20 -0
  39. js/timeago/locales/jquery.timeago.ky.js +34 -0
  40. js/timeago/locales/jquery.timeago.lt.js +20 -0
  41. js/timeago/locales/jquery.timeago.lv.js +20 -0
  42. js/timeago/locales/jquery.timeago.mk.js +20 -0
  43. js/timeago/locales/jquery.timeago.nl.js +20 -0
  44. js/timeago/locales/jquery.timeago.no.js +18 -0
  45. js/timeago/locales/jquery.timeago.pl.js +31 -0
  46. js/timeago/locales/jquery.timeago.pt-br-short.js +20 -0
  47. js/timeago/locales/jquery.timeago.pt-br.js +18 -0
  48. js/timeago/locales/jquery.timeago.pt-short.js +20 -0
  49. js/timeago/locales/jquery.timeago.pt.js +16 -0
  50. js/timeago/locales/jquery.timeago.ro.js +18 -0
  51. js/timeago/locales/jquery.timeago.rs.js +49 -0
  52. js/timeago/locales/jquery.timeago.ru.js +34 -0
  53. js/timeago/locales/jquery.timeago.rw.js +20 -0
  54. js/timeago/locales/jquery.timeago.si.js +18 -0
  55. js/timeago/locales/jquery.timeago.sk.js +18 -0
  56. js/timeago/locales/jquery.timeago.sl.js +40 -0
  57. js/timeago/locales/jquery.timeago.sr.js +49 -0
  58. js/timeago/locales/jquery.timeago.sv.js +18 -0
  59. js/timeago/locales/jquery.timeago.th.js +20 -0
  60. js/timeago/locales/jquery.timeago.tr.js +16 -0
  61. js/timeago/locales/jquery.timeago.uk.js +34 -0
  62. js/timeago/locales/jquery.timeago.uz.js +19 -0
  63. js/timeago/locales/jquery.timeago.vi.js +20 -0
  64. js/timeago/locales/jquery.timeago.zh-CN.js +20 -0
  65. js/timeago/locales/jquery.timeago.zh-TW.js +20 -0
  66. loggers/SimpleUserLogger.php +3 -1
  67. readme.txt +10 -2
inc/SimpleHistory.php CHANGED
@@ -68,6 +68,15 @@ class SimpleHistory {
68
 
69
  function __construct() {
70
 
 
 
 
 
 
 
 
 
 
71
  /**
72
  * Fires before Simple History does it's init stuff
73
  *
@@ -96,30 +105,17 @@ class SimpleHistory {
96
 
97
  add_action( 'after_setup_theme', array( $this, 'setup_cron' ) );
98
 
99
- add_action( 'admin_menu', array( $this, 'add_admin_pages' ) );
100
- add_action( 'admin_menu', array( $this, 'add_settings' ) );
101
-
102
- add_action( 'admin_footer', array( $this, "add_js_templates" ) );
103
-
104
- add_action( 'wp_dashboard_setup', array( $this, 'add_dashboard_widget' ) );
105
-
106
- add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_scripts' ) );
107
-
108
- add_action( 'admin_head', array( $this, "onAdminHead" ) );
109
- add_action( 'admin_footer', array( $this, "onAdminFooter" ) );
110
-
111
  // Filters and actions not called during regular boot
112
  add_filter( "gettext", array( $this, 'filter_gettext' ), 20, 3 );
113
  add_filter( "gettext_with_context", array( $this, 'filter_gettext_with_context' ), 20, 4 );
114
 
115
  add_filter( 'gettext', array( $this, "filter_gettext_storeLatestTranslations" ), 10, 3 );
116
 
117
- add_action( 'simple_history/history_page/before_gui', array( $this, "output_quick_stats" ) );
118
- add_action( 'simple_history/dashboard/before_gui', array( $this, "output_quick_stats" ) );
119
-
120
- add_action( 'wp_ajax_simple_history_api', array( $this, 'api' ) );
121
 
122
- add_filter( 'plugin_action_links_simple-history/index.php', array( $this, 'plugin_action_links' ), 10, 4 );
123
 
124
  /**
125
  * Fires after Simple History has done it's init stuff
@@ -160,6 +156,32 @@ class SimpleHistory {
160
 
161
  }
162
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
163
  /**
164
  * Get singleton intance
165
  * @return SimpleHistory instance
@@ -1102,6 +1124,22 @@ class SimpleHistory {
1102
  }
1103
  }
1104
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1105
  /**
1106
  * Fires when the admin scripts have been enqueued.
1107
  * Only fires on any of the pages where Simple History is used
@@ -1912,7 +1950,11 @@ Because Simple History was just recently installed, this feed does not contain m
1912
  $table_name_contexts = $wpdb->prefix . SimpleHistory::DBTABLE_CONTEXTS;
1913
 
1914
  // Get id of rows to delete
1915
- $sql = "SELECT id FROM {$table_name} WHERE DATE_ADD(date, INTERVAL $days DAY) < now()";
 
 
 
 
1916
 
1917
  $ids_to_delete = $wpdb->get_col( $sql );
1918
 
@@ -2553,7 +2595,7 @@ Because Simple History was just recently installed, this feed does not contain m
2553
 
2554
  $str_return .= sprintf(
2555
  '"%1$s", ',
2556
- $one_logger["instance"]->slug
2557
  );
2558
 
2559
  }
68
 
69
  function __construct() {
70
 
71
+ $this->init();
72
+
73
+ } // construct
74
+
75
+ /**
76
+ * @since 2.5.2
77
+ */
78
+ public function init() {
79
+
80
  /**
81
  * Fires before Simple History does it's init stuff
82
  *
105
 
106
  add_action( 'after_setup_theme', array( $this, 'setup_cron' ) );
107
 
 
 
 
 
 
 
 
 
 
 
 
 
108
  // Filters and actions not called during regular boot
109
  add_filter( "gettext", array( $this, 'filter_gettext' ), 20, 3 );
110
  add_filter( "gettext_with_context", array( $this, 'filter_gettext_with_context' ), 20, 4 );
111
 
112
  add_filter( 'gettext', array( $this, "filter_gettext_storeLatestTranslations" ), 10, 3 );
113
 
114
+ if ( is_admin() ) {
115
+
116
+ $this->add_admin_actions();
 
117
 
118
+ }
119
 
120
  /**
121
  * Fires after Simple History has done it's init stuff
156
 
157
  }
158
 
159
+ /**
160
+ * @since 2.5.2
161
+ */
162
+ private function add_admin_actions() {
163
+
164
+ add_action( 'admin_menu', array( $this, 'add_admin_pages' ) );
165
+ add_action( 'admin_menu', array( $this, 'add_settings' ) );
166
+
167
+ add_action( 'admin_footer', array( $this, "add_js_templates" ) );
168
+
169
+ add_action( 'wp_dashboard_setup', array( $this, 'add_dashboard_widget' ) );
170
+
171
+ add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_scripts' ) );
172
+
173
+ add_action( 'admin_head', array( $this, "onAdminHead" ) );
174
+ add_action( 'admin_footer', array( $this, "onAdminFooter" ) );
175
+
176
+ add_action( 'simple_history/history_page/before_gui', array( $this, "output_quick_stats" ) );
177
+ add_action( 'simple_history/dashboard/before_gui', array( $this, "output_quick_stats" ) );
178
+
179
+ add_action( 'wp_ajax_simple_history_api', array( $this, 'api' ) );
180
+
181
+ add_filter( 'plugin_action_links_simple-history/index.php', array( $this, 'plugin_action_links' ), 10, 4 );
182
+
183
+ }
184
+
185
  /**
186
  * Get singleton intance
187
  * @return SimpleHistory instance
1124
  }
1125
  }
1126
 
1127
+ // Add timeago.js
1128
+ wp_enqueue_script( 'timeago', SIMPLE_HISTORY_DIR_URL . 'js/timeago/jquery.timeago.js', array("jquery"), '1.5.2', true );
1129
+
1130
+ // Determine current locale to load timeago locale
1131
+ $locale = strtolower( substr( get_locale(), 0, 2 ) );
1132
+ $locale_url_path = SIMPLE_HISTORY_DIR_URL . 'js/timeago/locales/jquery.timeago.%s.js';
1133
+ $locale_dir_path = SIMPLE_HISTORY_PATH . 'js/timeago/locales/jquery.timeago.%s.js';
1134
+
1135
+ // Only enqueue if locale-file exists on file system
1136
+ if ( file_exists( sprintf( $locale_dir_path, $locale ) ) ) {
1137
+ wp_enqueue_script( 'timeago-locale', sprintf( $locale_url_path, $locale ), array("jquery"), '1.5.2', true );
1138
+ } else {
1139
+ wp_enqueue_script( 'timeago-locale', sprintf( $locale_url_path, "en" ), array("jquery"), '1.5.2', true );
1140
+ }
1141
+ // end add timeago
1142
+
1143
  /**
1144
  * Fires when the admin scripts have been enqueued.
1145
  * Only fires on any of the pages where Simple History is used
1950
  $table_name_contexts = $wpdb->prefix . SimpleHistory::DBTABLE_CONTEXTS;
1951
 
1952
  // Get id of rows to delete
1953
+ $sql = $wpdb->prepare(
1954
+ "SELECT id FROM %s WHERE DATE_ADD(date, INTERVAL %d DAY) < now()",
1955
+ $table_name,
1956
+ $days
1957
+ );
1958
 
1959
  $ids_to_delete = $wpdb->get_col( $sql );
1960
 
2595
 
2596
  $str_return .= sprintf(
2597
  '"%1$s", ',
2598
+ esc_sql( $one_logger["instance"]->slug )
2599
  );
2600
 
2601
  }
index.php CHANGED
@@ -5,7 +5,7 @@ Plugin URI: http://simple-history.com
5
  Text Domain: simple-history
6
  Domain Path: /languages
7
  Description: Plugin that logs various things that occur in WordPress and then presents those events in a very nice GUI.
8
- Version: 2.5.1
9
  Author: Pär Thernström
10
  Author URI: http://simple-history.com/
11
  License: GPL2
@@ -42,7 +42,7 @@ if ( version_compare( phpversion(), "5.3", ">=") ) {
42
  // register_activation_hook( trailingslashit(WP_PLUGIN_DIR) . trailingslashit( plugin_basename(__DIR__) ) . "index.php" , array("SimpleHistory", "on_plugin_activate" ) );
43
 
44
  if ( ! defined( 'SIMPLE_HISTORY_VERSION' ) ) {
45
- define( 'SIMPLE_HISTORY_VERSION', '2.5.1' );
46
  }
47
 
48
  if ( ! defined( 'SIMPLE_HISTORY_PATH' ) ) {
5
  Text Domain: simple-history
6
  Domain Path: /languages
7
  Description: Plugin that logs various things that occur in WordPress and then presents those events in a very nice GUI.
8
+ Version: 2.5.2
9
  Author: Pär Thernström
10
  Author URI: http://simple-history.com/
11
  License: GPL2
42
  // register_activation_hook( trailingslashit(WP_PLUGIN_DIR) . trailingslashit( plugin_basename(__DIR__) ) . "index.php" , array("SimpleHistory", "on_plugin_activate" ) );
43
 
44
  if ( ! defined( 'SIMPLE_HISTORY_VERSION' ) ) {
45
+ define( 'SIMPLE_HISTORY_VERSION', '2.5.2' );
46
  }
47
 
48
  if ( ! defined( 'SIMPLE_HISTORY_PATH' ) ) {
js/scripts.js CHANGED
@@ -736,6 +736,9 @@ var simple_history = (function($) {
736
 
737
  })(jQuery);
738
 
 
 
 
739
  jQuery(".js-SimpleHistory-Settings-ClearLog").on("click", function(e) {
740
 
741
  if (confirm(simple_history_script_vars.settingsConfirmClearLog)) {
@@ -745,3 +748,29 @@ jQuery(".js-SimpleHistory-Settings-ClearLog").on("click", function(e) {
745
  }
746
 
747
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
736
 
737
  })(jQuery);
738
 
739
+ /**
740
+ * When the clear-log-button in admin is clicked then check that users really wants to clear the log
741
+ */
742
  jQuery(".js-SimpleHistory-Settings-ClearLog").on("click", function(e) {
743
 
744
  if (confirm(simple_history_script_vars.settingsConfirmClearLog)) {
748
  }
749
 
750
  });
751
+
752
+ /**
753
+ * Add support for TimeAgo
754
+ */
755
+ (function($) {
756
+
757
+ var $document = $(document);
758
+
759
+ // called on first load + on pagination
760
+ $document.on("SimpleHistory:logLoaded", addTimeAgo);
761
+
762
+ // when log is loaded and when occassions are loaded
763
+ $document.on("SimpleHistory:logRowsCollectionOccasionsLoaded", addTimeAgo);
764
+
765
+
766
+ function addTimeAgo() {
767
+
768
+ console.log("addTimeAgo()");
769
+
770
+ $(".SimpleHistoryLogitem__when time").timeago();
771
+
772
+ }
773
+
774
+
775
+ })(jQuery);
776
+
js/timeago/jquery.timeago.js ADDED
@@ -0,0 +1,225 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Timeago is a jQuery plugin that makes it easy to support automatically
3
+ * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago").
4
+ *
5
+ * @name timeago
6
+ * @version 1.5.2
7
+ * @requires jQuery v1.2.3+
8
+ * @author Ryan McGeary
9
+ * @license MIT License - http://www.opensource.org/licenses/mit-license.php
10
+ *
11
+ * For usage and examples, visit:
12
+ * http://timeago.yarp.com/
13
+ *
14
+ * Copyright (c) 2008-2015, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org)
15
+ */
16
+
17
+ (function (factory) {
18
+ if (typeof define === 'function' && define.amd) {
19
+ // AMD. Register as an anonymous module.
20
+ define(['jquery'], factory);
21
+ } else if (typeof module === 'object' && typeof module.exports === 'object') {
22
+ factory(require('jquery'));
23
+ } else {
24
+ // Browser globals
25
+ factory(jQuery);
26
+ }
27
+ }(function ($) {
28
+ $.timeago = function(timestamp) {
29
+ if (timestamp instanceof Date) {
30
+ return inWords(timestamp);
31
+ } else if (typeof timestamp === "string") {
32
+ return inWords($.timeago.parse(timestamp));
33
+ } else if (typeof timestamp === "number") {
34
+ return inWords(new Date(timestamp));
35
+ } else {
36
+ return inWords($.timeago.datetime(timestamp));
37
+ }
38
+ };
39
+ var $t = $.timeago;
40
+
41
+ $.extend($.timeago, {
42
+ settings: {
43
+ refreshMillis: 60000,
44
+ allowPast: true,
45
+ allowFuture: false,
46
+ localeTitle: false,
47
+ cutoff: 0,
48
+ autoDispose: true,
49
+ strings: {
50
+ prefixAgo: null,
51
+ prefixFromNow: null,
52
+ suffixAgo: "ago",
53
+ suffixFromNow: "from now",
54
+ inPast: 'any moment now',
55
+ seconds: "less than a minute",
56
+ minute: "about a minute",
57
+ minutes: "%d minutes",
58
+ hour: "about an hour",
59
+ hours: "about %d hours",
60
+ day: "a day",
61
+ days: "%d days",
62
+ month: "about a month",
63
+ months: "%d months",
64
+ year: "about a year",
65
+ years: "%d years",
66
+ wordSeparator: " ",
67
+ numbers: []
68
+ }
69
+ },
70
+
71
+ inWords: function(distanceMillis) {
72
+ if (!this.settings.allowPast && ! this.settings.allowFuture) {
73
+ throw 'timeago allowPast and allowFuture settings can not both be set to false.';
74
+ }
75
+
76
+ var $l = this.settings.strings;
77
+ var prefix = $l.prefixAgo;
78
+ var suffix = $l.suffixAgo;
79
+ if (this.settings.allowFuture) {
80
+ if (distanceMillis < 0) {
81
+ prefix = $l.prefixFromNow;
82
+ suffix = $l.suffixFromNow;
83
+ }
84
+ }
85
+
86
+ if (!this.settings.allowPast && distanceMillis >= 0) {
87
+ return this.settings.strings.inPast;
88
+ }
89
+
90
+ var seconds = Math.abs(distanceMillis) / 1000;
91
+ var minutes = seconds / 60;
92
+ var hours = minutes / 60;
93
+ var days = hours / 24;
94
+ var years = days / 365;
95
+
96
+ function substitute(stringOrFunction, number) {
97
+ var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
98
+ var value = ($l.numbers && $l.numbers[number]) || number;
99
+ return string.replace(/%d/i, value);
100
+ }
101
+
102
+ var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
103
+ seconds < 90 && substitute($l.minute, 1) ||
104
+ minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
105
+ minutes < 90 && substitute($l.hour, 1) ||
106
+ hours < 24 && substitute($l.hours, Math.round(hours)) ||
107
+ hours < 42 && substitute($l.day, 1) ||
108
+ days < 30 && substitute($l.days, Math.round(days)) ||
109
+ days < 45 && substitute($l.month, 1) ||
110
+ days < 365 && substitute($l.months, Math.round(days / 30)) ||
111
+ years < 1.5 && substitute($l.year, 1) ||
112
+ substitute($l.years, Math.round(years));
113
+
114
+ var separator = $l.wordSeparator || "";
115
+ if ($l.wordSeparator === undefined) { separator = " "; }
116
+ return $.trim([prefix, words, suffix].join(separator));
117
+ },
118
+
119
+ parse: function(iso8601) {
120
+ var s = $.trim(iso8601);
121
+ s = s.replace(/\.\d+/,""); // remove milliseconds
122
+ s = s.replace(/-/,"/").replace(/-/,"/");
123
+ s = s.replace(/T/," ").replace(/Z/," UTC");
124
+ s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400
125
+ s = s.replace(/([\+\-]\d\d)$/," $100"); // +09 -> +0900
126
+ return new Date(s);
127
+ },
128
+ datetime: function(elem) {
129
+ var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title");
130
+ return $t.parse(iso8601);
131
+ },
132
+ isTime: function(elem) {
133
+ // jQuery's `is()` doesn't play well with HTML5 in IE
134
+ return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time");
135
+ }
136
+ });
137
+
138
+ // functions that can be called via $(el).timeago('action')
139
+ // init is default when no action is given
140
+ // functions are called with context of a single element
141
+ var functions = {
142
+ init: function() {
143
+ var refresh_el = $.proxy(refresh, this);
144
+ refresh_el();
145
+ var $s = $t.settings;
146
+ if ($s.refreshMillis > 0) {
147
+ this._timeagoInterval = setInterval(refresh_el, $s.refreshMillis);
148
+ }
149
+ },
150
+ update: function(timestamp) {
151
+ var date = (timestamp instanceof Date) ? timestamp : $t.parse(timestamp);
152
+ $(this).data('timeago', { datetime: date });
153
+ if ($t.settings.localeTitle) $(this).attr("title", date.toLocaleString());
154
+ refresh.apply(this);
155
+ },
156
+ updateFromDOM: function() {
157
+ $(this).data('timeago', { datetime: $t.parse( $t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title") ) });
158
+ refresh.apply(this);
159
+ },
160
+ dispose: function () {
161
+ if (this._timeagoInterval) {
162
+ window.clearInterval(this._timeagoInterval);
163
+ this._timeagoInterval = null;
164
+ }
165
+ }
166
+ };
167
+
168
+ $.fn.timeago = function(action, options) {
169
+ var fn = action ? functions[action] : functions.init;
170
+ if (!fn) {
171
+ throw new Error("Unknown function name '"+ action +"' for timeago");
172
+ }
173
+ // each over objects here and call the requested function
174
+ this.each(function() {
175
+ fn.call(this, options);
176
+ });
177
+ return this;
178
+ };
179
+
180
+ function refresh() {
181
+ var $s = $t.settings;
182
+
183
+ //check if it's still visible
184
+ if ($s.autoDispose && !$.contains(document.documentElement,this)) {
185
+ //stop if it has been removed
186
+ $(this).timeago("dispose");
187
+ return this;
188
+ }
189
+
190
+ var data = prepareData(this);
191
+
192
+ if (!isNaN(data.datetime)) {
193
+ if ( $s.cutoff == 0 || Math.abs(distance(data.datetime)) < $s.cutoff) {
194
+ $(this).text(inWords(data.datetime));
195
+ }
196
+ }
197
+ return this;
198
+ }
199
+
200
+ function prepareData(element) {
201
+ element = $(element);
202
+ if (!element.data("timeago")) {
203
+ element.data("timeago", { datetime: $t.datetime(element) });
204
+ var text = $.trim(element.text());
205
+ if ($t.settings.localeTitle) {
206
+ element.attr("title", element.data('timeago').datetime.toLocaleString());
207
+ } else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) {
208
+ element.attr("title", text);
209
+ }
210
+ }
211
+ return element.data("timeago");
212
+ }
213
+
214
+ function inWords(date) {
215
+ return $t.inWords(distance(date));
216
+ }
217
+
218
+ function distance(date) {
219
+ return (new Date().getTime() - date.getTime());
220
+ }
221
+
222
+ // fix for IE6 suckage
223
+ document.createElement("abbr");
224
+ document.createElement("time");
225
+ }));
js/timeago/locales/jquery.timeago.af.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Afrikaans
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: null,
4
+ prefixFromNow: null,
5
+ suffixAgo: "gelede",
6
+ suffixFromNow: "van nou af",
7
+ seconds: "%d sekondes",
8
+ minute: "1 minuut",
9
+ minutes: "%d minute",
10
+ hour: "1 uur",
11
+ hours: "%d ure",
12
+ day: "1 dag",
13
+ days: "%d dae",
14
+ month: "1 maand",
15
+ months: "%d maande",
16
+ year: "1 jaar",
17
+ years: "%d jaar",
18
+ wordSeparator: " ",
19
+ numbers: []
20
+ };
js/timeago/locales/jquery.timeago.ar.js ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function() {
2
+ function numpf(n, a) {
3
+ return a[plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5];
4
+ }
5
+
6
+ jQuery.timeago.settings.strings = {
7
+ prefixAgo: "منذ",
8
+ prefixFromNow: "بعد",
9
+ suffixAgo: null,
10
+ suffixFromNow: null, // null OR "من الآن"
11
+ second: function(value) { return numpf(value, [
12
+ 'أقل من ثانية',
13
+ 'ثانية واحدة',
14
+ 'ثانيتين',
15
+ '%d ثوانٍ',
16
+ '%d ثانية',
17
+ '%d ثانية']); },
18
+ seconds: function(value) { return numpf(value, [
19
+ 'أقل من ثانية',
20
+ 'ثانية واحدة',
21
+ 'ثانيتين',
22
+ '%d ثوانٍ',
23
+ '%d ثانية',
24
+ '%d ثانية']); },
25
+ minute: function(value) { return numpf(value, [
26
+ 'أقل من دقيقة',
27
+ 'دقيقة واحدة',
28
+ 'دقيقتين',
29
+ '%d دقائق',
30
+ '%d دقيقة',
31
+ 'دقيقة']); },
32
+ minutes: function(value) { return numpf(value, [
33
+ 'أقل من دقيقة',
34
+ 'دقيقة واحدة',
35
+ 'دقيقتين',
36
+ '%d دقائق',
37
+ '%d دقيقة',
38
+ 'دقيقة']); },
39
+ hour: function(value) { return numpf(value, [
40
+ 'أقل من ساعة',
41
+ 'ساعة واحدة',
42
+ 'ساعتين',
43
+ '%d ساعات',
44
+ '%d ساعة',
45
+ '%d ساعة']); },
46
+ hours: function(value) { return numpf(value, [
47
+ 'أقل من ساعة',
48
+ 'ساعة واحدة',
49
+ 'ساعتين',
50
+ '%d ساعات',
51
+ '%d ساعة',
52
+ '%d ساعة']); },
53
+ day: function(value) { return numpf(value, [
54
+ 'أقل من يوم',
55
+ 'يوم واحد',
56
+ 'يومين',
57
+ '%d أيام',
58
+ '%d يومًا',
59
+ '%d يوم']); },
60
+ days: function(value) { return numpf(value, [
61
+ 'أقل من يوم',
62
+ 'يوم واحد',
63
+ 'يومين',
64
+ '%d أيام',
65
+ '%d يومًا',
66
+ '%d يوم']); },
67
+ month: function(value) { return numpf(value, [
68
+ 'أقل من شهر',
69
+ 'شهر واحد',
70
+ 'شهرين',
71
+ '%d أشهر',
72
+ '%d شهرًا',
73
+ '%d شهر']); },
74
+ months: function(value) { return numpf(value, [
75
+ 'أقل من شهر',
76
+ 'شهر واحد',
77
+ 'شهرين',
78
+ '%d أشهر',
79
+ '%d شهرًا',
80
+ '%d شهر']); },
81
+ year: function(value) { return numpf(value, [
82
+ 'أقل من عام',
83
+ 'عام واحد',
84
+ '%d عامين',
85
+ '%d أعوام',
86
+ '%d عامًا']);
87
+ },
88
+ years: function(value) { return numpf(value, [
89
+ 'أقل من عام',
90
+ 'عام واحد',
91
+ 'عامين',
92
+ '%d أعوام',
93
+ '%d عامًا',
94
+ '%d عام']);}
95
+ };
96
+ })();
js/timeago/locales/jquery.timeago.bg.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Bulgarian
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: "преди",
4
+ prefixFromNow: "след",
5
+ suffixAgo: null,
6
+ suffixFromNow: null,
7
+ seconds: "по-малко от минута",
8
+ minute: "една минута",
9
+ minutes: "%d минути",
10
+ hour: "един час",
11
+ hours: "%d часа",
12
+ day: "един ден",
13
+ days: "%d дни",
14
+ month: "един месец",
15
+ months: "%d месеца",
16
+ year: "една година",
17
+ years: "%d години"
18
+ };
js/timeago/locales/jquery.timeago.bs.js ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Bosnian
2
+ (function() {
3
+ var numpf;
4
+
5
+ numpf = function(n, f, s, t) {
6
+ var n10;
7
+ n10 = n % 10;
8
+ if (n10 === 1 && (n === 1 || n > 20)) {
9
+ return f;
10
+ } else if (n10 > 1 && n10 < 5 && (n > 20 || n < 10)) {
11
+ return s;
12
+ } else {
13
+ return t;
14
+ }
15
+ };
16
+
17
+ jQuery.timeago.settings.strings = {
18
+ prefixAgo: "prije",
19
+ prefixFromNow: "za",
20
+ suffixAgo: null,
21
+ suffixFromNow: null,
22
+ second: "sekund",
23
+ seconds: function(value) {
24
+ return numpf(value, "%d sekund", "%d sekunde", "%d sekundi");
25
+ },
26
+ minute: "oko minut",
27
+ minutes: function(value) {
28
+ return numpf(value, "%d minut", "%d minute", "%d minuta");
29
+ },
30
+ hour: "oko sat",
31
+ hours: function(value) {
32
+ return numpf(value, "%d sat", "%d sata", "%d sati");
33
+ },
34
+ day: "oko jednog dana",
35
+ days: function(value) {
36
+ return numpf(value, "%d dan", "%d dana", "%d dana");
37
+ },
38
+ month: "mjesec dana",
39
+ months: function(value) {
40
+ return numpf(value, "%d mjesec", "%d mjeseca", "%d mjeseci");
41
+ },
42
+ year: "prije godinu dana ",
43
+ years: function(value) {
44
+ return numpf(value, "%d godinu", "%d godine", "%d godina");
45
+ },
46
+ wordSeparator: " "
47
+ };
48
+
49
+ }).call(this);
js/timeago/locales/jquery.timeago.ca.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Catalan
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: "fa",
4
+ prefixFromNow: "d'aqui a",
5
+ suffixAgo: null,
6
+ suffixFromNow: null,
7
+ seconds: "menys d'1 minut",
8
+ minute: "1 minut",
9
+ minutes: "uns %d minuts",
10
+ hour: "1 hora",
11
+ hours: "unes %d hores",
12
+ day: "1 dia",
13
+ days: "%d dies",
14
+ month: "aproximadament un mes",
15
+ months: "%d mesos",
16
+ year: "aproximadament un any",
17
+ years: "%d anys"
18
+ };
js/timeago/locales/jquery.timeago.cs.js ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Czech
2
+ (function() {
3
+ function f(n, d, a) {
4
+ return a[d>=0 ? 0 : a.length==2 || n<5 ? 1 : 2];
5
+ }
6
+
7
+ jQuery.timeago.settings.strings = {
8
+ prefixAgo: 'před',
9
+ prefixFromNow: 'za',
10
+ suffixAgo: null,
11
+ suffixFromNow: null,
12
+ seconds: function(n, d) {return f(n, d, ['méně než minutou', 'méně než minutu']);},
13
+ minute: function(n, d) {return f(n, d, ['minutou', 'minutu']);},
14
+ minutes: function(n, d) {return f(n, d, ['%d minutami', '%d minuty', '%d minut']);},
15
+ hour: function(n, d) {return f(n, d, ['hodinou', 'hodinu']);},
16
+ hours: function(n, d) {return f(n, d, ['%d hodinami', '%d hodiny', '%d hodin']);},
17
+ day: function(n, d) {return f(n, d, ['%d dnem', '%d den']);},
18
+ days: function(n, d) {return f(n, d, ['%d dny', '%d dny', '%d dní']);},
19
+ month: function(n, d) {return f(n, d, ['%d měsícem', '%d měsíc']);},
20
+ months: function(n, d) {return f(n, d, ['%d měsíci', '%d měsíce', '%d měsíců']);},
21
+ year: function(n, d) {return f(n, d, ['%d rokem', '%d rok']);},
22
+ years: function(n, d) {return f(n, d, ['%d lety', '%d roky', '%d let']);}
23
+ };
24
+ })();
js/timeago/locales/jquery.timeago.cy.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Welsh
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: null,
4
+ prefixFromNow: null,
5
+ suffixAgo: "yn ôl",
6
+ suffixFromNow: "o hyn",
7
+ seconds: "llai na munud",
8
+ minute: "am funud",
9
+ minutes: "%d munud",
10
+ hour: "tua awr",
11
+ hours: "am %d awr",
12
+ day: "y dydd",
13
+ days: "%d diwrnod",
14
+ month: "tua mis",
15
+ months: "%d mis",
16
+ year: "am y flwyddyn",
17
+ years: "%d blynedd",
18
+ wordSeparator: " ",
19
+ numbers: []
20
+ };
js/timeago/locales/jquery.timeago.da.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Danish
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: "for",
4
+ prefixFromNow: "om",
5
+ suffixAgo: "siden",
6
+ suffixFromNow: "",
7
+ seconds: "mindre end et minut",
8
+ minute: "ca. et minut",
9
+ minutes: "%d minutter",
10
+ hour: "ca. en time",
11
+ hours: "ca. %d timer",
12
+ day: "en dag",
13
+ days: "%d dage",
14
+ month: "ca. en måned",
15
+ months: "%d måneder",
16
+ year: "ca. et år",
17
+ years: "%d år"
18
+ };
js/timeago/locales/jquery.timeago.de.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // German
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: "vor",
4
+ prefixFromNow: "in",
5
+ suffixAgo: "",
6
+ suffixFromNow: "",
7
+ seconds: "wenigen Sekunden",
8
+ minute: "etwa einer Minute",
9
+ minutes: "%d Minuten",
10
+ hour: "etwa einer Stunde",
11
+ hours: "%d Stunden",
12
+ day: "etwa einem Tag",
13
+ days: "%d Tagen",
14
+ month: "etwa einem Monat",
15
+ months: "%d Monaten",
16
+ year: "etwa einem Jahr",
17
+ years: "%d Jahren"
18
+ };
js/timeago/locales/jquery.timeago.dv.js ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Dhivehi time in Thaana for timeago.js
3
+ **/
4
+ jQuery.timeago.settings.strings = {
5
+ prefixAgo: null,
6
+ prefixFromNow: null,
7
+ suffixAgo: "ކުރިން",
8
+ suffixFromNow: "ފަހުން",
9
+ seconds: "ސިކުންތުކޮޅެއް",
10
+ minute: "މިނިޓެއްވަރު",
11
+ minutes: "%d މިނިޓު",
12
+ hour: "ގަޑިއެއްވަރު",
13
+ hours: "ގާތްގަނޑަކަށް %d ގަޑިއިރު",
14
+ day: "އެއް ދުވަސް",
15
+ days: "މީގެ %d ދުވަސް",
16
+ month: "މަހެއްވަރު",
17
+ months: "މީގެ %d މަސް",
18
+ year: "އަހަރެއްވަރު",
19
+ years: "މީގެ %d އަހަރު",
20
+ wordSeparator: " ",
21
+ numbers: []
22
+ };
js/timeago/locales/jquery.timeago.el.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Greek
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: "πριν",
4
+ prefixFromNow: "σε",
5
+ suffixAgo: "",
6
+ suffixFromNow: "",
7
+ seconds: "λιγότερο από ένα λεπτό",
8
+ minute: "περίπου ένα λεπτό",
9
+ minutes: "%d λεπτά",
10
+ hour: "περίπου μία ώρα",
11
+ hours: "περίπου %d ώρες",
12
+ day: "μία μέρα",
13
+ days: "%d μέρες",
14
+ month: "περίπου ένα μήνα",
15
+ months: "%d μήνες",
16
+ year: "περίπου ένα χρόνο",
17
+ years: "%d χρόνια"
18
+ };
js/timeago/locales/jquery.timeago.en-short.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // English shortened
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: null,
4
+ prefixFromNow: null,
5
+ suffixAgo: "",
6
+ suffixFromNow: "",
7
+ seconds: "1m",
8
+ minute: "1m",
9
+ minutes: "%dm",
10
+ hour: "1h",
11
+ hours: "%dh",
12
+ day: "1d",
13
+ days: "%dd",
14
+ month: "1mo",
15
+ months: "%dmo",
16
+ year: "1yr",
17
+ years: "%dyr",
18
+ wordSeparator: " ",
19
+ numbers: []
20
+ };
js/timeago/locales/jquery.timeago.en.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // English (Template)
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: null,
4
+ prefixFromNow: null,
5
+ suffixAgo: "ago",
6
+ suffixFromNow: "from now",
7
+ seconds: "less than a minute",
8
+ minute: "about a minute",
9
+ minutes: "%d minutes",
10
+ hour: "about an hour",
11
+ hours: "about %d hours",
12
+ day: "a day",
13
+ days: "%d days",
14
+ month: "about a month",
15
+ months: "%d months",
16
+ year: "about a year",
17
+ years: "%d years",
18
+ wordSeparator: " ",
19
+ numbers: []
20
+ };
js/timeago/locales/jquery.timeago.es-short.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Spanish shortened
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: null,
4
+ prefixFromNow: null,
5
+ suffixAgo: "",
6
+ suffixFromNow: "",
7
+ seconds: "1m",
8
+ minute: "1m",
9
+ minutes: "%dm",
10
+ hour: "1h",
11
+ hours: "%dh",
12
+ day: "1d",
13
+ days: "%dd",
14
+ month: "1me",
15
+ months: "%dme",
16
+ year: "1a",
17
+ years: "%da",
18
+ wordSeparator: " ",
19
+ numbers: []
20
+ };
js/timeago/locales/jquery.timeago.es.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Spanish
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: "hace",
4
+ prefixFromNow: "dentro de",
5
+ suffixAgo: "",
6
+ suffixFromNow: "",
7
+ seconds: "menos de un minuto",
8
+ minute: "un minuto",
9
+ minutes: "unos %d minutos",
10
+ hour: "una hora",
11
+ hours: "%d horas",
12
+ day: "un día",
13
+ days: "%d días",
14
+ month: "un mes",
15
+ months: "%d meses",
16
+ year: "un año",
17
+ years: "%d años"
18
+ };
js/timeago/locales/jquery.timeago.et.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Estonian
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: null,
4
+ prefixFromNow: null,
5
+ suffixAgo: "tagasi",
6
+ suffixFromNow: "pärast",
7
+ seconds: function(n, d) { return d < 0 ? "vähem kui minuti aja" : "vähem kui minut aega"; },
8
+ minute: function(n, d) { return d < 0 ? "umbes minuti aja" : "umbes minut aega"; },
9
+ minutes: function(n, d) { return d < 0 ? "%d minuti" : "%d minutit"; },
10
+ hour: function(n, d) { return d < 0 ? "umbes tunni aja" : "umbes tund aega"; },
11
+ hours: function(n, d) { return d < 0 ? "%d tunni" : "%d tundi"; },
12
+ day: function(n, d) { return d < 0 ? "umbes päeva" : "umbes päev"; },
13
+ days: function(n, d) { return d < 0 ? "%d päeva" : "%d päeva"; },
14
+ month: function(n, d) { return d < 0 ? "umbes kuu aja" : "umbes kuu aega"; },
15
+ months: function(n, d) { return d < 0 ? "%d kuu" : "%d kuud"; },
16
+ year: function(n, d) { return d < 0 ? "umbes aasta aja" : "umbes aasta aega"; },
17
+ years: function(n, d) { return d < 0 ? "%d aasta" : "%d aastat"; }
18
+ };
js/timeago/locales/jquery.timeago.eu.js ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery.timeago.settings.strings = {
2
+ prefixAgo: "duela",
3
+ prefixFromNow: "hemendik",
4
+ suffixAgo: "",
5
+ suffixFromNow: "barru",
6
+ seconds: "minutu bat bainu gutxiago",
7
+ minute: "minutu bat",
8
+ minutes: "%d minutu inguru",
9
+ hour: "ordu bat",
10
+ hours: "%d ordu",
11
+ day: "egun bat",
12
+ days: "%d egun",
13
+ month: "hilabete bat",
14
+ months: "%d hilabete",
15
+ year: "urte bat",
16
+ years: "%d urte"
17
+ };
js/timeago/locales/jquery.timeago.fa-short.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // persion shortened
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: null,
4
+ prefixFromNow: null,
5
+ suffixAgo: "",
6
+ suffixFromNow: "",
7
+ seconds: "1دقیقه",
8
+ minute: "1دقیقه",
9
+ minutes: "%dدقیقه",
10
+ hour: "1ساعت",
11
+ hours: "%dساعت",
12
+ day: "1روز",
13
+ days: "%dروز",
14
+ month: "1ماه",
15
+ months: "%dماه",
16
+ year: "1سال",
17
+ years: "%dسال",
18
+ wordSeparator: " ",
19
+ numbers: []
20
+ };
js/timeago/locales/jquery.timeago.fa.js ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 
2
+ // Persian
3
+ // Use DIR attribute for RTL text in Persian Language for ABBR tag .
4
+ // By MB.seifollahi@gmail.com
5
+ jQuery.timeago.settings.strings = {
6
+ prefixAgo: null,
7
+ prefixFromNow: null,
8
+ suffixAgo: "پیش",
9
+ suffixFromNow: "از حال",
10
+ seconds: "کمتر از یک دقیقه",
11
+ minute: "حدود یک دقیقه",
12
+ minutes: "%d دقیقه",
13
+ hour: "حدود یک ساعت",
14
+ hours: "حدود %d ساعت",
15
+ day: "یک روز",
16
+ days: "%d روز",
17
+ month: "حدود یک ماه",
18
+ months: "%d ماه",
19
+ year: "حدود یک سال",
20
+ years: "%d سال",
21
+ wordSeparator: " "
22
+ };
js/timeago/locales/jquery.timeago.fi.js ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Finnish
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: null,
4
+ prefixFromNow: null,
5
+ suffixAgo: "sitten",
6
+ suffixFromNow: "tulevaisuudessa",
7
+ seconds: "alle minuutti",
8
+ minute: "minuutti",
9
+ minutes: "%d minuuttia",
10
+ hour: "tunti",
11
+ hours: "%d tuntia",
12
+ day: "päivä",
13
+ days: "%d päivää",
14
+ month: "kuukausi",
15
+ months: "%d kuukautta",
16
+ year: "vuosi",
17
+ years: "%d vuotta"
18
+ };
19
+
20
+ // The above is not a great localization because one would usually
21
+ // write "2 days ago" in Finnish as "2 päivää sitten", however
22
+ // one would write "2 days into the future" as "2:n päivän päästä"
23
+ // which cannot be achieved with localization support this simple.
24
+ // This is because Finnish has word suffixes (attached directly
25
+ // to the end of the word). The word "day" is "päivä" in Finnish.
26
+ // As workaround, the above localizations will say
27
+ // "2 päivää tulevaisuudessa" which is understandable but
28
+ // not as fluent.
js/timeago/locales/jquery.timeago.fr-short.js ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // French shortened
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: "il y a",
4
+ prefixFromNow: "d'ici",
5
+ seconds: "moins d'une minute",
6
+ minute: "une minute",
7
+ minutes: "%d minutes",
8
+ hour: "une heure",
9
+ hours: "%d heures",
10
+ day: "un jour",
11
+ days: "%d jours",
12
+ month: "un mois",
13
+ months: "%d mois",
14
+ year: "un an",
15
+ years: "%d ans"
16
+ };
js/timeago/locales/jquery.timeago.fr.js ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // French
2
+ jQuery.timeago.settings.strings = {
3
+ // environ ~= about, it's optional
4
+ prefixAgo: "il y a",
5
+ prefixFromNow: "d'ici",
6
+ seconds: "moins d'une minute",
7
+ minute: "environ une minute",
8
+ minutes: "environ %d minutes",
9
+ hour: "environ une heure",
10
+ hours: "environ %d heures",
11
+ day: "environ un jour",
12
+ days: "environ %d jours",
13
+ month: "environ un mois",
14
+ months: "environ %d mois",
15
+ year: "un an",
16
+ years: "%d ans"
17
+ };
js/timeago/locales/jquery.timeago.gl.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Galician
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: "hai",
4
+ prefixFromNow: "dentro de",
5
+ suffixAgo: "",
6
+ suffixFromNow: "",
7
+ seconds: "menos dun minuto",
8
+ minute: "un minuto",
9
+ minutes: "uns %d minutos",
10
+ hour: "unha hora",
11
+ hours: "%d horas",
12
+ day: "un día",
13
+ days: "%d días",
14
+ month: "un mes",
15
+ months: "%d meses",
16
+ year: "un ano",
17
+ years: "%d anos"
18
+ };
js/timeago/locales/jquery.timeago.he.js ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Hebrew
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: "לפני",
4
+ prefixFromNow: "עוד",
5
+ seconds: "פחות מדקה",
6
+ minute: "דקה",
7
+ minutes: "%d דקות",
8
+ hour: "שעה",
9
+ hours: function(number){return (number==2) ? "שעתיים" : "%d שעות";},
10
+ day: "יום",
11
+ days: function(number){return (number==2) ? "יומיים" : "%d ימים";},
12
+ month: "חודש",
13
+ months: function(number){return (number==2) ? "חודשיים" : "%d חודשים";},
14
+ year: "שנה",
15
+ years: function(number){return (number==2) ? "שנתיים" : "%d שנים";}
16
+ };
js/timeago/locales/jquery.timeago.hr.js ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Croatian
2
+ (function () {
3
+ var numpf;
4
+
5
+ numpf = function (n, f, s, t) {
6
+ var n10;
7
+ n10 = n % 10;
8
+ if (n10 === 1 && (n === 1 || n > 20)) {
9
+ return f;
10
+ } else if (n10 > 1 && n10 < 5 && (n > 20 || n < 10)) {
11
+ return s;
12
+ } else {
13
+ return t;
14
+ }
15
+ };
16
+
17
+ jQuery.timeago.settings.strings = {
18
+ prefixAgo: "prije",
19
+ prefixFromNow: "za",
20
+ suffixAgo: null,
21
+ suffixFromNow: null,
22
+ second: "sekundu",
23
+ seconds: function (value) {
24
+ return numpf(value, "%d sekundu", "%d sekunde", "%d sekundi");
25
+ },
26
+ minute: "oko minutu",
27
+ minutes: function (value) {
28
+ return numpf(value, "%d minutu", "%d minute", "%d minuta");
29
+ },
30
+ hour: "oko jedan sat",
31
+ hours: function (value) {
32
+ return numpf(value, "%d sat", "%d sata", "%d sati");
33
+ },
34
+ day: "jedan dan",
35
+ days: function (value) {
36
+ return numpf(value, "%d dan", "%d dana", "%d dana");
37
+ },
38
+ month: "mjesec dana",
39
+ months: function (value) {
40
+ return numpf(value, "%d mjesec", "%d mjeseca", "%d mjeseci");
41
+ },
42
+ year: "prije godinu dana",
43
+ years: function (value) {
44
+ return numpf(value, "%d godinu", "%d godine", "%d godina");
45
+ },
46
+ wordSeparator: " "
47
+ };
48
+
49
+ }).call(this);
js/timeago/locales/jquery.timeago.hu.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Hungarian
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: null,
4
+ prefixFromNow: null,
5
+ suffixAgo: null,
6
+ suffixFromNow: null,
7
+ seconds: "kevesebb mint egy perce",
8
+ minute: "körülbelül egy perce",
9
+ minutes: "%d perce",
10
+ hour: "körülbelül egy órája",
11
+ hours: "körülbelül %d órája",
12
+ day: "körülbelül egy napja",
13
+ days: "%d napja",
14
+ month: "körülbelül egy hónapja",
15
+ months: "%d hónapja",
16
+ year: "körülbelül egy éve",
17
+ years: "%d éve"
18
+ };
js/timeago/locales/jquery.timeago.hy.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Armenian
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: null,
4
+ prefixFromNow: null,
5
+ suffixAgo: "առաջ",
6
+ suffixFromNow: "հետո",
7
+ seconds: "վայրկյաններ",
8
+ minute: "մեկ րոպե",
9
+ minutes: "%d րոպե",
10
+ hour: "մեկ ժամ",
11
+ hours: "%d ժամ",
12
+ day: "մեկ օր",
13
+ days: "%d օր",
14
+ month: "մեկ ամիս",
15
+ months: "%d ամիս",
16
+ year: "մեկ տարի",
17
+ years: "%d տարի"
18
+ };
js/timeago/locales/jquery.timeago.id.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Indonesian
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: null,
4
+ prefixFromNow: null,
5
+ suffixAgo: "yang lalu",
6
+ suffixFromNow: "dari sekarang",
7
+ seconds: "kurang dari semenit",
8
+ minute: "sekitar satu menit",
9
+ minutes: "%d menit",
10
+ hour: "sekitar sejam",
11
+ hours: "sekitar %d jam",
12
+ day: "sehari",
13
+ days: "%d hari",
14
+ month: "sekitar sebulan",
15
+ months: "%d bulan",
16
+ year: "sekitar setahun",
17
+ years: "%d tahun"
18
+ };
js/timeago/locales/jquery.timeago.is.js ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery.timeago.settings.strings = {
2
+ prefixAgo: "fyrir",
3
+ prefixFromNow: "eftir",
4
+ suffixAgo: "síðan",
5
+ suffixFromNow: null,
6
+ seconds: "minna en mínútu",
7
+ minute: "mínútu",
8
+ minutes: "%d mínútum",
9
+ hour: "klukkutíma",
10
+ hours: "um %d klukkutímum",
11
+ day: "degi",
12
+ days: "%d dögum",
13
+ month: "mánuði",
14
+ months: "%d mánuðum",
15
+ year: "ári",
16
+ years: "%d árum",
17
+ wordSeparator: " ",
18
+ numbers: []
19
+ };
js/timeago/locales/jquery.timeago.it-short.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Italian shortened
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: null,
4
+ prefixFromNow: null,
5
+ suffixAgo: "",
6
+ suffixFromNow: "",
7
+ seconds: "1m",
8
+ minute: "1m",
9
+ minutes: "%dm",
10
+ hour: "1h",
11
+ hours: "%dh",
12
+ day: "1g",
13
+ days: "%dg",
14
+ month: "1me",
15
+ months: "%dme",
16
+ year: "1a",
17
+ years: "%da",
18
+ wordSeparator: " ",
19
+ numbers: []
20
+ };
js/timeago/locales/jquery.timeago.it.js ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Italian
2
+ jQuery.timeago.settings.strings = {
3
+ suffixAgo: "fa",
4
+ suffixFromNow: "da ora",
5
+ seconds: "meno di un minuto",
6
+ minute: "circa un minuto",
7
+ minutes: "%d minuti",
8
+ hour: "circa un'ora",
9
+ hours: "circa %d ore",
10
+ day: "un giorno",
11
+ days: "%d giorni",
12
+ month: "circa un mese",
13
+ months: "%d mesi",
14
+ year: "circa un anno",
15
+ years: "%d anni"
16
+ };
js/timeago/locales/jquery.timeago.ja.js ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Japanese
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: "",
4
+ prefixFromNow: "今から",
5
+ suffixAgo: "前",
6
+ suffixFromNow: "後",
7
+ seconds: "1 分未満",
8
+ minute: "約 1 分",
9
+ minutes: "%d 分",
10
+ hour: "約 1 時間",
11
+ hours: "約 %d 時間",
12
+ day: "約 1 日",
13
+ days: "約 %d 日",
14
+ month: "約 1 ヶ月",
15
+ months: "約 %d ヶ月",
16
+ year: "約 1 年",
17
+ years: "約 %d 年",
18
+ wordSeparator: ""
19
+ };
js/timeago/locales/jquery.timeago.jv.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Javanesse (Boso Jowo)
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: null,
4
+ prefixFromNow: null,
5
+ suffixAgo: "kepungkur",
6
+ suffixFromNow: "seko saiki",
7
+ seconds: "kurang seko sakmenit",
8
+ minute: "kurang luwih sakmenit",
9
+ minutes: "%d menit",
10
+ hour: "kurang luwih sakjam",
11
+ hours: "kurang luwih %d jam",
12
+ day: "sedina",
13
+ days: "%d dina",
14
+ month: "kurang luwih sewulan",
15
+ months: "%d wulan",
16
+ year: "kurang luwih setahun",
17
+ years: "%d tahun"
18
+ };
js/timeago/locales/jquery.timeago.ko.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Korean
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: null,
4
+ prefixFromNow: null,
5
+ suffixAgo: "전",
6
+ suffixFromNow: "후",
7
+ seconds: "1분",
8
+ minute: "약 1분",
9
+ minutes: "%d분",
10
+ hour: "약 1시간",
11
+ hours: "약 %d시간",
12
+ day: "하루",
13
+ days: "%d일",
14
+ month: "약 1개월",
15
+ months: "%d개월",
16
+ year: "약 1년",
17
+ years: "%d년",
18
+ wordSeparator: " ",
19
+ numbers: []
20
+ };
js/timeago/locales/jquery.timeago.ky.js ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Russian
2
+ (function() {
3
+ function numpf(n, f, s, t) {
4
+ // f - 1, 21, 31, ...
5
+ // s - 2-4, 22-24, 32-34 ...
6
+ // t - 5-20, 25-30, ...
7
+ var n10 = n % 10;
8
+ if ( (n10 == 1) && ( (n == 1) || (n > 20) ) ) {
9
+ return f;
10
+ } else if ( (n10 > 1) && (n10 < 5) && ( (n > 20) || (n < 10) ) ) {
11
+ return s;
12
+ } else {
13
+ return t;
14
+ }
15
+ }
16
+
17
+ jQuery.timeago.settings.strings = {
18
+ prefixAgo: null,
19
+ prefixFromNow: "через",
20
+ suffixAgo: "мурун",
21
+ suffixFromNow: null,
22
+ seconds: "1 минуттан аз",
23
+ minute: "минута",
24
+ minutes: function(value) { return numpf(value, "%d минута", "%d минута", "%d минут"); },
25
+ hour: "саат",
26
+ hours: function(value) { return numpf(value, "%d саат", "%d саат", "%d саат"); },
27
+ day: "күн",
28
+ days: function(value) { return numpf(value, "%d күн", "%d күн", "%d күн"); },
29
+ month: "ай",
30
+ months: function(value) { return numpf(value, "%d ай", "%d ай", "%d ай"); },
31
+ year: "жыл",
32
+ years: function(value) { return numpf(value, "%d жыл", "%d жыл", "%d жыл"); }
33
+ };
34
+ })();
js/timeago/locales/jquery.timeago.lt.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ //Lithuanian
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: "prieš",
4
+ prefixFromNow: null,
5
+ suffixAgo: null,
6
+ suffixFromNow: "nuo dabar",
7
+ seconds: "%d sek.",
8
+ minute: "min.",
9
+ minutes: "%d min.",
10
+ hour: "val.",
11
+ hours: "%d val.",
12
+ day: "1 d.",
13
+ days: "%d d.",
14
+ month: "mėn.",
15
+ months: "%d mėn.",
16
+ year: "metus",
17
+ years: "%d metus",
18
+ wordSeparator: " ",
19
+ numbers: []
20
+ };
js/timeago/locales/jquery.timeago.lv.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ //Latvian
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: "pirms",
4
+ prefixFromNow: null,
5
+ suffixAgo: null,
6
+ suffixFromNow: "no šī brīža",
7
+ seconds: "%d sek.",
8
+ minute: "min.",
9
+ minutes: "%d min.",
10
+ hour: "st.",
11
+ hours: "%d st.",
12
+ day: "1 d.",
13
+ days: "%d d.",
14
+ month: "mēnesis.",
15
+ months: "%d mēnesis.",
16
+ year: "gads",
17
+ years: "%d gads",
18
+ wordSeparator: " ",
19
+ numbers: []
20
+ };
js/timeago/locales/jquery.timeago.mk.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Macedonian
2
+ (function() {
3
+ jQuery.timeago.settings.strings={
4
+ prefixAgo: "пред",
5
+ prefixFromNow: "за",
6
+ suffixAgo: null,
7
+ suffixFromNow: null,
8
+ seconds: "%d секунди",
9
+ minute: "%d минута",
10
+ minutes: "%d минути",
11
+ hour: "%d час",
12
+ hours: "%d часа",
13
+ day: "%d ден",
14
+ days: "%d денови" ,
15
+ month: "%d месец",
16
+ months: "%d месеци",
17
+ year: "%d година",
18
+ years: "%d години"
19
+ };
20
+ })();
js/timeago/locales/jquery.timeago.nl.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Dutch
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: null,
4
+ prefixFromNow: "over",
5
+ suffixAgo: "geleden",
6
+ suffixFromNow: null,
7
+ seconds: "minder dan een minuut",
8
+ minute: "ongeveer een minuut",
9
+ minutes: "%d minuten",
10
+ hour: "ongeveer een uur",
11
+ hours: "ongeveer %d uur",
12
+ day: "een dag",
13
+ days: "%d dagen",
14
+ month: "ongeveer een maand",
15
+ months: "%d maanden",
16
+ year: "ongeveer een jaar",
17
+ years: "%d jaar",
18
+ wordSeparator: " ",
19
+ numbers: []
20
+ };
js/timeago/locales/jquery.timeago.no.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Norwegian
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: "for",
4
+ prefixFromNow: "om",
5
+ suffixAgo: "siden",
6
+ suffixFromNow: "",
7
+ seconds: "mindre enn et minutt",
8
+ minute: "ca. et minutt",
9
+ minutes: "%d minutter",
10
+ hour: "ca. en time",
11
+ hours: "ca. %d timer",
12
+ day: "en dag",
13
+ days: "%d dager",
14
+ month: "ca. en måned",
15
+ months: "%d måneder",
16
+ year: "ca. et år",
17
+ years: "%d år"
18
+ };
js/timeago/locales/jquery.timeago.pl.js ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Polish
2
+ (function() {
3
+ function numpf(n, s, t) {
4
+ // s - 2-4, 22-24, 32-34 ...
5
+ // t - 5-21, 25-31, ...
6
+ var n10 = n % 10;
7
+ if ( (n10 > 1) && (n10 < 5) && ( (n > 20) || (n < 10) ) ) {
8
+ return s;
9
+ } else {
10
+ return t;
11
+ }
12
+ }
13
+
14
+ jQuery.timeago.settings.strings = {
15
+ prefixAgo: null,
16
+ prefixFromNow: "za",
17
+ suffixAgo: "temu",
18
+ suffixFromNow: null,
19
+ seconds: "mniej niż minutę",
20
+ minute: "minutę",
21
+ minutes: function(value) { return numpf(value, "%d minuty", "%d minut"); },
22
+ hour: "godzinę",
23
+ hours: function(value) { return numpf(value, "%d godziny", "%d godzin"); },
24
+ day: "dzień",
25
+ days: "%d dni",
26
+ month: "miesiąc",
27
+ months: function(value) { return numpf(value, "%d miesiące", "%d miesięcy"); },
28
+ year: "rok",
29
+ years: function(value) { return numpf(value, "%d lata", "%d lat"); }
30
+ };
31
+ })();
js/timeago/locales/jquery.timeago.pt-br-short.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Portuguese Brasil shortened
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: null,
4
+ prefixFromNow: null,
5
+ suffixAgo: "",
6
+ suffixFromNow: "",
7
+ seconds: "1m",
8
+ minute: "1m",
9
+ minutes: "%dm",
10
+ hour: "1h",
11
+ hours: "%dh",
12
+ day: "1d",
13
+ days: "%dd",
14
+ month: "1M",
15
+ months: "%dM",
16
+ year: "1a",
17
+ years: "%da",
18
+ wordSeparator: " ",
19
+ numbers: []
20
+ };
js/timeago/locales/jquery.timeago.pt-br.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Brazilian Portuguese
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: "há",
4
+ prefixFromNow: "em",
5
+ suffixAgo: null,
6
+ suffixFromNow: null,
7
+ seconds: "alguns segundos",
8
+ minute: "um minuto",
9
+ minutes: "%d minutos",
10
+ hour: "uma hora",
11
+ hours: "%d horas",
12
+ day: "um dia",
13
+ days: "%d dias",
14
+ month: "um mês",
15
+ months: "%d meses",
16
+ year: "um ano",
17
+ years: "%d anos"
18
+ };
js/timeago/locales/jquery.timeago.pt-short.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Portuguese shortened
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: null,
4
+ prefixFromNow: null,
5
+ suffixAgo: "",
6
+ suffixFromNow: "",
7
+ seconds: "1m",
8
+ minute: "1m",
9
+ minutes: "%dm",
10
+ hour: "1h",
11
+ hours: "%dh",
12
+ day: "1d",
13
+ days: "%dd",
14
+ month: "1M",
15
+ months: "%dM",
16
+ year: "1a",
17
+ years: "%da",
18
+ wordSeparator: " ",
19
+ numbers: []
20
+ };
js/timeago/locales/jquery.timeago.pt.js ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Portuguese
2
+ jQuery.timeago.settings.strings = {
3
+ suffixAgo: "atrás",
4
+ suffixFromNow: "a partir de agora",
5
+ seconds: "menos de um minuto",
6
+ minute: "cerca de um minuto",
7
+ minutes: "%d minutos",
8
+ hour: "cerca de uma hora",
9
+ hours: "cerca de %d horas",
10
+ day: "um dia",
11
+ days: "%d dias",
12
+ month: "cerca de um mês",
13
+ months: "%d meses",
14
+ year: "cerca de um ano",
15
+ years: "%d anos"
16
+ };
js/timeago/locales/jquery.timeago.ro.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Romanian
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: "acum",
4
+ prefixFromNow: "in timp de",
5
+ suffixAgo: "",
6
+ suffixFromNow: "",
7
+ seconds: "mai putin de un minut",
8
+ minute: "un minut",
9
+ minutes: "%d minute",
10
+ hour: "o ora",
11
+ hours: "%d ore",
12
+ day: "o zi",
13
+ days: "%d zile",
14
+ month: "o luna",
15
+ months: "%d luni",
16
+ year: "un an",
17
+ years: "%d ani"
18
+ };
js/timeago/locales/jquery.timeago.rs.js ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Serbian
2
+ (function () {
3
+ var numpf;
4
+
5
+ numpf = function (n, f, s, t) {
6
+ var n10;
7
+ n10 = n % 10;
8
+ if (n10 === 1 && (n === 1 || n > 20)) {
9
+ return f;
10
+ } else if (n10 > 1 && n10 < 5 && (n > 20 || n < 10)) {
11
+ return s;
12
+ } else {
13
+ return t;
14
+ }
15
+ };
16
+
17
+ jQuery.timeago.settings.strings = {
18
+ prefixAgo: "pre",
19
+ prefixFromNow: "za",
20
+ suffixAgo: null,
21
+ suffixFromNow: null,
22
+ second: "sekund",
23
+ seconds: function (value) {
24
+ return numpf(value, "%d sekund", "%d sekunde", "%d sekundi");
25
+ },
26
+ minute: "oko minut",
27
+ minutes: function (value) {
28
+ return numpf(value, "%d minut", "%d minuta", "%d minuta");
29
+ },
30
+ hour: "oko jedan sat",
31
+ hours: function (value) {
32
+ return numpf(value, "%d sat", "%d sata", "%d sati");
33
+ },
34
+ day: "jedan dan",
35
+ days: function (value) {
36
+ return numpf(value, "%d dan", "%d dana", "%d dana");
37
+ },
38
+ month: "mesec dana",
39
+ months: function (value) {
40
+ return numpf(value, "%d mesec", "%d meseca", "%d meseci");
41
+ },
42
+ year: "godinu dana",
43
+ years: function (value) {
44
+ return numpf(value, "%d godinu", "%d godine", "%d godina");
45
+ },
46
+ wordSeparator: " "
47
+ };
48
+
49
+ }).call(this);
js/timeago/locales/jquery.timeago.ru.js ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Russian
2
+ (function() {
3
+ function numpf(n, f, s, t) {
4
+ // f - 1, 21, 31, ...
5
+ // s - 2-4, 22-24, 32-34 ...
6
+ // t - 5-20, 25-30, ...
7
+ var n10 = n % 10;
8
+ if ( (n10 == 1) && ( (n == 1) || (n > 20) ) ) {
9
+ return f;
10
+ } else if ( (n10 > 1) && (n10 < 5) && ( (n > 20) || (n < 10) ) ) {
11
+ return s;
12
+ } else {
13
+ return t;
14
+ }
15
+ }
16
+
17
+ jQuery.timeago.settings.strings = {
18
+ prefixAgo: null,
19
+ prefixFromNow: "через",
20
+ suffixAgo: "назад",
21
+ suffixFromNow: null,
22
+ seconds: "меньше минуты",
23
+ minute: "минуту",
24
+ minutes: function(value) { return numpf(value, "%d минута", "%d минуты", "%d минут"); },
25
+ hour: "час",
26
+ hours: function(value) { return numpf(value, "%d час", "%d часа", "%d часов"); },
27
+ day: "день",
28
+ days: function(value) { return numpf(value, "%d день", "%d дня", "%d дней"); },
29
+ month: "месяц",
30
+ months: function(value) { return numpf(value, "%d месяц", "%d месяца", "%d месяцев"); },
31
+ year: "год",
32
+ years: function(value) { return numpf(value, "%d год", "%d года", "%d лет"); }
33
+ };
34
+ })();
js/timeago/locales/jquery.timeago.rw.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Kinyarwanda
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: "hashize",
4
+ prefixFromNow: "mu",
5
+ suffixAgo: null,
6
+ suffixFromNow: null,
7
+ seconds: "amasegonda macye",
8
+ minute: "umunota",
9
+ minutes: "iminota %d",
10
+ hour: "isaha",
11
+ hours: "amasaha %d",
12
+ day: "umunsi",
13
+ days: "iminsi %d",
14
+ month: "ukwezi",
15
+ months: "amezi %d",
16
+ year: "umwaka",
17
+ years: "imyaka %d",
18
+ wordSeparator: " ",
19
+ numbers: []
20
+ };
js/timeago/locales/jquery.timeago.si.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Sinhalese (SI)
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: null,
4
+ prefixFromNow: null,
5
+ suffixAgo: "පෙර",
6
+ suffixFromNow: "පසුව",
7
+ seconds: "තත්පර කිහිපයකට",
8
+ minute: "මිනිත්තුවකට පමණ",
9
+ minutes: "මිනිත්තු %d කට",
10
+ hour: "පැයක් පමණ ",
11
+ hours: "පැය %d කට පමණ",
12
+ day: "දවසක ට",
13
+ days: "දවස් %d කට ",
14
+ month: "මාසයක් පමණ",
15
+ months: "මාස %d කට",
16
+ year: "වසරක් පමණ",
17
+ years: "වසරක් %d කට පමණ"
18
+ };
js/timeago/locales/jquery.timeago.sk.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Slovak
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: "pred",
4
+ prefixFromNow: null,
5
+ suffixAgo: null,
6
+ suffixFromNow: null,
7
+ seconds: "menej než minútou",
8
+ minute: "minútou",
9
+ minutes: "%d minútami",
10
+ hour: "hodinou",
11
+ hours: "%d hodinami",
12
+ day: "1 dňom",
13
+ days: "%d dňami",
14
+ month: "1 mesiacom",
15
+ months: "%d mesiacmi",
16
+ year: "1 rokom",
17
+ years: "%d rokmi"
18
+ };
js/timeago/locales/jquery.timeago.sl.js ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Slovenian with support for dual
2
+ (function () {
3
+ var numpf;
4
+ numpf = function (n, a) {
5
+ return a[n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0];
6
+ };
7
+
8
+ jQuery.timeago.settings.strings = {
9
+ prefixAgo: null,
10
+ prefixFromNow: "čez",
11
+ suffixAgo: "nazaj",
12
+ suffixFromNow: null,
13
+ second: "sekundo",
14
+ seconds: function (value) {
15
+ return numpf(value, ["%d sekund", "%d sekundo", "%d sekundi", "%d sekunde"]);
16
+ },
17
+ minute: "minuto",
18
+ minutes: function (value) {
19
+ return numpf(value, ["%d minut", "%d minuto", "%d minuti", "%d minute"]);
20
+ },
21
+ hour: "eno uro",
22
+ hours: function (value) {
23
+ return numpf(value, ["%d ur", "%d uro", "%d uri", "%d ure"]);
24
+ },
25
+ day: "en dan",
26
+ days: function (value) {
27
+ return numpf(value, ["%d dni", "%d dan", "%d dneva", "%d dni"]);
28
+ },
29
+ month: "en mesec",
30
+ months: function (value) {
31
+ return numpf(value, ["%d mescov", "%d mesec", "%d mesca", "%d mesce"]);
32
+ },
33
+ year: "eno leto",
34
+ years: function (value) {
35
+ return numpf(value, ["%d let", "%d leto", "%d leti", "%d leta"]);
36
+ },
37
+ wordSeparator: " "
38
+ };
39
+
40
+ }).call(this);
js/timeago/locales/jquery.timeago.sr.js ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Serbian
2
+ (function () {
3
+ var numpf;
4
+
5
+ numpf = function (n, f, s, t) {
6
+ var n10;
7
+ n10 = n % 10;
8
+ if (n10 === 1 && (n === 1 || n > 20)) {
9
+ return f;
10
+ } else if (n10 > 1 && n10 < 5 && (n > 20 || n < 10)) {
11
+ return s;
12
+ } else {
13
+ return t;
14
+ }
15
+ };
16
+
17
+ jQuery.timeago.settings.strings = {
18
+ prefixAgo: "пре",
19
+ prefixFromNow: "за",
20
+ suffixAgo: null,
21
+ suffixFromNow: null,
22
+ second: "секунд",
23
+ seconds: function (value) {
24
+ return numpf(value, "%d секунд", "%d секунде", "%d секунди");
25
+ },
26
+ minute: "један минут",
27
+ minutes: function (value) {
28
+ return numpf(value, "%d минут", "%d минута", "%d минута");
29
+ },
30
+ hour: "један сат",
31
+ hours: function (value) {
32
+ return numpf(value, "%d сат", "%d сата", "%d сати");
33
+ },
34
+ day: "један дан",
35
+ days: function (value) {
36
+ return numpf(value, "%d дан", "%d дана", "%d дана");
37
+ },
38
+ month: "месец дана",
39
+ months: function (value) {
40
+ return numpf(value, "%d месец", "%d месеца", "%d месеци");
41
+ },
42
+ year: "годину дана",
43
+ years: function (value) {
44
+ return numpf(value, "%d годину", "%d године", "%d година");
45
+ },
46
+ wordSeparator: " "
47
+ };
48
+
49
+ }).call(this);
js/timeago/locales/jquery.timeago.sv.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Swedish
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: "för",
4
+ prefixFromNow: "om",
5
+ suffixAgo: "sedan",
6
+ suffixFromNow: "",
7
+ seconds: "mindre än en minut",
8
+ minute: "ungefär en minut",
9
+ minutes: "%d minuter",
10
+ hour: "ungefär en timme",
11
+ hours: "ungefär %d timmar",
12
+ day: "en dag",
13
+ days: "%d dagar",
14
+ month: "ungefär en månad",
15
+ months: "%d månader",
16
+ year: "ungefär ett år",
17
+ years: "%d år"
18
+ };
js/timeago/locales/jquery.timeago.th.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Thai
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: null,
4
+ prefixFromNow: null,
5
+ suffixAgo: "ที่แล้ว",
6
+ suffixFromNow: "จากตอนนี้",
7
+ seconds: "น้อยกว่าหนึ่งนาที",
8
+ minute: "ประมาณหนึ่งนาที",
9
+ minutes: "%d นาที",
10
+ hour: "ประมาณหนึ่งชั่วโมง",
11
+ hours: "ประมาณ %d ชั่วโมง",
12
+ day: "หนึ่งวัน",
13
+ days: "%d วัน",
14
+ month: "ประมาณหนึ่งเดือน",
15
+ months: "%d เดือน",
16
+ year: "ประมาณหนึ่งปี",
17
+ years: "%d ปี",
18
+ wordSeparator: "",
19
+ numbers: []
20
+ };
js/timeago/locales/jquery.timeago.tr.js ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Turkish
2
+ jQuery.timeago.settings.strings = {
3
+ suffixAgo: 'önce',
4
+ suffixFromNow: null,
5
+ seconds: '1 dakikadan',
6
+ minute: '1 dakika',
7
+ minutes: '%d dakika',
8
+ hour: '1 saat',
9
+ hours: '%d saat',
10
+ day: '1 gün',
11
+ days: '%d gün',
12
+ month: '1 ay',
13
+ months: '%d ay',
14
+ year: '1 yıl',
15
+ years: '%d yıl'
16
+ };
js/timeago/locales/jquery.timeago.uk.js ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Ukrainian
2
+ (function() {
3
+ function numpf(n, f, s, t) {
4
+ // f - 1, 21, 31, ...
5
+ // s - 2-4, 22-24, 32-34 ...
6
+ // t - 5-20, 25-30, ...
7
+ var n10 = n % 10;
8
+ if ( (n10 == 1) && ( (n == 1) || (n > 20) ) ) {
9
+ return f;
10
+ } else if ( (n10 > 1) && (n10 < 5) && ( (n > 20) || (n < 10) ) ) {
11
+ return s;
12
+ } else {
13
+ return t;
14
+ }
15
+ }
16
+
17
+ jQuery.timeago.settings.strings = {
18
+ prefixAgo: null,
19
+ prefixFromNow: "через",
20
+ suffixAgo: "тому",
21
+ suffixFromNow: null,
22
+ seconds: "менше хвилини",
23
+ minute: "хвилина",
24
+ minutes: function(value) { return numpf(value, "%d хвилина", "%d хвилини", "%d хвилин"); },
25
+ hour: "година",
26
+ hours: function(value) { return numpf(value, "%d година", "%d години", "%d годин"); },
27
+ day: "день",
28
+ days: function(value) { return numpf(value, "%d день", "%d дні", "%d днів"); },
29
+ month: "місяць",
30
+ months: function(value) { return numpf(value, "%d місяць", "%d місяці", "%d місяців"); },
31
+ year: "рік",
32
+ years: function(value) { return numpf(value, "%d рік", "%d роки", "%d років"); }
33
+ };
34
+ })();
js/timeago/locales/jquery.timeago.uz.js ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ //Uzbek
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: null,
4
+ prefixFromNow: "keyin",
5
+ suffixAgo: "avval",
6
+ suffixFromNow: null,
7
+ seconds: "bir necha soniya",
8
+ minute: "1 daqiqa",
9
+ minutes: function(value) { return "%d daqiqa"; },
10
+ hour: "1 soat",
11
+ hours: function(value) { return "%d soat"; },
12
+ day: "1 kun",
13
+ days: function(value) { return "%d kun"; },
14
+ month: "1 oy",
15
+ months: function(value) { return "%d oy"; },
16
+ year: "1 yil",
17
+ years: function(value) { return "%d yil"; },
18
+ wordSeparator: " "
19
+ };
js/timeago/locales/jquery.timeago.vi.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Vietnamese
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: 'cách đây',
4
+ prefixFromNow: null,
5
+ suffixAgo: null,
6
+ suffixFromNow: "trước",
7
+ seconds: "chưa đến một phút",
8
+ minute: "khoảng một phút",
9
+ minutes: "%d phút",
10
+ hour: "khoảng một tiếng",
11
+ hours: "khoảng %d tiếng",
12
+ day: "một ngày",
13
+ days: "%d ngày",
14
+ month: "khoảng một tháng",
15
+ months: "%d tháng",
16
+ year: "khoảng một năm",
17
+ years: "%d năm",
18
+ wordSeparator: " ",
19
+ numbers: []
20
+ };
js/timeago/locales/jquery.timeago.zh-CN.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Simplified Chinese
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: null,
4
+ prefixFromNow: "从现在开始",
5
+ suffixAgo: "之前",
6
+ suffixFromNow: null,
7
+ seconds: "不到1分钟",
8
+ minute: "大约1分钟",
9
+ minutes: "%d分钟",
10
+ hour: "大约1小时",
11
+ hours: "大约%d小时",
12
+ day: "1天",
13
+ days: "%d天",
14
+ month: "大约1个月",
15
+ months: "%d月",
16
+ year: "大约1年",
17
+ years: "%d年",
18
+ numbers: [],
19
+ wordSeparator: ""
20
+ };
js/timeago/locales/jquery.timeago.zh-TW.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Traditional Chinese, zh-tw
2
+ jQuery.timeago.settings.strings = {
3
+ prefixAgo: null,
4
+ prefixFromNow: "從現在開始",
5
+ suffixAgo: "之前",
6
+ suffixFromNow: null,
7
+ seconds: "不到1分鐘",
8
+ minute: "大約1分鐘",
9
+ minutes: "%d分鐘",
10
+ hour: "大約1小時",
11
+ hours: "%d小時",
12
+ day: "大約1天",
13
+ days: "%d天",
14
+ month: "大約1個月",
15
+ months: "%d個月",
16
+ year: "大約1年",
17
+ years: "%d年",
18
+ numbers: [],
19
+ wordSeparator: ""
20
+ };
loggers/SimpleUserLogger.php CHANGED
@@ -318,8 +318,10 @@ class SimpleUserLogger extends SimpleLogger {
318
 
319
  $context["edit_profile_link"] = get_edit_user_link($wp_user->ID);
320
 
 
 
321
  // User still exist, so link to their profile
322
- if ($current_user_id === $context["_user_id"]) {
323
 
324
  // User that is viewing the log is the same as the edited user
325
  $msg = __('Edited <a href="{edit_profile_link}">your profile</a>', "simple-history");
318
 
319
  $context["edit_profile_link"] = get_edit_user_link($wp_user->ID);
320
 
321
+ $use_you = apply_filters("simple_history/user_logger/plain_text_output_use_you", true);
322
+
323
  // User still exist, so link to their profile
324
+ if ( $current_user_id === $context["_user_id"] && $use_you ) {
325
 
326
  // User that is viewing the log is the same as the edited user
327
  $msg = __('Edited <a href="{edit_profile_link}">your profile</a>', "simple-history");
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: http://eskapism.se/sida/donate/
4
  Tags: history, log, changes, changelog, audit, trail, pages, attachments, users, cms, dashboard, admin, syslog, feed, activity, stream, audit trail, brute-force
5
  Requires at least: 3.6.0
6
  Tested up to: 4.4
7
- Stable tag: 2.5.1
8
 
9
  View changes made by users within WordPress. See who created a page, uploaded an attachment or approved an comment, and more.
10
 
@@ -107,6 +107,7 @@ So far Simple History is translated to:
107
  * Danish
108
  * Dutch
109
  * Finnish
 
110
 
111
  I'm looking for translations of Simple History in more languages! If you're interested please check out the [localization](https://developer.wordpress.org/plugins/internationalization/localization/) part of the Plugin Handbook for info on how to translate plugins. When you're done with your translation email it to me at par.thernstrom@gmail.com, or [add a pull request](https://github.com/bonny/WordPress-Simple-History/).
112
 
@@ -142,7 +143,14 @@ initiated by a specific user.
142
 
143
  ## Changelog
144
 
145
- = 2.5.1 (December 2015) =
 
 
 
 
 
 
 
146
 
147
  - Fixed: No longer assume that the ajaxurl don't already contains query params. Should fix problems with third party plugins like [WPML](https://wpml.org/).
148
  - Fixed: Notice if context key did not exist. Should fix https://github.com/bonny/WordPress-Simple-History/issues/100.
4
  Tags: history, log, changes, changelog, audit, trail, pages, attachments, users, cms, dashboard, admin, syslog, feed, activity, stream, audit trail, brute-force
5
  Requires at least: 3.6.0
6
  Tested up to: 4.4
7
+ Stable tag: 2.5.2
8
 
9
  View changes made by users within WordPress. See who created a page, uploaded an attachment or approved an comment, and more.
10
 
107
  * Danish
108
  * Dutch
109
  * Finnish
110
+ * French
111
 
112
  I'm looking for translations of Simple History in more languages! If you're interested please check out the [localization](https://developer.wordpress.org/plugins/internationalization/localization/) part of the Plugin Handbook for info on how to translate plugins. When you're done with your translation email it to me at par.thernstrom@gmail.com, or [add a pull request](https://github.com/bonny/WordPress-Simple-History/).
113
 
143
 
144
  ## Changelog
145
 
146
+ = 2.5.2 (February 2016) =
147
+
148
+ - Added: The GUI log now updates the relative "fuzzy" timestamps in real time. This means that if you keep the log opened, the relative date for each event, for example "2 minutes ago" or "2 hours ago", will always be up to date (hah!). Keep the log opened for 5 minutes and you will see that the event that previously said "2 minutes ago" now says "7 minutes ago". Fixes https://github.com/bonny/WordPress-Simple-History/issues/88 and is implemented using the great [timeago jquery plugin](http://timeago.yarp.com/).
149
+ - Added: Filter `simple_history/user_logger/plain_text_output_use_you`. Works the same way as the `simple_history/header_initiator_use_you` filter, but for the rich text part when a user has edited their profile.
150
+ - Fixed: Logger slugs that contained for example backslashes (becuase they where namespaced) would not show up in the log. Now logger slugs are escaped. Fixes https://github.com/bonny/WordPress-Simple-History/issues/103.
151
+ - Changed: Actions and things that only is needed in admin area are now only called if `is_admin()`. Fixes https://github.com/bonny/WordPress-Simple-History/issues/105.
152
+
153
+ = 2.5.1 (February 2016) =
154
 
155
  - Fixed: No longer assume that the ajaxurl don't already contains query params. Should fix problems with third party plugins like [WPML](https://wpml.org/).
156
  - Fixed: Notice if context key did not exist. Should fix https://github.com/bonny/WordPress-Simple-History/issues/100.