<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://dev.dsp-wiki.com/MediaWiki:Gadget-CommentsInLocalTime.js/history?feed=atom</id>
	<title>MediaWiki:Gadget-CommentsInLocalTime.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://dev.dsp-wiki.com/MediaWiki:Gadget-CommentsInLocalTime.js/history?feed=atom"/>
	<link rel="alternate" type="text/html" href="https://dev.dsp-wiki.com/MediaWiki:Gadget-CommentsInLocalTime.js/history"/>
	<updated>2026-05-10T19:33:09Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://dev.dsp-wiki.com/index.php?title=MediaWiki:Gadget-CommentsInLocalTime.js&amp;diff=15306&amp;oldid=prev</id>
		<title>Antt1995: 1 revision imported: New Files</title>
		<link rel="alternate" type="text/html" href="https://dev.dsp-wiki.com/index.php?title=MediaWiki:Gadget-CommentsInLocalTime.js&amp;diff=15306&amp;oldid=prev"/>
		<updated>2024-03-24T11:54:38Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported: New Files&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:54, 24 March 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key dspwiki?htest:diff:1.41:old-15302:rev-15306 --&gt;
&lt;/table&gt;</summary>
		<author><name>Antt1995</name></author>
	</entry>
	<entry>
		<id>https://dev.dsp-wiki.com/index.php?title=MediaWiki:Gadget-CommentsInLocalTime.js&amp;diff=15302&amp;oldid=prev</id>
		<title>Antt1995: Created page with &quot;/**  * Comments in local time  * User:Mxn/CommentsInLocalTime  *   * Adjust timestamps in comment signatures to use easy-to-understand, relative  * local time instead of absolute UTC time.  *   * Inspired by Wikipedia:Comments in Local Time.  *   * @author User:Mxn  */  /**  * Default settings for this gadget.  */ window.LocalComments = $.extend({ 	// USER OPTIONS //////////////////////////////////////////////////////////// 	 	/** 	 * When false, this gadget...&quot;</title>
		<link rel="alternate" type="text/html" href="https://dev.dsp-wiki.com/index.php?title=MediaWiki:Gadget-CommentsInLocalTime.js&amp;diff=15302&amp;oldid=prev"/>
		<updated>2023-11-12T07:02:50Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&lt;span class=&quot;autocomment&quot;&gt;*  * Comments in local time  * &lt;a href=&quot;/User:Mxn/CommentsInLocalTime/edit?redlink=1&quot; class=&quot;new&quot; title=&quot;User:Mxn/CommentsInLocalTime (page does not exist)&quot;&gt;User:Mxn/CommentsInLocalTime&lt;/a&gt;  *   * Adjust timestamps in comment signatures to use easy-to-understand, relative  * local time instead of absolute UTC time.  *   * Inspired by &lt;a href=&quot;https://en.wikipedia.org/wiki/Comments_in_Local_Time&quot; class=&quot;extiw&quot; title=&quot;wikipedia:Comments in Local Time&quot;&gt;Wikipedia:Comments in Local Time&lt;/a&gt;.  *   * @author &lt;a href=&quot;/User:Mxn/edit?redlink=1&quot; class=&quot;new&quot; title=&quot;User:Mxn (page does not exist)&quot;&gt;User:Mxn&lt;/a&gt;: &lt;/span&gt;  &lt;span class=&quot;autocomment&quot;&gt;*  * Default settings for this gadget.: &lt;/span&gt; window.LocalComments = $.extend({ 	// USER OPTIONS //////////////////////////////////////////////////////////// 	 	/** 	 * When false, this gadget...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 * Comments in local time&lt;br /&gt;
 * [[User:Mxn/CommentsInLocalTime]]&lt;br /&gt;
 * &lt;br /&gt;
 * Adjust timestamps in comment signatures to use easy-to-understand, relative&lt;br /&gt;
 * local time instead of absolute UTC time.&lt;br /&gt;
 * &lt;br /&gt;
 * Inspired by [[Wikipedia:Comments in Local Time]].&lt;br /&gt;
 * &lt;br /&gt;
 * @author [[User:Mxn]]&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Default settings for this gadget.&lt;br /&gt;
 */&lt;br /&gt;
window.LocalComments = $.extend({&lt;br /&gt;
	// USER OPTIONS ////////////////////////////////////////////////////////////&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * When false, this gadget does nothing.&lt;br /&gt;
	 */&lt;br /&gt;
	enabled: true,&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Formats to display inline for each timestamp, keyed by a few common&lt;br /&gt;
	 * cases.&lt;br /&gt;
	 * &lt;br /&gt;
	 * If a property of this object is set to a string, the timestamp is&lt;br /&gt;
	 * formatted according to the documentation at&lt;br /&gt;
	 * &amp;lt;http://momentjs.com/docs/#/displaying/format/&amp;gt;.&lt;br /&gt;
	 * &lt;br /&gt;
	 * If a property of this object is set to a function, it is called to&lt;br /&gt;
	 * retrieve the formatted timestamp string. See&lt;br /&gt;
	 * &amp;lt;http://momentjs.com/docs/#/displaying/&amp;gt; for the various things you can&lt;br /&gt;
	 * do with the passed-in moment object.&lt;br /&gt;
	 */&lt;br /&gt;
	formats: {&lt;br /&gt;
		/**&lt;br /&gt;
		 * Within a day, show a relative time that’s easy to relate to.&lt;br /&gt;
		 */&lt;br /&gt;
		day: function (then) { return then.fromNow(); },&lt;br /&gt;
		&lt;br /&gt;
		/**&lt;br /&gt;
		 * Within a week, show a relative date and specific time, still helpful&lt;br /&gt;
		 * if the user doesn’t remember today’s date. Don’t show just a relative&lt;br /&gt;
		 * time, because a discussion may need more context than “Last Friday”&lt;br /&gt;
		 * on every comment.&lt;br /&gt;
		 */&lt;br /&gt;
		week: function (then) { return then.calendar(); },&lt;br /&gt;
		&lt;br /&gt;
		/**&lt;br /&gt;
		 * The calendar() method uses an ambiguous “MM/DD/YYYY” format for&lt;br /&gt;
		 * faraway dates; spell things out for this international audience.&lt;br /&gt;
		 */&lt;br /&gt;
		other: function (then) {&lt;br /&gt;
			var pref = mw.user.options.values.date;&lt;br /&gt;
			return then.format(window.LocalComments.formatOptions[pref] || &amp;quot;LLL&amp;quot;);&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Formats to display in each timestamp’s tooltip, one per line.&lt;br /&gt;
	 * &lt;br /&gt;
	 * If an element of this array is a string, the timestamp is formatted&lt;br /&gt;
	 * according to the documentation at&lt;br /&gt;
	 * &amp;lt;http://momentjs.com/docs/#/displaying/format/&amp;gt;.&lt;br /&gt;
	 * &lt;br /&gt;
	 * If an element of this array is a function, it is called to retrieve the&lt;br /&gt;
	 * formatted timestamp string. See &amp;lt;http://momentjs.com/docs/#/displaying/&amp;gt;&lt;br /&gt;
	 * for the various things you can do with the passed-in moment object.&lt;br /&gt;
	 */&lt;br /&gt;
	tooltipFormats: [&lt;br /&gt;
		function (then) { return then.fromNow(); },&lt;br /&gt;
		&amp;quot;LLLL&amp;quot;,&lt;br /&gt;
		&amp;quot;YYYY-MM-DDTHH:mmZ&amp;quot;,&lt;br /&gt;
	],&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * When true, this gadget refreshes timestamps periodically.&lt;br /&gt;
	 */&lt;br /&gt;
	dynamic: true,&lt;br /&gt;
}, {&lt;br /&gt;
	// SITE OPTIONS ////////////////////////////////////////////////////////////&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Numbers of namespaces to completely ignore. See [[Wikipedia:Namespace]].&lt;br /&gt;
	 */&lt;br /&gt;
	excludeNamespaces: [-1, 0, 8, 100, 108, 118],&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Names of tags that often directly contain timestamps.&lt;br /&gt;
	 * &lt;br /&gt;
	 * This is merely a performance optimization. This gadget will look at text&lt;br /&gt;
	 * nodes in any tag other than the codeTags, but adding a tag here ensures&lt;br /&gt;
	 * that it gets processed the most efficient way possible.&lt;br /&gt;
	 */&lt;br /&gt;
	proseTags: [&amp;quot;dd&amp;quot;, &amp;quot;li&amp;quot;, &amp;quot;p&amp;quot;, &amp;quot;td&amp;quot;],&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Names of tags that don’t contain timestamps either directly or&lt;br /&gt;
	 * indirectly.&lt;br /&gt;
	 */&lt;br /&gt;
	codeTags: [&amp;quot;code&amp;quot;, &amp;quot;input&amp;quot;, &amp;quot;pre&amp;quot;, &amp;quot;textarea&amp;quot;],&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * An object mapping the date format user options provided by this MediaWiki&lt;br /&gt;
	 * installation to corresponding Moment.js format strings. The user can&lt;br /&gt;
	 * choose a preferred date format in&lt;br /&gt;
	 * [[Special:Preferences#mw-prefsection-rendering-dateformat]]. See&lt;br /&gt;
	 * [[mw:Manual:Date formatting]]. These formats determine the default&lt;br /&gt;
	 * timestamp display format.&lt;br /&gt;
	 * &lt;br /&gt;
	 * These formats come from&lt;br /&gt;
	 * &amp;lt;https://doc.wikimedia.org/mediawiki-core/1.34.0/php/MessagesEn_8php.html#a2fc93ea5327f655d3ed306e221ee33f0&amp;gt;.&lt;br /&gt;
	 * When customizing these formats for a different wiki’s content language,&lt;br /&gt;
	 * consult the language’s corresponding message file’s `$dateFormats`&lt;br /&gt;
	 * variable. Use only the messages with the “both” suffix, and remove that&lt;br /&gt;
	 * suffix from each key. The MediaWiki date format syntax is described in&lt;br /&gt;
	 * &amp;lt;https://doc.wikimedia.org/mediawiki-core/1.34.0/php/classLanguage.html#a94f84f82d7f954c4cb2e191d22c6e6a6&amp;gt;&lt;br /&gt;
	 * and [[mw:Help:Extension:ParserFunctions##time]]. The Moment.js syntax is&lt;br /&gt;
	 * described in &amp;lt;https://momentjs.com/docs/#/parsing/string-format/&amp;gt;.&lt;br /&gt;
	 * &lt;br /&gt;
	 * @todo Automatically convert MediaWiki date format syntax to Moment.js&lt;br /&gt;
	 *		 date format syntax.&lt;br /&gt;
	 */&lt;br /&gt;
	formatOptions: {&lt;br /&gt;
		mdy: &amp;quot;HH:mm, MMMM D, YYYY&amp;quot;, // H:i, F j, Y&lt;br /&gt;
		dmy: &amp;quot;HH:mm, D MMMM YYYY&amp;quot;, // H:i, j F Y&lt;br /&gt;
		ymd: &amp;quot;HH:mm, YYYY MMMM D&amp;quot;, // H:i, Y F j&lt;br /&gt;
		&amp;quot;ISO 8601&amp;quot;: &amp;quot;YYYY-MM-DDTHH:mm:ss&amp;quot;, // xnY-xnm-xnd&amp;quot;T&amp;quot;xnH:xni:xns&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Expected format or formats of the timestamps in existing wikitext. If&lt;br /&gt;
	 * very different formats have been used over the course of the wiki’s&lt;br /&gt;
	 * history, specify an array of formats.&lt;br /&gt;
	 * &lt;br /&gt;
	 * This option expects parsing format strings&lt;br /&gt;
	 * &amp;lt;http://momentjs.com/docs/#/parsing/string-format/&amp;gt;.&lt;br /&gt;
	 */&lt;br /&gt;
	parseFormat: &amp;quot;H:m, D MMM YYYY&amp;quot;,&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Regular expression matching all the timestamps inserted by this MediaWiki&lt;br /&gt;
	 * installation over the years. This regular expression should more or less&lt;br /&gt;
	 * agree with the parseFormat option.&lt;br /&gt;
	 * &lt;br /&gt;
	 * Until 2005:&lt;br /&gt;
	 * 	18:16, 23 Dec 2004 (UTC)&lt;br /&gt;
	 * 2005–present:&lt;br /&gt;
	 * 	08:51, 23 November 2015 (UTC)&lt;br /&gt;
	 */&lt;br /&gt;
	parseRegExp: /\d\d:\d\d, \d\d? (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\w* \d{4} \(UTC\)/,&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * UTC offset of the wiki&amp;#039;s default local timezone. See&lt;br /&gt;
	 * [[mw:Manual:Timezone]].&lt;br /&gt;
	 */&lt;br /&gt;
	utcOffset: 0,&lt;br /&gt;
}, window.LocalComments);&lt;br /&gt;
&lt;br /&gt;
$(function () {&lt;br /&gt;
	if (!LocalComments.enabled&lt;br /&gt;
		|| LocalComments.excludeNamespaces.indexOf(mw.config.get(&amp;quot;wgNamespaceNumber&amp;quot;)) !== -1&lt;br /&gt;
		|| [&amp;quot;view&amp;quot;, &amp;quot;submit&amp;quot;].indexOf(mw.config.get(&amp;quot;wgAction&amp;quot;)) === -1&lt;br /&gt;
		|| mw.util.getParamValue(&amp;quot;disable&amp;quot;) === &amp;quot;loco&amp;quot;)&lt;br /&gt;
	{&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	var proseTags = LocalComments.proseTags.join(&amp;quot;\n&amp;quot;).toUpperCase().split(&amp;quot;\n&amp;quot;);&lt;br /&gt;
	// Exclude &amp;lt;time&amp;gt; to avoid an infinite loop when iterating over text nodes.&lt;br /&gt;
	var codeTags = $.merge(LocalComments.codeTags, [&amp;quot;time&amp;quot;]).join(&amp;quot;, &amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	// Look in the content body for DOM text nodes that may contain timestamps.&lt;br /&gt;
	// The wiki software has already localized other parts of the page.&lt;br /&gt;
	var root = $(&amp;quot;#wikiPreview, #mw-content-text&amp;quot;)[0];&lt;br /&gt;
	if (!root || !(&amp;quot;createNodeIterator&amp;quot; in document)) return;&lt;br /&gt;
	var iter = document.createNodeIterator(root, NodeFilter.SHOW_TEXT, {&lt;br /&gt;
		acceptNode: function (node) {&lt;br /&gt;
			// We can’t just check the node’s direct parent, because templates&lt;br /&gt;
			// like [[Template:Talkback]] and [[Template:Resolved]] may place a&lt;br /&gt;
			// signature inside a nondescript &amp;lt;span&amp;gt;.&lt;br /&gt;
			var isInProse = proseTags.indexOf(node.parentElement.nodeName) !== -1&lt;br /&gt;
				|| !$(node).parents(codeTags).length;&lt;br /&gt;
			var isDateNode = isInProse &amp;amp;&amp;amp; LocalComments.parseRegExp.test(node.data);&lt;br /&gt;
			return isDateNode ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;&lt;br /&gt;
		},&lt;br /&gt;
	});&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Marks up each timestamp found.&lt;br /&gt;
	 */&lt;br /&gt;
	function wrapTimestamps() {&lt;br /&gt;
		var prefixNode;&lt;br /&gt;
		while ((prefixNode = iter.nextNode())) {&lt;br /&gt;
			var result = LocalComments.parseRegExp.exec(prefixNode.data);&lt;br /&gt;
			if (!result) continue;&lt;br /&gt;
			&lt;br /&gt;
			// Split out the timestamp into a separate text node.&lt;br /&gt;
			var dateNode = prefixNode.splitText(result.index);&lt;br /&gt;
			var suffixNode = dateNode.splitText(result[0].length);&lt;br /&gt;
			&lt;br /&gt;
			// Determine the represented time.&lt;br /&gt;
			var then = moment.utc(result[0], LocalComments.parseFormat);&lt;br /&gt;
			if (!then.isValid()) {&lt;br /&gt;
				// Many Wikipedias started out with English as the default&lt;br /&gt;
				// localization, so fall back to English.&lt;br /&gt;
				then = moment.utc(result[0], &amp;quot;H:m, D MMM YYYY&amp;quot;, &amp;quot;en&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			// Wrap the timestamp inside a &amp;lt;time&amp;gt; element for findability.&lt;br /&gt;
			// This loop must wrap the text in a &amp;lt;time&amp;gt; element no matter what,&lt;br /&gt;
			// even if the time is invalid, to avoid an infinite loop as the&lt;br /&gt;
			// same node keeps coming up as a candidate that the node iterator&lt;br /&gt;
			// thinks is valid.&lt;br /&gt;
			// [[User talk:Mxn/CommentsInLocalTime.js#Interface-protected edit request on 18 November 2022]]&lt;br /&gt;
			var timeElt = $(&amp;quot;&amp;lt;time /&amp;gt;&amp;quot;);&lt;br /&gt;
			if (then.isValid()) {&lt;br /&gt;
				then.utcOffset(-LocalComments.utcOffset);&lt;br /&gt;
				// MediaWiki core styles .explain[title] the same way as&lt;br /&gt;
				// abbr[title], guiding the user to the tooltip.&lt;br /&gt;
				timeElt.addClass(&amp;quot;localcomments explain&amp;quot;);&lt;br /&gt;
				timeElt.attr(&amp;quot;datetime&amp;quot;, then.toISOString());&lt;br /&gt;
			}&lt;br /&gt;
			$(dateNode).wrap(timeElt);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Returns a formatted string for the given moment object.&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param {Moment} then The moment object to format.&lt;br /&gt;
	 * @param {String} fmt A format string or function.&lt;br /&gt;
	 * @returns {String} A formatted string.&lt;br /&gt;
	 */&lt;br /&gt;
	function formatMoment(then, fmt) {&lt;br /&gt;
		return (fmt instanceof Function) ? fmt(then) : then.format(fmt);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Reformats a timestamp marked up with the &amp;lt;time&amp;gt; element.&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param {Number} idx Unused.&lt;br /&gt;
	 * @param {Element} elt The &amp;lt;time&amp;gt; element.&lt;br /&gt;
	 */&lt;br /&gt;
	function formatTimestamp(idx, elt) {&lt;br /&gt;
		var iso = $(elt).attr(&amp;quot;datetime&amp;quot;);&lt;br /&gt;
		var then = moment(iso, moment.ISO_8601);&lt;br /&gt;
		var now = moment();&lt;br /&gt;
		var withinHours = Math.abs(then.diff(now, &amp;quot;hours&amp;quot;, true))&lt;br /&gt;
			&amp;lt;= moment.relativeTimeThreshold(&amp;quot;h&amp;quot;);&lt;br /&gt;
		var formats = LocalComments.formats;&lt;br /&gt;
		var text;&lt;br /&gt;
		if (withinHours) {&lt;br /&gt;
			text = formatMoment(then, formats.day || formats.other);&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			var dayDiff = then.diff(moment().startOf(&amp;quot;day&amp;quot;), &amp;quot;days&amp;quot;, true);&lt;br /&gt;
			if (dayDiff &amp;gt; -6 &amp;amp;&amp;amp; dayDiff &amp;lt; 7) {&lt;br /&gt;
				text = formatMoment(then, formats.week || formats.other);&lt;br /&gt;
			}&lt;br /&gt;
			else text = formatMoment(then, formats.other);&lt;br /&gt;
		}&lt;br /&gt;
		$(elt).text(text);&lt;br /&gt;
		&lt;br /&gt;
		// Add a tooltip with multiple formats.&lt;br /&gt;
		elt.title = $.map(LocalComments.tooltipFormats, function (fmt, idx) {&lt;br /&gt;
			return formatMoment(then, fmt);&lt;br /&gt;
		}).join(&amp;quot;\n&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		// Register for periodic updates.&lt;br /&gt;
		var withinMinutes = withinHours&lt;br /&gt;
			&amp;amp;&amp;amp; Math.abs(then.diff(now, &amp;quot;minutes&amp;quot;, true))&lt;br /&gt;
				&amp;lt;= moment.relativeTimeThreshold(&amp;quot;m&amp;quot;);&lt;br /&gt;
		var withinSeconds = withinMinutes&lt;br /&gt;
			&amp;amp;&amp;amp; Math.abs(then.diff(now, &amp;quot;seconds&amp;quot;, true))&lt;br /&gt;
				&amp;lt;= moment.relativeTimeThreshold(&amp;quot;s&amp;quot;);&lt;br /&gt;
		var unit = withinSeconds ? &amp;quot;seconds&amp;quot; :&lt;br /&gt;
			(withinMinutes ? &amp;quot;minutes&amp;quot; :&lt;br /&gt;
				(withinHours ? &amp;quot;hours&amp;quot; : &amp;quot;days&amp;quot;));&lt;br /&gt;
		$(elt).attr(&amp;quot;data-localcomments-unit&amp;quot;, unit);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Reformat all marked-up timestamps and start updating timestamps on an&lt;br /&gt;
	 * interval as necessary.&lt;br /&gt;
	 */&lt;br /&gt;
	function formatTimestamps() {&lt;br /&gt;
		wrapTimestamps();&lt;br /&gt;
		$(&amp;quot;.localcomments&amp;quot;).each(function (idx, elt) {&lt;br /&gt;
			// Update every timestamp at least this once.&lt;br /&gt;
			formatTimestamp(idx, elt);&lt;br /&gt;
			&lt;br /&gt;
			if (!LocalComments.dynamic) return;&lt;br /&gt;
			&lt;br /&gt;
			// Update this minute’s timestamps every second.&lt;br /&gt;
			if ($(&amp;quot;[data-localcomments-unit=&amp;#039;seconds&amp;#039;]&amp;quot;).length) {&lt;br /&gt;
				setInterval(function () {&lt;br /&gt;
					$(&amp;quot;[data-localcomments-unit=&amp;#039;seconds&amp;#039;]&amp;quot;).each(formatTimestamp);&lt;br /&gt;
				}, 1000 /* ms */);&lt;br /&gt;
			}&lt;br /&gt;
			// Update this hour’s timestamps every minute.&lt;br /&gt;
			setInterval(function () {&lt;br /&gt;
				$(&amp;quot;[data-localcomments-unit=&amp;#039;minutes&amp;#039;]&amp;quot;).each(formatTimestamp);&lt;br /&gt;
			}, 60 /* s */ * 1000 /* ms */);&lt;br /&gt;
			// Update today’s timestamps every hour.&lt;br /&gt;
			setInterval(function () {&lt;br /&gt;
				$(&amp;quot;[data-localcomments-unit=&amp;#039;hours&amp;#039;]&amp;quot;).each(formatTimestamp);&lt;br /&gt;
			}, 60 /* min */ * 60 /* s */ * 1000 /* ms */);&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	mw.loader.using(&amp;quot;moment&amp;quot;, function () {&lt;br /&gt;
		wrapTimestamps();&lt;br /&gt;
		formatTimestamps();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Antt1995</name></author>
	</entry>
</feed>