@ui5/webcomponents-localization 0.0.0-cf069fb29 → 0.0.0-d4d43327a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/CHANGELOG.md +224 -0
  2. package/README.md +5 -6
  3. package/dist/Assets-static.d.ts +1 -0
  4. package/dist/Assets-static.js +1 -0
  5. package/dist/Assets-static.js.map +1 -0
  6. package/dist/Assets.d.ts +1 -0
  7. package/dist/Assets.js +1 -0
  8. package/dist/Assets.js.map +1 -0
  9. package/dist/DateFormat.d.ts +6 -0
  10. package/dist/DateFormat.js +6 -2
  11. package/dist/DateFormat.js.map +1 -0
  12. package/dist/LocaleData.d.ts +6 -0
  13. package/dist/LocaleData.js +6 -2
  14. package/dist/LocaleData.js.map +1 -0
  15. package/dist/dates/CalendarDate.d.ts +41 -0
  16. package/dist/dates/CalendarDate.js +170 -201
  17. package/dist/dates/CalendarDate.js.map +1 -0
  18. package/dist/dates/ExtremeDates.d.ts +5 -0
  19. package/dist/dates/ExtremeDates.js +25 -35
  20. package/dist/dates/ExtremeDates.js.map +1 -0
  21. package/dist/dates/UniversalDate.d.ts +46 -0
  22. package/dist/dates/UniversalDate.js +5 -0
  23. package/dist/dates/UniversalDate.js.map +1 -0
  24. package/dist/dates/calculateWeekNumber.d.ts +4 -0
  25. package/dist/dates/calculateWeekNumber.js +42 -48
  26. package/dist/dates/calculateWeekNumber.js.map +1 -0
  27. package/dist/dates/convertMonthNumbersToMonthNames.d.ts +16 -0
  28. package/dist/dates/convertMonthNumbersToMonthNames.js +30 -0
  29. package/dist/dates/convertMonthNumbersToMonthNames.js.map +1 -0
  30. package/dist/dates/getDaysInMonth.d.ts +3 -0
  31. package/dist/dates/getDaysInMonth.js +10 -0
  32. package/dist/dates/getDaysInMonth.js.map +1 -0
  33. package/dist/dates/getRoundedTimestamp.d.ts +7 -0
  34. package/dist/dates/getRoundedTimestamp.js +9 -9
  35. package/dist/dates/getRoundedTimestamp.js.map +1 -0
  36. package/dist/dates/getTodayUTCTimestamp.d.ts +7 -0
  37. package/dist/dates/getTodayUTCTimestamp.js +2 -3
  38. package/dist/dates/getTodayUTCTimestamp.js.map +1 -0
  39. package/dist/dates/modifyDateBy.d.ts +13 -0
  40. package/dist/dates/modifyDateBy.js +27 -29
  41. package/dist/dates/modifyDateBy.js.map +1 -0
  42. package/dist/dates/transformDateToSecondaryType.d.ts +7 -0
  43. package/dist/dates/transformDateToSecondaryType.js +17 -0
  44. package/dist/dates/transformDateToSecondaryType.js.map +1 -0
  45. package/dist/features/calendar/Buddhist.js +1 -0
  46. package/dist/features/calendar/Buddhist.js.map +1 -0
  47. package/dist/features/calendar/Gregorian.js +1 -0
  48. package/dist/features/calendar/Gregorian.js.map +1 -0
  49. package/dist/features/calendar/Islamic.js +1 -0
  50. package/dist/features/calendar/Islamic.js.map +1 -0
  51. package/dist/features/calendar/Japanese.js +1 -0
  52. package/dist/features/calendar/Japanese.js.map +1 -0
  53. package/dist/features/calendar/Persian.js +1 -0
  54. package/dist/features/calendar/Persian.js.map +1 -0
  55. package/dist/generated/assets/cldr/ar.json +799 -1
  56. package/dist/generated/assets/cldr/ar_EG.json +799 -1
  57. package/dist/generated/assets/cldr/ar_SA.json +799 -1
  58. package/dist/generated/assets/cldr/bg.json +764 -1
  59. package/dist/generated/assets/cldr/ca.json +798 -1
  60. package/dist/generated/assets/cldr/cs.json +797 -1
  61. package/dist/generated/assets/cldr/cy.json +729 -1
  62. package/dist/generated/assets/cldr/da.json +764 -1
  63. package/dist/generated/assets/cldr/de.json +798 -1
  64. package/dist/generated/assets/cldr/de_AT.json +798 -1
  65. package/dist/generated/assets/cldr/de_CH.json +798 -1
  66. package/dist/generated/assets/cldr/el.json +697 -1
  67. package/dist/generated/assets/cldr/el_CY.json +697 -1
  68. package/dist/generated/assets/cldr/en.json +763 -2
  69. package/dist/generated/assets/cldr/en_AU.json +764 -2
  70. package/dist/generated/assets/cldr/en_GB.json +763 -1
  71. package/dist/generated/assets/cldr/en_HK.json +763 -1
  72. package/dist/generated/assets/cldr/en_IE.json +763 -1
  73. package/dist/generated/assets/cldr/en_IN.json +763 -1
  74. package/dist/generated/assets/cldr/en_NZ.json +763 -1
  75. package/dist/generated/assets/cldr/en_PG.json +763 -1
  76. package/dist/generated/assets/cldr/en_SG.json +763 -1
  77. package/dist/generated/assets/cldr/en_ZA.json +763 -1
  78. package/dist/generated/assets/cldr/es.json +730 -1
  79. package/dist/generated/assets/cldr/es_AR.json +730 -1
  80. package/dist/generated/assets/cldr/es_BO.json +733 -4
  81. package/dist/generated/assets/cldr/es_CL.json +733 -4
  82. package/dist/generated/assets/cldr/es_CO.json +730 -1
  83. package/dist/generated/assets/cldr/es_MX.json +733 -4
  84. package/dist/generated/assets/cldr/es_PE.json +733 -4
  85. package/dist/generated/assets/cldr/es_UY.json +733 -4
  86. package/dist/generated/assets/cldr/es_VE.json +732 -3
  87. package/dist/generated/assets/cldr/et.json +763 -1
  88. package/dist/generated/assets/cldr/fa.json +765 -1
  89. package/dist/generated/assets/cldr/fi.json +797 -1
  90. package/dist/generated/assets/cldr/fr.json +763 -1
  91. package/dist/generated/assets/cldr/fr_BE.json +763 -1
  92. package/dist/generated/assets/cldr/fr_CA.json +763 -1
  93. package/dist/generated/assets/cldr/fr_CH.json +763 -1
  94. package/dist/generated/assets/cldr/fr_LU.json +763 -1
  95. package/dist/generated/assets/cldr/he.json +798 -1
  96. package/dist/generated/assets/cldr/hi.json +730 -1
  97. package/dist/generated/assets/cldr/hr.json +763 -1
  98. package/dist/generated/assets/cldr/hu.json +831 -1
  99. package/dist/generated/assets/cldr/id.json +763 -1
  100. package/dist/generated/assets/cldr/it.json +763 -1
  101. package/dist/generated/assets/cldr/it_CH.json +763 -1
  102. package/dist/generated/assets/cldr/ja.json +797 -1
  103. package/dist/generated/assets/cldr/kk.json +763 -1
  104. package/dist/generated/assets/cldr/ko.json +797 -1
  105. package/dist/generated/assets/cldr/lt.json +763 -1
  106. package/dist/generated/assets/cldr/lv.json +763 -1
  107. package/dist/generated/assets/cldr/ms.json +731 -1
  108. package/dist/generated/assets/cldr/nb.json +764 -1
  109. package/dist/generated/assets/cldr/nl.json +730 -1
  110. package/dist/generated/assets/cldr/nl_BE.json +730 -1
  111. package/dist/generated/assets/cldr/pl.json +797 -1
  112. package/dist/generated/assets/cldr/pt.json +763 -1
  113. package/dist/generated/assets/cldr/pt_PT.json +763 -1
  114. package/dist/generated/assets/cldr/ro.json +763 -1
  115. package/dist/generated/assets/cldr/ru.json +763 -1
  116. package/dist/generated/assets/cldr/ru_UA.json +763 -1
  117. package/dist/generated/assets/cldr/sk.json +797 -1
  118. package/dist/generated/assets/cldr/sl.json +797 -1
  119. package/dist/generated/assets/cldr/sr.json +763 -1
  120. package/dist/generated/assets/cldr/sr_Latn.json +763 -1
  121. package/dist/generated/assets/cldr/sv.json +764 -1
  122. package/dist/generated/assets/cldr/th.json +831 -1
  123. package/dist/generated/assets/cldr/tr.json +831 -1
  124. package/dist/generated/assets/cldr/uk.json +763 -1
  125. package/dist/generated/assets/cldr/vi.json +763 -1
  126. package/dist/generated/assets/cldr/zh_CN.json +799 -2
  127. package/dist/generated/assets/cldr/zh_HK.json +799 -2
  128. package/dist/generated/assets/cldr/zh_SG.json +799 -2
  129. package/dist/generated/assets/cldr/zh_TW.json +798 -1
  130. package/dist/generated/json-imports/LocaleData-static.js +2 -1
  131. package/dist/generated/json-imports/LocaleData.js +2 -1
  132. package/dist/getCachedLocaleDataInstance.d.ts +4 -0
  133. package/dist/getCachedLocaleDataInstance.js +6 -9
  134. package/dist/getCachedLocaleDataInstance.js.map +1 -0
  135. package/dist/locale/getLocaleData.d.ts +11 -0
  136. package/dist/locale/getLocaleData.js +13 -17
  137. package/dist/locale/getLocaleData.js.map +1 -0
  138. package/dist/sap/base/Log.js +28 -29
  139. package/dist/sap/base/assert.js +5 -6
  140. package/dist/sap/base/util/LoaderExtensions.d.ts +4 -0
  141. package/dist/sap/base/util/LoaderExtensions.js +9 -12
  142. package/dist/sap/base/util/LoaderExtensions.js.map +1 -0
  143. package/dist/sap/ui/core/Configuration.d.ts +17 -0
  144. package/dist/sap/ui/core/Configuration.js +20 -0
  145. package/dist/sap/ui/core/Configuration.js.map +1 -0
  146. package/dist/sap/ui/core/Core.d.ts +26 -0
  147. package/dist/sap/ui/core/Core.js +7 -32
  148. package/dist/sap/ui/core/Core.js.map +1 -0
  149. package/dist/sap/ui/core/FormatSettings.d.ts +10 -0
  150. package/dist/sap/ui/core/FormatSettings.js +14 -0
  151. package/dist/sap/ui/core/FormatSettings.js.map +1 -0
  152. package/dist/sap/ui/core/Locale.js +13 -0
  153. package/dist/sap/ui/core/LocaleData.js +107 -6
  154. package/dist/sap/ui/core/date/Buddhist.js +0 -6
  155. package/dist/sap/ui/core/date/CalendarUtils.js +36 -0
  156. package/dist/sap/ui/core/date/CalendarWeekNumbering.js +7 -0
  157. package/dist/sap/ui/core/date/Islamic.js +3 -3
  158. package/dist/sap/ui/core/date/Japanese.js +4 -4
  159. package/dist/sap/ui/core/date/UniversalDate.js +79 -22
  160. package/dist/sap/ui/core/format/DateFormat.js +496 -201
  161. package/dist/sap/ui/core/format/TimezoneUtil.js +94 -0
  162. package/package-scripts.js +5 -7
  163. package/package.json +6 -5
  164. package/src/DateFormat.ts +8 -0
  165. package/src/LocaleData.ts +8 -0
  166. package/src/dates/{CalendarDate.js → CalendarDate.ts} +43 -34
  167. package/src/dates/{ExtremeDates.js → ExtremeDates.ts} +6 -5
  168. package/src/dates/UniversalDate.ts +51 -0
  169. package/src/dates/{calculateWeekNumber.js → calculateWeekNumber.ts} +5 -3
  170. package/src/dates/convertMonthNumbersToMonthNames.ts +34 -0
  171. package/src/dates/getDaysInMonth.ts +11 -0
  172. package/src/dates/{getRoundedTimestamp.js → getRoundedTimestamp.ts} +3 -3
  173. package/src/dates/getTodayUTCTimestamp.ts +10 -0
  174. package/src/dates/{modifyDateBy.js → modifyDateBy.ts} +1 -1
  175. package/src/dates/transformDateToSecondaryType.ts +21 -0
  176. package/src/features/calendar/Buddhist.ts +1 -0
  177. package/src/features/calendar/Gregorian.ts +1 -0
  178. package/src/features/calendar/Islamic.ts +1 -0
  179. package/src/features/calendar/Japanese.ts +1 -0
  180. package/src/features/calendar/Persian.ts +1 -0
  181. package/src/getCachedLocaleDataInstance.ts +15 -0
  182. package/src/locale/{getLocaleData.js → getLocaleData.ts} +9 -8
  183. package/src/sap/base/util/{LoaderExtensions.js → LoaderExtensions.ts} +1 -1
  184. package/src/sap/ui/core/{Core.js → Configuration.ts} +5 -21
  185. package/src/sap/ui/core/Core.ts +15 -0
  186. package/src/sap/ui/core/FormatSettings.ts +16 -0
  187. package/tsconfig.json +13 -0
  188. package/used-modules.txt +4 -1
  189. package/hash.txt +0 -1
  190. package/src/DateFormat.js +0 -3
  191. package/src/LocaleData.js +0 -3
  192. package/src/dates/getTodayUTCTimestamp.js +0 -9
  193. package/src/getCachedLocaleDataInstance.js +0 -13
  194. /package/{src/features/calendar/Buddhist.js → dist/features/calendar/Buddhist.d.ts} +0 -0
  195. /package/{src/features/calendar/Gregorian.js → dist/features/calendar/Gregorian.d.ts} +0 -0
  196. /package/{src/features/calendar/Islamic.js → dist/features/calendar/Islamic.d.ts} +0 -0
  197. /package/{src/features/calendar/Japanese.js → dist/features/calendar/Japanese.d.ts} +0 -0
  198. /package/{src/features/calendar/Persian.js → dist/features/calendar/Persian.d.ts} +0 -0
  199. /package/src/{Assets-static.js → Assets-static.ts} +0 -0
  200. /package/src/{Assets.js → Assets.ts} +0 -0
@@ -5,11 +5,14 @@ import CalendarType from './CalendarType.js';
5
5
  import Locale from './Locale.js';
6
6
  import assert from '../../base/assert.js';
7
7
  import LoaderExtensions from '../../base/util/LoaderExtensions.js';
8
+ import Configuration from './Configuration.js';
8
9
  var LocaleData = BaseObject.extend('sap.ui.core.LocaleData', {
9
10
  constructor: function (oLocale) {
10
11
  this.oLocale = oLocale;
11
12
  BaseObject.apply(this);
12
- this.mData = getData(oLocale);
13
+ var oDataLoaded = getData(oLocale);
14
+ this.mData = oDataLoaded.mData;
15
+ this.sCLDRLocaleId = oDataLoaded.sCLDRLocaleId;
13
16
  },
14
17
  _get: function () {
15
18
  return this._getDeep(this.mData, arguments);
@@ -95,6 +98,56 @@ var LocaleData = BaseObject.extend('sap.ui.core.LocaleData', {
95
98
  assert(sStyle == 'short' || sStyle == 'medium' || sStyle == 'long' || sStyle == 'full', 'sStyle must be short, medium, long or full');
96
99
  return this._get(getCLDRCalendarName(sCalendarType), 'dateFormats', sStyle);
97
100
  },
101
+ getFlexibleDayPeriods: function (sWidth, sCalendarType) {
102
+ return this._get(getCLDRCalendarName(sCalendarType), 'flexibleDayPeriods', 'format', sWidth);
103
+ },
104
+ getFlexibleDayPeriodsStandAlone: function (sWidth, sCalendarType) {
105
+ return this._get(getCLDRCalendarName(sCalendarType), 'flexibleDayPeriods', 'stand-alone', sWidth);
106
+ },
107
+ getFlexibleDayPeriodOfTime: function (iHour, iMinute) {
108
+ var iAbsoluteMinutes, oDayPeriodRules, sPeriodMatch;
109
+ iAbsoluteMinutes = (iHour * 60 + iMinute) % 1440;
110
+ oDayPeriodRules = this._get('dayPeriodRules');
111
+ function parseToAbsoluteMinutes(sValue) {
112
+ var aSplit = sValue.split(':'), sHour = aSplit[0], sMinute = aSplit[1];
113
+ return parseInt(sHour) * 60 + parseInt(sMinute);
114
+ }
115
+ sPeriodMatch = Object.keys(oDayPeriodRules).find(function (sDayPeriodRule) {
116
+ var oDayPeriodRule = oDayPeriodRules[sDayPeriodRule];
117
+ return oDayPeriodRule['_at'] && parseToAbsoluteMinutes(oDayPeriodRule['_at']) === iAbsoluteMinutes;
118
+ });
119
+ if (sPeriodMatch) {
120
+ return sPeriodMatch;
121
+ }
122
+ return Object.keys(oDayPeriodRules).find(function (sDayPeriodRule) {
123
+ var iEndValue, aIntervals, iStartValue, oDayPeriodRule = oDayPeriodRules[sDayPeriodRule];
124
+ if (oDayPeriodRule['_at']) {
125
+ return false;
126
+ }
127
+ iStartValue = parseToAbsoluteMinutes(oDayPeriodRule['_from']);
128
+ iEndValue = parseToAbsoluteMinutes(oDayPeriodRule['_before']);
129
+ if (iStartValue > iEndValue) {
130
+ aIntervals = [
131
+ {
132
+ start: iStartValue,
133
+ end: 1440
134
+ },
135
+ {
136
+ start: 0,
137
+ end: iEndValue
138
+ }
139
+ ];
140
+ } else {
141
+ aIntervals = [{
142
+ start: iStartValue,
143
+ end: iEndValue
144
+ }];
145
+ }
146
+ return aIntervals.some(function (oInterval) {
147
+ return oInterval.start <= iAbsoluteMinutes && oInterval.end > iAbsoluteMinutes;
148
+ });
149
+ });
150
+ },
98
151
  getTimePattern: function (sStyle, sCalendarType) {
99
152
  assert(sStyle == 'short' || sStyle == 'medium' || sStyle == 'long' || sStyle == 'full', 'sStyle must be short, medium, long or full');
100
153
  return this._get(getCLDRCalendarName(sCalendarType), 'timeFormats', sStyle);
@@ -109,6 +162,24 @@ var LocaleData = BaseObject.extend('sap.ui.core.LocaleData', {
109
162
  var sDateTimePattern = this.getDateTimePattern(sDateStyle, sCalendarType), sDatePattern = this.getDatePattern(sDateStyle, sCalendarType), sTimePattern = this.getTimePattern(sTimeStyle, sCalendarType);
110
163
  return sDateTimePattern.replace('{0}', sTimePattern).replace('{1}', sDatePattern);
111
164
  },
165
+ getCombinedDateTimeWithTimezonePattern: function (sDateStyle, sTimeStyle, sCalendarType) {
166
+ return this.applyTimezonePattern(this.getCombinedDateTimePattern(sDateStyle, sTimeStyle, sCalendarType));
167
+ },
168
+ applyTimezonePattern: function (sPattern) {
169
+ var aPatterns = [sPattern];
170
+ var aMissingTokens = [{
171
+ group: 'Timezone',
172
+ length: 2,
173
+ field: 'zone',
174
+ symbol: 'V'
175
+ }];
176
+ this._appendItems(aPatterns, aMissingTokens);
177
+ return aPatterns[0];
178
+ },
179
+ getTimezoneTranslations: function () {
180
+ this.mTimezoneTranslations = this.mTimezoneTranslations || _resolveTimezoneTranslationStructure(this._get('timezoneNames'));
181
+ return Object.assign({}, this.mTimezoneTranslations);
182
+ },
112
183
  getCustomDateTimePattern: function (sSkeleton, sCalendarType) {
113
184
  var oAvailableFormats = this._get(getCLDRCalendarName(sCalendarType), 'dateTimeFormats', 'availableFormats');
114
185
  return this._getFormatPattern(sSkeleton, oAvailableFormats, sCalendarType);
@@ -727,7 +798,7 @@ var LocaleData = BaseObject.extend('sap.ui.core.LocaleData', {
727
798
  return oMessageBundle.getText(sKey, iWeekNumber);
728
799
  },
729
800
  firstDayStartsFirstWeek: function () {
730
- return this._get('weekData-algorithm') === 'FIRSTDAY_STARTS_FIRSTWEEK';
801
+ return this.oLocale.getLanguage() === 'en' && this.oLocale.getRegion() === 'US';
731
802
  },
732
803
  getPreferredCalendarType: function () {
733
804
  var sCalendarPreference = this._get('calendarPreference'), aCalendars = sCalendarPreference ? sCalendarPreference.split(' ') : [], sCalendarName, sType, i;
@@ -1155,9 +1226,29 @@ var M_SUPPORTED_LOCALES = function () {
1155
1226
  return result;
1156
1227
  }();
1157
1228
  var mLocaleDatas = {};
1229
+ function _resolveTimezoneTranslationStructure(oNode, sKey, oResult, aParentTranslations) {
1230
+ aParentTranslations = aParentTranslations ? aParentTranslations.slice() : [];
1231
+ oResult = oResult || {};
1232
+ sKey = sKey || '';
1233
+ Object.keys(oNode).forEach(function (sChildKey) {
1234
+ var vChildNode = oNode[sChildKey];
1235
+ if (typeof vChildNode === 'object') {
1236
+ var aParentTranslationForChild = aParentTranslations.slice();
1237
+ var sParent = vChildNode['_parent'];
1238
+ if (sParent) {
1239
+ aParentTranslationForChild.push(sParent);
1240
+ }
1241
+ _resolveTimezoneTranslationStructure(vChildNode, sKey + sChildKey + '/', oResult, aParentTranslationForChild);
1242
+ } else if (typeof vChildNode === 'string' && sChildKey !== '_parent') {
1243
+ var sParents = aParentTranslations.length ? aParentTranslations.join(', ') + ', ' : '';
1244
+ oResult[sKey + sChildKey] = sParents + vChildNode;
1245
+ }
1246
+ });
1247
+ return oResult;
1248
+ }
1158
1249
  function getCLDRCalendarName(sCalendarType) {
1159
1250
  if (!sCalendarType) {
1160
- sCalendarType = Core.getConfiguration().getCalendarType();
1251
+ sCalendarType = Configuration.getCalendarType();
1161
1252
  }
1162
1253
  return 'ca-' + sCalendarType.toLowerCase();
1163
1254
  }
@@ -1210,19 +1301,29 @@ function getData(oLocale) {
1210
1301
  sLanguage = 'sr_Latn';
1211
1302
  }
1212
1303
  var sId = sLanguage + '_' + sRegion;
1304
+ var sCLDRLocaleId = sId;
1213
1305
  if (sLanguage && sRegion) {
1214
1306
  mData = getOrLoad(sId);
1215
1307
  }
1216
1308
  if (!mData && sLanguage) {
1217
1309
  mData = getOrLoad(sLanguage);
1310
+ sCLDRLocaleId = sLanguage;
1311
+ }
1312
+ if (!mData) {
1313
+ mData = getOrLoad('en');
1314
+ sCLDRLocaleId = 'en';
1218
1315
  }
1219
- mLocaleDatas[sId] = mData || getOrLoad('en');
1220
- return mLocaleDatas[sId];
1316
+ mLocaleDatas[sId] = mData;
1317
+ sCLDRLocaleId = sCLDRLocaleId.replace(/_/g, '-');
1318
+ return {
1319
+ mData: mData,
1320
+ sCLDRLocaleId: sCLDRLocaleId
1321
+ };
1221
1322
  }
1222
1323
  var CustomLocaleData = LocaleData.extend('sap.ui.core.CustomLocaleData', {
1223
1324
  constructor: function (oLocale) {
1224
1325
  LocaleData.apply(this, arguments);
1225
- this.mCustomData = Core.getConfiguration().getFormatSettings().getCustomLocaleData();
1326
+ this.mCustomData = Configuration.getFormatSettings().getCustomLocaleData();
1226
1327
  },
1227
1328
  _get: function () {
1228
1329
  var aArguments = Array.prototype.slice.call(arguments), sCalendar, sKey;
@@ -117,11 +117,5 @@ Buddhist.prototype.setUTCFullYear = function (iYear, iMonth, iDay) {
117
117
  }
118
118
  return this._setUTCBuddhist(oBuddhist);
119
119
  };
120
- Buddhist.prototype.getWeek = function () {
121
- return UniversalDate.getWeekByDate(this.sCalendarType, this.oDate.getFullYear(), this.getMonth(), this.getDate());
122
- };
123
- Buddhist.prototype.getUTCWeek = function () {
124
- return UniversalDate.getWeekByDate(this.sCalendarType, this.oDate.getUTCFullYear(), this.getUTCMonth(), this.getUTCDate());
125
- };
126
120
  _Calendars.set(CalendarType.Buddhist, Buddhist);
127
121
  export default Buddhist;
@@ -0,0 +1,36 @@
1
+ import CalendarWeekNumbering from './CalendarWeekNumbering.js';
2
+ import Configuration from '../Configuration.js';
3
+ import LocaleData from '../LocaleData.js';
4
+ var mWeekNumberingConfiguration = {
5
+ ISO_8601: {
6
+ firstDayOfWeek: 1,
7
+ minimalDaysInFirstWeek: 4
8
+ },
9
+ MiddleEastern: {
10
+ firstDayOfWeek: 6,
11
+ minimalDaysInFirstWeek: 1
12
+ },
13
+ WesternTraditional: {
14
+ firstDayOfWeek: 0,
15
+ minimalDaysInFirstWeek: 1
16
+ }
17
+ };
18
+ var CalendarUtils = {
19
+ getWeekConfigurationValues: function (sCalendarWeekNumbering, oLocale) {
20
+ var oLocaleData;
21
+ if (mWeekNumberingConfiguration.hasOwnProperty(sCalendarWeekNumbering)) {
22
+ return mWeekNumberingConfiguration[sCalendarWeekNumbering];
23
+ }
24
+ sCalendarWeekNumbering = sCalendarWeekNumbering || CalendarWeekNumbering.Default;
25
+ if (sCalendarWeekNumbering === CalendarWeekNumbering.Default) {
26
+ oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
27
+ oLocaleData = LocaleData.getInstance(oLocale);
28
+ return {
29
+ firstDayOfWeek: oLocaleData.getFirstDayOfWeek(),
30
+ minimalDaysInFirstWeek: oLocaleData.getMinimalDaysInFirstWeek()
31
+ };
32
+ }
33
+ return undefined;
34
+ }
35
+ };
36
+ export default CalendarUtils;
@@ -0,0 +1,7 @@
1
+ var CalendarWeekNumbering = {
2
+ Default: "Default",
3
+ ISO_8601: "ISO_8601",
4
+ MiddleEastern: "MiddleEastern",
5
+ WesternTraditional: "WesternTraditional"
6
+ };
7
+ export default CalendarWeekNumbering;
@@ -1,8 +1,8 @@
1
- import Core from '../Core.js';
2
1
  import UniversalDate from './UniversalDate.js';
3
2
  import CalendarType from '../CalendarType.js';
4
3
  import Log from '../../../base/Log.js';
5
4
  import _Calendars from './_Calendars.js';
5
+ import Configuration from '../Configuration.js';
6
6
  var Islamic = UniversalDate.extend('sap.ui.core.date.Islamic', {
7
7
  constructor: function () {
8
8
  var aArgs = arguments;
@@ -102,9 +102,9 @@ function toGregorianArguments(aArgs) {
102
102
  function initCustomizationMap() {
103
103
  var sDateFormat, oCustomizationJSON;
104
104
  oCustomizationMap = {};
105
- sDateFormat = Core.getConfiguration().getFormatSettings().getLegacyDateFormat();
105
+ sDateFormat = Configuration.getFormatSettings().getLegacyDateFormat();
106
106
  sDateFormat = _isSupportedIslamicCalendarType(sDateFormat) ? sDateFormat : 'A';
107
- oCustomizationJSON = Core.getConfiguration().getFormatSettings().getLegacyDateCalendarCustomizing();
107
+ oCustomizationJSON = Configuration.getFormatSettings().getLegacyDateCalendarCustomizing();
108
108
  oCustomizationJSON = oCustomizationJSON || [];
109
109
  if (!oCustomizationJSON.length) {
110
110
  Log.warning('No calendar customizations.');
@@ -152,11 +152,11 @@ Japanese.prototype.setUTCEra = function (iEra, iYear, iMonth, iDay) {
152
152
  }
153
153
  return this._setUTCJapanese(oJapanese);
154
154
  };
155
- Japanese.prototype.getWeek = function () {
156
- return UniversalDate.getWeekByDate(this.sCalendarType, this.oDate.getFullYear(), this.getMonth(), this.getDate());
155
+ Japanese.prototype.getWeek = function (oLocale, vCalendarWeekNumbering) {
156
+ return UniversalDate.getWeekByDate(this.sCalendarType, this.oDate.getFullYear(), this.getMonth(), this.getDate(), oLocale, vCalendarWeekNumbering);
157
157
  };
158
- Japanese.prototype.getUTCWeek = function () {
159
- return UniversalDate.getWeekByDate(this.sCalendarType, this.oDate.getUTCFullYear(), this.getUTCMonth(), this.getUTCDate());
158
+ Japanese.prototype.getUTCWeek = function (oLocale, vCalendarWeekNumbering) {
159
+ return UniversalDate.getWeekByDate(this.sCalendarType, this.oDate.getUTCFullYear(), this.getUTCMonth(), this.getUTCDate(), oLocale, vCalendarWeekNumbering);
160
160
  };
161
161
  _Calendars.set(CalendarType.Japanese, Japanese);
162
162
  export default Japanese;
@@ -1,7 +1,10 @@
1
- import Core from '../Core.js';
2
1
  import BaseObject from '../../base/Object.js';
2
+ import Configuration from '../Configuration.js';
3
+ import Locale from '../Locale.js';
3
4
  import LocaleData from '../LocaleData.js';
4
5
  import _Calendars from './_Calendars.js';
6
+ import CalendarUtils from './CalendarUtils.js';
7
+ import CalendarWeekNumbering from './CalendarWeekNumbering.js';
5
8
  var UniversalDate = BaseObject.extend('sap.ui.core.date.UniversalDate', {
6
9
  constructor: function () {
7
10
  var clDate = UniversalDate.getClass();
@@ -42,8 +45,11 @@ UniversalDate.getInstance = function (oDate, sCalendarType) {
42
45
  } else if (!oDate) {
43
46
  oDate = new Date();
44
47
  }
48
+ if (isNaN(oDate.getTime())) {
49
+ throw new Error('The given date object is invalid');
50
+ }
45
51
  if (!sCalendarType) {
46
- sCalendarType = Core.getConfiguration().getCalendarType();
52
+ sCalendarType = Configuration.getCalendarType();
47
53
  }
48
54
  clDate = UniversalDate.getClass(sCalendarType);
49
55
  oInstance = Object.create(clDate.prototype);
@@ -53,7 +59,7 @@ UniversalDate.getInstance = function (oDate, sCalendarType) {
53
59
  };
54
60
  UniversalDate.getClass = function (sCalendarType) {
55
61
  if (!sCalendarType) {
56
- sCalendarType = Core.getConfiguration().getCalendarType();
62
+ sCalendarType = Configuration.getCalendarType();
57
63
  }
58
64
  return _Calendars.get(sCalendarType);
59
65
  };
@@ -116,18 +122,22 @@ UniversalDate.prototype.getUTCEra = function () {
116
122
  };
117
123
  UniversalDate.prototype.setUTCEra = function (iEra) {
118
124
  };
119
- UniversalDate.prototype.getWeek = function () {
120
- return UniversalDate.getWeekByDate(this.sCalendarType, this.getFullYear(), this.getMonth(), this.getDate());
125
+ UniversalDate.prototype.getWeek = function (oLocale, vCalendarWeekNumbering) {
126
+ checkWeekConfig(vCalendarWeekNumbering);
127
+ return UniversalDate.getWeekByDate(this.sCalendarType, this.getFullYear(), this.getMonth(), this.getDate(), oLocale, vCalendarWeekNumbering);
121
128
  };
122
- UniversalDate.prototype.setWeek = function (oWeek) {
123
- var oDate = UniversalDate.getFirstDateOfWeek(this.sCalendarType, oWeek.year || this.getFullYear(), oWeek.week);
129
+ UniversalDate.prototype.setWeek = function (oWeek, oLocale, vCalendarWeekNumbering) {
130
+ checkWeekConfig(vCalendarWeekNumbering);
131
+ var oDate = UniversalDate.getFirstDateOfWeek(this.sCalendarType, oWeek.year || this.getFullYear(), oWeek.week, oLocale, vCalendarWeekNumbering);
124
132
  this.setFullYear(oDate.year, oDate.month, oDate.day);
125
133
  };
126
- UniversalDate.prototype.getUTCWeek = function () {
127
- return UniversalDate.getWeekByDate(this.sCalendarType, this.getUTCFullYear(), this.getUTCMonth(), this.getUTCDate());
134
+ UniversalDate.prototype.getUTCWeek = function (oLocale, vCalendarWeekNumbering) {
135
+ checkWeekConfig(vCalendarWeekNumbering);
136
+ return UniversalDate.getWeekByDate(this.sCalendarType, this.getUTCFullYear(), this.getUTCMonth(), this.getUTCDate(), oLocale, vCalendarWeekNumbering);
128
137
  };
129
- UniversalDate.prototype.setUTCWeek = function (oWeek) {
130
- var oDate = UniversalDate.getFirstDateOfWeek(this.sCalendarType, oWeek.year || this.getFullYear(), oWeek.week);
138
+ UniversalDate.prototype.setUTCWeek = function (oWeek, oLocale, vCalendarWeekNumbering) {
139
+ checkWeekConfig(vCalendarWeekNumbering);
140
+ var oDate = UniversalDate.getFirstDateOfWeek(this.sCalendarType, oWeek.year || this.getFullYear(), oWeek.week, oLocale, vCalendarWeekNumbering);
131
141
  this.setUTCFullYear(oDate.year, oDate.month, oDate.day);
132
142
  };
133
143
  UniversalDate.prototype.getQuarter = function () {
@@ -161,15 +171,21 @@ UniversalDate.prototype.getTimezoneLong = function () {
161
171
  }
162
172
  };
163
173
  var iMillisecondsInWeek = 7 * 24 * 60 * 60 * 1000;
164
- UniversalDate.getWeekByDate = function (sCalendarType, iYear, iMonth, iDay) {
165
- var oLocale = Core.getConfiguration().getFormatSettings().getFormatLocale(), oLocaleData = LocaleData.getInstance(oLocale), clDate = this.getClass(sCalendarType), oFirstDay = getFirstDayOfFirstWeek(clDate, iYear), oDate = new clDate(clDate.UTC(iYear, iMonth, iDay)), iWeek, iLastYear, iNextYear, oLastFirstDay, oNextFirstDay;
166
- if (oLocaleData.firstDayStartsFirstWeek()) {
174
+ UniversalDate.getWeekByDate = function (sCalendarType, iYear, iMonth, iDay, oLocale, vCalendarWeekNumbering) {
175
+ checkWeekConfig(vCalendarWeekNumbering);
176
+ oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
177
+ var clDate = this.getClass(sCalendarType);
178
+ var oFirstDay = getFirstDayOfFirstWeek(clDate, iYear, oLocale, vCalendarWeekNumbering);
179
+ var oDate = new clDate(clDate.UTC(iYear, iMonth, iDay));
180
+ var iWeek, iLastYear, iNextYear, oLastFirstDay, oNextFirstDay;
181
+ var bSplitWeek = isSplitWeek(vCalendarWeekNumbering, oLocale);
182
+ if (bSplitWeek) {
167
183
  iWeek = calculateWeeks(oFirstDay, oDate);
168
184
  } else {
169
185
  iLastYear = iYear - 1;
170
186
  iNextYear = iYear + 1;
171
- oLastFirstDay = getFirstDayOfFirstWeek(clDate, iLastYear);
172
- oNextFirstDay = getFirstDayOfFirstWeek(clDate, iNextYear);
187
+ oLastFirstDay = getFirstDayOfFirstWeek(clDate, iLastYear, oLocale, vCalendarWeekNumbering);
188
+ oNextFirstDay = getFirstDayOfFirstWeek(clDate, iNextYear, oLocale, vCalendarWeekNumbering);
173
189
  if (oDate >= oNextFirstDay) {
174
190
  iYear = iNextYear;
175
191
  iWeek = 0;
@@ -185,9 +201,14 @@ UniversalDate.getWeekByDate = function (sCalendarType, iYear, iMonth, iDay) {
185
201
  week: iWeek
186
202
  };
187
203
  };
188
- UniversalDate.getFirstDateOfWeek = function (sCalendarType, iYear, iWeek) {
189
- var oLocale = Core.getConfiguration().getFormatSettings().getFormatLocale(), oLocaleData = LocaleData.getInstance(oLocale), clDate = this.getClass(sCalendarType), oFirstDay = getFirstDayOfFirstWeek(clDate, iYear), oDate = new clDate(oFirstDay.valueOf() + iWeek * iMillisecondsInWeek), bIsRegionUS = oLocaleData.firstDayStartsFirstWeek();
190
- if (bIsRegionUS && iWeek === 0 && oFirstDay.getUTCFullYear() < iYear) {
204
+ UniversalDate.getFirstDateOfWeek = function (sCalendarType, iYear, iWeek, oLocale, vCalendarWeekNumbering) {
205
+ checkWeekConfig(vCalendarWeekNumbering);
206
+ oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
207
+ var clDate = this.getClass(sCalendarType);
208
+ var oFirstDay = getFirstDayOfFirstWeek(clDate, iYear, oLocale, vCalendarWeekNumbering);
209
+ var oDate = new clDate(oFirstDay.valueOf() + iWeek * iMillisecondsInWeek);
210
+ var bSplitWeek = isSplitWeek(vCalendarWeekNumbering, oLocale);
211
+ if (bSplitWeek && iWeek === 0 && oFirstDay.getUTCFullYear() < iYear) {
191
212
  return {
192
213
  year: iYear,
193
214
  month: 0,
@@ -200,8 +221,44 @@ UniversalDate.getFirstDateOfWeek = function (sCalendarType, iYear, iWeek) {
200
221
  day: oDate.getUTCDate()
201
222
  };
202
223
  };
203
- function getFirstDayOfFirstWeek(clDate, iYear) {
204
- var oLocale = Core.getConfiguration().getFormatSettings().getFormatLocale(), oLocaleData = LocaleData.getInstance(oLocale), iMinDays = oLocaleData.getMinimalDaysInFirstWeek(), iFirstDayOfWeek = oLocaleData.getFirstDayOfWeek(), oFirstDay = new clDate(clDate.UTC(iYear, 0, 1)), iDayCount = 7;
224
+ function isSplitWeek(vCalendarWeekNumbering, oLocale) {
225
+ oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
226
+ var oLocaleData = LocaleData.getInstance(oLocale);
227
+ return (!isCalendarWeekConfigurationDefined(vCalendarWeekNumbering) || vCalendarWeekNumbering === CalendarWeekNumbering.Default) && oLocaleData.firstDayStartsFirstWeek();
228
+ }
229
+ function checkWeekConfig(vCalendarWeekNumbering) {
230
+ if (typeof vCalendarWeekNumbering === 'object') {
231
+ if (!isCalendarWeekConfigurationDefined(vCalendarWeekNumbering)) {
232
+ throw new TypeError('Week config requires firstDayOfWeek and minimalDaysInFirstWeek to be set');
233
+ }
234
+ } else if (vCalendarWeekNumbering && !Object.values(CalendarWeekNumbering).includes(vCalendarWeekNumbering)) {
235
+ throw new TypeError('Illegal format option calendarWeekNumbering: \'' + vCalendarWeekNumbering + '\'');
236
+ }
237
+ }
238
+ function isCalendarWeekConfigurationDefined(vCalendarWeekNumbering) {
239
+ if (typeof vCalendarWeekNumbering === 'object') {
240
+ return typeof vCalendarWeekNumbering.firstDayOfWeek === 'number' && typeof vCalendarWeekNumbering.minimalDaysInFirstWeek === 'number';
241
+ } else if (vCalendarWeekNumbering) {
242
+ return true;
243
+ }
244
+ return false;
245
+ }
246
+ function resolveCalendarWeekConfiguration(vCalendarWeekNumbering, oLocale) {
247
+ if (typeof vCalendarWeekNumbering === 'object' && typeof vCalendarWeekNumbering.firstDayOfWeek === 'number' && typeof vCalendarWeekNumbering.minimalDaysInFirstWeek === 'number') {
248
+ return vCalendarWeekNumbering;
249
+ }
250
+ return CalendarUtils.getWeekConfigurationValues(vCalendarWeekNumbering, oLocale);
251
+ }
252
+ function getFirstDayOfFirstWeek(clDate, iYear, oLocale, vCalendarWeekNumbering) {
253
+ oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
254
+ var oWeekConfig = resolveCalendarWeekConfiguration(vCalendarWeekNumbering, oLocale);
255
+ var iMinDays = oWeekConfig.minimalDaysInFirstWeek;
256
+ var iFirstDayOfWeek = oWeekConfig.firstDayOfWeek;
257
+ var oFirstDay = new clDate(clDate.UTC(iYear, 0, 1));
258
+ var iDayCount = 7;
259
+ if (isNaN(oFirstDay.getTime())) {
260
+ throw new Error('Could not determine the first day of the week, because the date ' + 'object is invalid');
261
+ }
205
262
  while (oFirstDay.getUTCDay() !== iFirstDayOfWeek) {
206
263
  oFirstDay.setUTCDate(oFirstDay.getUTCDate() - 1);
207
264
  iDayCount--;
@@ -241,7 +298,7 @@ UniversalDate.getEraStartDate = function (sCalendarType, iEra) {
241
298
  }
242
299
  };
243
300
  function getEras(sCalendarType) {
244
- var oLocale = Core.getConfiguration().getFormatSettings().getFormatLocale(), oLocaleData = LocaleData.getInstance(oLocale), aEras = mEras[sCalendarType];
301
+ var oLocale = Configuration.getFormatSettings().getFormatLocale(), oLocaleData = LocaleData.getInstance(oLocale), aEras = mEras[sCalendarType];
245
302
  if (!aEras) {
246
303
  var aEras = oLocaleData.getEraDates(sCalendarType);
247
304
  if (!aEras[0]) {