зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1456565 - Fetch fallback locale eagerly in Fluent. r=stas
MozReview-Commit-ID: A9wBGxzdD2m --HG-- extra : rebase_source : 5b8cd54faff389e9a94412b3ec928f1c36bdd4a2
This commit is contained in:
Родитель
677f146915
Коммит
09e02253d3
|
@ -27,17 +27,17 @@ const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm", {
|
||||||
const { AppConstants } = ChromeUtils.import("resource://gre/modules/AppConstants.jsm", {});
|
const { AppConstants } = ChromeUtils.import("resource://gre/modules/AppConstants.jsm", {});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CachedIterable caches the elements yielded by an iterable.
|
* CachedAsyncIterable caches the elements yielded by an iterable.
|
||||||
*
|
*
|
||||||
* It can be used to iterate over an iterable many times without depleting the
|
* It can be used to iterate over an iterable many times without depleting the
|
||||||
* iterable.
|
* iterable.
|
||||||
*/
|
*/
|
||||||
class CachedIterable {
|
class CachedAsyncIterable {
|
||||||
/**
|
/**
|
||||||
* Create an `CachedIterable` instance.
|
* Create an `CachedAsyncIterable` instance.
|
||||||
*
|
*
|
||||||
* @param {Iterable} iterable
|
* @param {Iterable} iterable
|
||||||
* @returns {CachedIterable}
|
* @returns {CachedAsyncIterable}
|
||||||
*/
|
*/
|
||||||
constructor(iterable) {
|
constructor(iterable) {
|
||||||
if (Symbol.asyncIterator in Object(iterable)) {
|
if (Symbol.asyncIterator in Object(iterable)) {
|
||||||
|
@ -82,11 +82,16 @@ class CachedIterable {
|
||||||
/**
|
/**
|
||||||
* This method allows user to consume the next element from the iterator
|
* This method allows user to consume the next element from the iterator
|
||||||
* into the cache.
|
* into the cache.
|
||||||
|
*
|
||||||
|
* @param {number} count - number of elements to consume
|
||||||
*/
|
*/
|
||||||
touchNext() {
|
async touchNext(count = 1) {
|
||||||
const { seen, iterator } = this;
|
const { seen, iterator } = this;
|
||||||
|
let idx = 0;
|
||||||
|
while (idx++ < count) {
|
||||||
if (seen.length === 0 || seen[seen.length - 1].done === false) {
|
if (seen.length === 0 || seen[seen.length - 1].done === false) {
|
||||||
seen.push(iterator.next());
|
seen.push(await iterator.next());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -122,7 +127,7 @@ class Localization {
|
||||||
constructor(resourceIds, generateMessages = defaultGenerateMessages) {
|
constructor(resourceIds, generateMessages = defaultGenerateMessages) {
|
||||||
this.resourceIds = resourceIds;
|
this.resourceIds = resourceIds;
|
||||||
this.generateMessages = generateMessages;
|
this.generateMessages = generateMessages;
|
||||||
this.ctxs = new CachedIterable(this.generateMessages(this.resourceIds));
|
this.ctxs = new CachedAsyncIterable(this.generateMessages(this.resourceIds));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -268,7 +273,7 @@ class Localization {
|
||||||
* that language negotiation or available resources changed.
|
* that language negotiation or available resources changed.
|
||||||
*/
|
*/
|
||||||
onLanguageChange() {
|
onLanguageChange() {
|
||||||
this.ctxs = new CachedIterable(this.generateMessages(this.resourceIds));
|
this.ctxs = new CachedAsyncIterable(this.generateMessages(this.resourceIds));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,8 +46,8 @@
|
||||||
|
|
||||||
document.l10n = new DOMLocalization(window, resourceIds);
|
document.l10n = new DOMLocalization(window, resourceIds);
|
||||||
|
|
||||||
// trigger first context to be fetched eagerly
|
// Trigger the first two contexts to be loaded eagerly.
|
||||||
document.l10n.ctxs.touchNext();
|
document.l10n.ctxs.touchNext(2);
|
||||||
|
|
||||||
document.l10n.ready = documentReady().then(() => {
|
document.l10n.ready = documentReady().then(() => {
|
||||||
document.l10n.registerObservers();
|
document.l10n.registerObservers();
|
||||||
|
|
Загрузка…
Ссылка в новой задаче