From cc7b21a59afcc3d61a28cf8784146aa60ed28a35 Mon Sep 17 00:00:00 2001 From: Fedor Date: Sun, 17 Jan 2021 16:11:15 +0200 Subject: [PATCH] [Centaury] Replace usage of the ECMAScript Intl API in UI JS code with nsIScriptableDateFormat. --- .../base/content/pageinfo/pageInfo.js | 14 +++--- .../basilisk/components/feeds/FeedWriter.js | 19 ++------ .../components/places/content/places.js | 15 +++--- .../components/places/content/treeView.js | 47 +++++++------------ .../components/preferences/cookies.js | 16 ++++--- 5 files changed, 50 insertions(+), 61 deletions(-) diff --git a/application/basilisk/base/content/pageinfo/pageInfo.js b/application/basilisk/base/content/pageinfo/pageInfo.js index 7a6d0a063..98e567cb4 100644 --- a/application/basilisk/base/content/pageinfo/pageInfo.js +++ b/application/basilisk/base/content/pageinfo/pageInfo.js @@ -1051,16 +1051,18 @@ function formatNumber(number) function formatDate(datestr, unknown) { + // scriptable date formatter, for pretty printing dates + var dateService = Components.classes["@mozilla.org/intl/scriptabledateformat;1"] + .getService(Components.interfaces.nsIScriptableDateFormat); + var date = new Date(datestr); if (!date.valueOf()) return unknown; - const locale = Components.classes["@mozilla.org/chrome/chrome-registry;1"] - .getService(Components.interfaces.nsIXULChromeRegistry) - .getSelectedLocale("global", true); - const dtOptions = { year: 'numeric', month: 'long', day: 'numeric', - hour: 'numeric', minute: 'numeric', second: 'numeric' }; - return date.toLocaleString(locale, dtOptions); + return dateService.FormatDateTime("", dateService.dateFormatLong, + dateService.timeFormatSeconds, + date.getFullYear(), date.getMonth()+1, date.getDate(), + date.getHours(), date.getMinutes(), date.getSeconds()); } function doCopy() diff --git a/application/basilisk/components/feeds/FeedWriter.js b/application/basilisk/components/feeds/FeedWriter.js index ceb2a7e2f..d208ee596 100644 --- a/application/basilisk/components/feeds/FeedWriter.js +++ b/application/basilisk/components/feeds/FeedWriter.js @@ -185,20 +185,11 @@ FeedWriter.prototype = { if (!dateObj.getTime()) return false; - return this._dateFormatter.format(dateObj); - }, - - __dateFormatter: null, - get _dateFormatter() { - if (!this.__dateFormatter) { - const locale = Cc["@mozilla.org/chrome/chrome-registry;1"] - .getService(Ci.nsIXULChromeRegistry) - .getSelectedLocale("global", true); - const dtOptions = { year: 'numeric', month: 'long', day: 'numeric', - hour: 'numeric', minute: 'numeric' }; - this.__dateFormatter = new Intl.DateTimeFormat(locale, dtOptions); - } - return this.__dateFormatter; + let dateService = Cc["@mozilla.org/intl/scriptabledateformat;1"]. + getService(Ci.nsIScriptableDateFormat); + return dateService.FormatDateTime("", dateService.dateFormatLong, dateService.timeFormatNoSeconds, + dateObj.getFullYear(), dateObj.getMonth()+1, dateObj.getDate(), + dateObj.getHours(), dateObj.getMinutes(), dateObj.getSeconds()); }, /** diff --git a/application/basilisk/components/places/content/places.js b/application/basilisk/components/places/content/places.js index c0df8732c..30b4b7b46 100644 --- a/application/basilisk/components/places/content/places.js +++ b/application/basilisk/components/places/content/places.js @@ -409,11 +409,8 @@ var PlacesOrganizer = { populateRestoreMenu: function() { let restorePopup = document.getElementById("fileRestorePopup"); - const locale = Cc["@mozilla.org/chrome/chrome-registry;1"] - .getService(Ci.nsIXULChromeRegistry) - .getSelectedLocale("global", true); - const dtOptions = { year: 'numeric', month: 'long', day: 'numeric' }; - let dateFormatter = new Intl.DateTimeFormat(locale, dtOptions); + let dateSvc = Cc["@mozilla.org/intl/scriptabledateformat;1"]. + getService(Ci.nsIScriptableDateFormat); // Remove existing menu items. Last item is the restoreFromFile item. while (restorePopup.childNodes.length > 1) @@ -445,7 +442,13 @@ var PlacesOrganizer = { let backupDate = PlacesBackups.getDateForFile(backupFiles[i]); let m = restorePopup.insertBefore(document.createElement("menuitem"), document.getElementById("restoreFromFile")); - m.setAttribute("label", dateFormatter.format(backupDate) + sizeInfo); + m.setAttribute("label", + dateSvc.FormatDate("", + Ci.nsIScriptableDateFormat.dateFormatLong, + backupDate.getFullYear(), + backupDate.getMonth() + 1, + backupDate.getDate()) + + sizeInfo); m.setAttribute("value", OS.Path.basename(backupFiles[i])); m.setAttribute("oncommand", "PlacesOrganizer.onRestoreMenuItemClick(this);"); diff --git a/application/basilisk/components/places/content/treeView.js b/application/basilisk/components/places/content/treeView.js index 810c4ab8c..dc1f829bb 100644 --- a/application/basilisk/components/places/content/treeView.js +++ b/application/basilisk/components/places/content/treeView.js @@ -33,6 +33,15 @@ PlacesTreeView.prototype = { return this.__xulStore; }, + __dateService: null, + get _dateService() { + if (!this.__dateService) { + this.__dateService = Cc["@mozilla.org/intl/scriptabledateformat;1"]. + getService(Ci.nsIScriptableDateFormat); + } + return this.__dateService; + }, + QueryInterface: XPCOMUtils.generateQI(PTV_interfaces), // Bug 761494: @@ -495,36 +504,16 @@ PlacesTreeView.prototype = { let midnight = now - (now % MS_PER_DAY); midnight += new Date(midnight).getTimezoneOffset() * MS_PER_MINUTE; + let dateFormat = timeMs >= midnight ? + Ci.nsIScriptableDateFormat.dateFormatNone : + Ci.nsIScriptableDateFormat.dateFormatShort; + let timeObj = new Date(timeMs); - return timeMs >= midnight ? this._todayFormatter.format(timeObj) - : this._dateFormatter.format(timeObj); - }, - - // We use a different formatter for times within the current day, - // so we cache both a "today" formatter and a general date formatter. - __todayFormatter: null, - get _todayFormatter() { - if (!this.__todayFormatter) { - const locale = Cc["@mozilla.org/chrome/chrome-registry;1"] - .getService(Ci.nsIXULChromeRegistry) - .getSelectedLocale("global", true); - const dtOptions = { hour: 'numeric', minute: 'numeric' }; - this.__todayFormatter = new Intl.DateTimeFormat(locale, dtOptions); - } - return this.__todayFormatter; - }, - - __dateFormatter: null, - get _dateFormatter() { - if (!this.__dateFormatter) { - const locale = Cc["@mozilla.org/chrome/chrome-registry;1"] - .getService(Ci.nsIXULChromeRegistry) - .getSelectedLocale("global", true); - const dtOptions = { year: 'numeric', month: 'numeric', day: 'numeric', - hour: 'numeric', minute: 'numeric' }; - this.__dateFormatter = new Intl.DateTimeFormat(locale, dtOptions); - } - return this.__dateFormatter; + return (this._dateService.FormatDateTime("", dateFormat, + Ci.nsIScriptableDateFormat.timeFormatNoSeconds, + timeObj.getFullYear(), timeObj.getMonth() + 1, + timeObj.getDate(), timeObj.getHours(), + timeObj.getMinutes(), timeObj.getSeconds())); }, COLUMN_TYPE_UNKNOWN: 0, diff --git a/application/basilisk/components/preferences/cookies.js b/application/basilisk/components/preferences/cookies.js index d44e9ee8a..b63072bc0 100644 --- a/application/basilisk/components/preferences/cookies.js +++ b/application/basilisk/components/preferences/cookies.js @@ -12,6 +12,8 @@ Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); var gCookiesWindow = { _cm : Components.classes["@mozilla.org/cookiemanager;1"] .getService(Components.interfaces.nsICookieManager), + _ds : Components.classes["@mozilla.org/intl/scriptabledateformat;1"] + .getService(Components.interfaces.nsIScriptableDateFormat), _hosts : {}, _hostOrder : [], _tree : null, @@ -490,12 +492,14 @@ var gCookiesWindow = { formatExpiresString: function (aExpires) { if (aExpires) { var date = new Date(1000 * aExpires); - const locale = Components.classes["@mozilla.org/chrome/chrome-registry;1"] - .getService(Components.interfaces.nsIXULChromeRegistry) - .getSelectedLocale("global", true); - const dtOptions = { year: 'numeric', month: 'long', day: 'numeric', - hour: 'numeric', minute: 'numeric', second: 'numeric' }; - return date.toLocaleString(locale, dtOptions); + return this._ds.FormatDateTime("", this._ds.dateFormatLong, + this._ds.timeFormatSeconds, + date.getFullYear(), + date.getMonth() + 1, + date.getDate(), + date.getHours(), + date.getMinutes(), + date.getSeconds()); } return this._bundle.getString("expireAtEndOfSession"); },