Content deleted Content added
No edit summary |
Overshot a bit |
||
(20 intermediate revisions by the same user not shown) | |||
Line 35:
* If a property is a function, it is called to retrieve the formatted
* timestamp string. The function must accept one argument, a `Date` object.
*
* If no `options` is specified, the timestamp adheres to the user’s date
* format and timezone preferences.
*/
outputFormats: {
Line 41 ⟶ 44:
* The tooltip provides a more specific timestamp to distinguish
* comments in rapid succession.
*
* See <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat#options>.
*/
relative: {
Line 49 ⟶ 54:
* Absolute dates are helpful for more distant dates, so that the user
* doesn’t have to do math in their head.
*
* See <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#date-time_component_options>
* and <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#style_shortcuts>.
*/
// absolute: {
// dateStyle: "
// timeStyle: "short",
// },
},
Line 61 ⟶ 69:
* If an element of this array is an object its `type` and `options` may be:
*
* `type` | `options`
* ------------|----------
* `relative` | `Intl.RelativeTimeFormat` options
* `absolute` | `Intl.AbsoluteTimeFormat` options
* `
* `iso8601` | —
*
* See:
* <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat#options>
* <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#date-time_component_options>
* <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#style_shortcuts>
*
* If an element of this array is a function, it is called to retrieve the
Line 116 ⟶ 130:
*/
codeTags: ["code", "input", "pre", "textarea"],
/**
* Regular expression matching all the timestamps inserted by this MediaWiki
* installation over the years. This regular expression
* capturing groups `hours`, `minutes`, `day`, `month`, `year`, and
* `timezone`.
*
* Until 2005:
Line 165 ⟶ 142:
* 08:51, 23 November 2015 (UTC)
*/
parseRegExp: /(?<hours>\d\d):(?<minutes>\d\d), (?<day>\d\d?) (?<month>(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\w*) (?<year>\d{4}) \((?<timezone>UTC)\)/,
/**
Line 209 ⟶ 186:
var prefixNode;
while ((prefixNode = iter.nextNode())) {
var then;
var dateNode;
var result = LocalComments.parseRegExp.exec(prefixNode.data);
if (
// Split out the timestamp into a separate text node.
dateNode = prefixNode.splitText(result.index);
var
// Determine the represented time.
var components = result.groups;
var monthIndex = mw.config.get("wgMonthNames").slice(1).indexOf(components.month);
// Many Wikipedias started out with English as the default
// localization, so fall back to English.
if (monthIndex === -1) {
monthIndex = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"].indexOf(components.month);
}
if (monthIndex === -1) {
monthIndex = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"].indexOf(components.month);
}
if (monthIndex !== -1) {
var offsetHours = components.hours - LocalComments.utcOffset;
var minuteOffset = (LocalComments.utcOffset - Math.round(LocalComments.utcOffset)) % 60;
var offsetMinutes = components.minutes - minuteOffset;
then = new Date(Date.UTC(components.year, monthIndex, components.day, offsetHours, offsetMinutes));
}
}
Line 231 ⟶ 220:
// [[User talk:Mxn/CommentsInLocalTime.js#Interface-protected edit request on 18 November 2022]]
var timeElt = $("<time />");
if (
// MediaWiki core styles .explain[title] the same way as
// abbr[title], guiding the user to the tooltip.
timeElt.addClass("localcomments explain");
timeElt.
}
if (dateNode) $(dateNode).wrap(timeElt);
}
}
Line 254 ⟶ 242:
var value;
var unit;
var seconds = (
value = seconds;
unit = "seconds";
Line 301 ⟶ 289:
var lang = mw.config.get("wgPageViewLanguage");
var formatter = mw.loader.require("mediawiki.DateFormatter");
switch (fmt.type) {
case "absolute":
var absolute = new Intl.DateTimeFormat(lang, fmt.options);
return absolute.format(then);
}
return formatter.formatTimeAndDate(then);
case "relative":
var relative = new Intl.RelativeTimeFormat(lang, fmt.options); var component = relativeDateComponent(then);
return
}
return formatter.formatRelativeTimeOrDate(then);
case "iso8601":
return
}
}
Line 336 ⟶ 330:
// Replace the text.
var
if (text) {
$(elt).text(text);
Line 354 ⟶ 336:
// Register for periodic updates.
var component = relativeDateComponent(then);
$(elt).attr("data-localcomments-unit", component.unit);
}
Line 386 ⟶ 369:
}
wrapTimestamps();
mw.loader.using("mediawiki.DateFormatter", function () {
formatTimestamps();
});
|