@telerik/kendo-intl
Version:
A package exporting functions for date and number parsing and formatting
149 lines (123 loc) • 4.74 kB
JavaScript
import { cldr } from './info';
var predefinedDatePatterns = {
s: "yyyy'-'MM'-'dd'T'HH':'mm':'ss",
u: "yyyy'-'MM'-'dd HH':'mm':'ss'Z'"
};
var YEAR_REGEX = /y+/g;
var SHORT_DATE = [ [ "dateFormats", "short" ] ];
var datePatterns = {
D: [ [ "dateFormats", "full" ] ],
m: [ [ "dateTimeFormats", "availableFormats", "MMMd" ] ],
M: [ [ "dateTimeFormats", "availableFormats", "MMMMd" ] ],
y: [ [ "dateTimeFormats", "availableFormats", "yMMM" ] ],
Y: [ [ "dateTimeFormats", "availableFormats", "yMMMM" ] ],
F: [ [ "dateFormats", "full" ], [ "timeFormats", "medium" ] ],
g: [ [ "dateTimeFormats", "availableFormats", "yMd" ], [ "timeFormats", "short" ] ],
G: [ [ "dateTimeFormats", "availableFormats", "yMd" ], [ "timeFormats", "medium" ] ],
t: [ [ "timeFormats", "short" ] ],
T: [ [ "timeFormats", "medium" ] ]
};
function toArray(obj) {
var result = [];
var names = Object.getOwnPropertyNames(obj);
for (var idx = 0; idx < names.length; idx++) {
var value = obj[names[idx]];
result.push(value);
}
return result;
}
function getCalendarNames(info, isObj) {
var result = {};
for (var formatType in info) {
var names = result[formatType] = {};
for (var format in info[formatType]) {
var formats = info[formatType][format];
names[format] = isObj ? formats : toArray(formats);
}
}
return result;
}
function getEraNames(eras) {
var result = {};
var format = result.format = {};
var eraNameMap = {
eraAbbr: "abbreviated",
eraNames: "wide",
eraNarrow: "narrow"
};
for (var eraFormatName in eras) {
var formatName = eraNameMap[eraFormatName];
format[formatName] = eras[eraFormatName];
}
return result;
}
function loadCalendarNames(locale, calendar) {
var localeCalendar = cldr[locale].calendar;
localeCalendar.days = getCalendarNames(calendar.days);
localeCalendar.months = getCalendarNames(calendar.months);
localeCalendar.quarters = getCalendarNames(calendar.quarters);
localeCalendar.dayPeriods = getCalendarNames(calendar.dayPeriods, true);
localeCalendar.eras = getEraNames(calendar.eras);
}
function loadCalendarDateFields(locale, fields) {
var localeCalendar = cldr[locale].calendar;
var dateFields = {};
for (var field in fields) {
var ref = field.split('-');
var fieldName = ref[0];
var formatType = ref[1]; if ( formatType === void 0 ) formatType = 'wide';
var fieldInfo = dateFields[fieldName] || {};
var displayName = fields[field].displayName;
if (!displayName) { continue; }
fieldInfo[formatType] = displayName;
dateFields[fieldName] = fieldInfo;
}
localeCalendar.dateFields = dateFields;
}
function getPredefinedFormat(paths, calendar) {
var result = [];
for (var pathIdx = 0; pathIdx < paths.length; pathIdx++) {
var fields = paths[ pathIdx ];
var pattern = calendar;
for (var idx = 0; idx < fields.length; idx++) {
pattern = pattern[fields[idx]];
}
result.push(pattern);
}
return result.join(" ");
}
function loadCalendarPatterns(locale, calendar) {
var cldrCalendar = cldr[locale].calendar;
var patterns = cldrCalendar.patterns = {};
patterns.d = getPredefinedFormat(SHORT_DATE, calendar).replace(YEAR_REGEX, 'y');
for (var pattern in datePatterns) {
patterns[pattern] = getPredefinedFormat(datePatterns[pattern], calendar);
}
for (var pattern$1 in predefinedDatePatterns) {
patterns[pattern$1] = predefinedDatePatterns[pattern$1];
}
var dateTimeFormats = calendar.dateTimeFormats;
cldrCalendar.dateTimeFormats = {
full: dateTimeFormats.full,
long: dateTimeFormats.long,
medium: dateTimeFormats.medium,
short: dateTimeFormats.short,
availableFormats: dateTimeFormats.availableFormats
};
cldrCalendar.timeFormats = calendar.timeFormats;
cldrCalendar.dateFormats = calendar.dateFormats;
}
export default function loadCalendarInfo(locale, info) {
var calendar = cldr[locale].calendar = cldr[locale].calendar || {};
for (var field in info) {
if (field === "timeZoneNames") {
calendar.gmtFormat = info[field].gmtFormat;
calendar.gmtZeroFormat = info[field].gmtZeroFormat;
} else if (field === "calendars" && info[field].gregorian) {
loadCalendarPatterns(locale, info[field].gregorian);
loadCalendarNames(locale, info[field].gregorian);
} else if (field === "fields") {
loadCalendarDateFields(locale, info.fields);
}
}
}