Skip to content

Commit

Permalink
Merge a49ea55 into 394625d
Browse files Browse the repository at this point in the history
  • Loading branch information
davilima6 committed Feb 18, 2019
2 parents 394625d + a49ea55 commit aae8fa5
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 29 deletions.
65 changes: 36 additions & 29 deletions mockup/patterns/moment/pattern.js
Expand Up @@ -86,6 +86,42 @@ define([
'mockup-i18n',
'moment'
], function($, Base, i18n, moment) {
var currentLanguage = (new i18n()).currentLanguage;

// From https://github.com/moment/moment/blob/3147fbc/src/test/moment/format.js#L463-L468
var MOMENT_LOCALES =
'ar-sa ar-tn ar az be bg bn bo br bs ca cs cv cy da de-at de dv el ' +
'en-au en-ca en-gb en-ie en-nz eo es et eu fa fi fo fr-ca fr-ch fr fy ' +
'gd gl he hi hr hu hy-am id is it ja jv ka kk km ko lb lo lt lv me mk ml ' +
'mr ms-my ms my nb ne nl nn pl pt-br pt ro ru se si sk sl sq sr-cyrl ' +
'sr sv sw ta te th tl-ph tlh tr tzl tzm-latn tzm uk uz vi zh-cn zh-tw';

function isLangSupported(lang) {
return MOMENT_LOCALES.split(' ').indexOf(lang) !== -1;
}

function lazyLoadMomentLocale() {
var LANG_FALLBACK = 'en';

if (currentLanguage === LANG_FALLBACK) {
// English locale is built-in, no need to load, so let's exit early
// to avoid computing fallback, which happens at every loaded page
return;
}

// Format language as expect by Moment.js, neither POSIX (like TinyMCE) nor IETF
var lang = currentLanguage.replace('_', '-').toLowerCase();

// Use language code as fallback, otherwise built-in English locale
lang = isLangSupported(lang) ? lang : lang.split('-')[0];
lang = isLangSupported(lang) ? lang : LANG_FALLBACK;
if (lang === LANG_FALLBACK) {
return;
}

require(['moment-url/' + lang]);
}

lazyLoadMomentLocale();

var Moment = Base.extend({
Expand All @@ -109,7 +145,6 @@ define([
if (!date || date === 'None') {
return;
}
var currentLanguage = (new i18n()).currentLanguage;
if (currentLanguage in self.moment_i18n_map) {
currentLanguage = self.moment_i18n_map[currentLanguage];
}
Expand Down Expand Up @@ -147,31 +182,3 @@ define([

return Moment;
});

function lazyLoadMomentLocale() {
var BUILTIN_FALLBACK = 'en';
var lang = document.querySelector('html').lang || BUILTIN_FALLBACK;

if (lang === 'en') {
// English locale is built-in, no need to load
return;
}

// Taken from https://github.com/moment/moment/blob/3147fbc486209f0b479dc0b29672d4c2ef39cf43/src/test/moment/format.js#L463-L468
var MOMENT_LOCALES =
'ar-sa ar-tn ar az be bg bn bo br bs ca cs cv cy da de-at de dv el ' +
'en-au en-ca en-gb en-ie en-nz eo es et eu fa fi fo fr-ca fr-ch fr fy ' +
'gd gl he hi hr hu hy-am id is it ja jv ka kk km ko lb lo lt lv me mk ml ' +
'mr ms-my ms my nb ne nl nn pl pt-br pt ro ru se si sk sl sq sr-cyrl ' +
'sr sv sw ta te th tl-ph tlh tr tzl tzm-latn tzm uk uz vi zh-cn zh-tw';

lang = MOMENT_LOCALES.split(' ').includes(lang) ? lang : lang.split('-')[0];
lang = MOMENT_LOCALES.split(' ').includes(lang) ? lang : BUILTIN_FALLBACK;

if (lang === BUILTIN_FALLBACK) {
// English locale is built-in, no need to load
return;
}

require(['moment-url/' + lang]);
}
2 changes: 2 additions & 0 deletions news/894.fix
@@ -0,0 +1,2 @@
* Fix bugs in Moment.js lazy locales, affecting: language variant fallbacks, variable leak to global namespace, IE11 widget support
[davilima6]

0 comments on commit aae8fa5

Please sign in to comment.