UNPKG

@telerik/kendo-intl

Version:

A package exporting functions for date and number parsing and formatting

149 lines (123 loc) 4.74 kB
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); } } }