Skip to content

Commit fac5e1e

Browse files
feat: expose weekend range info
1 parent a369d3d commit fac5e1e

File tree

7 files changed

+66
-7
lines changed

7 files changed

+66
-7
lines changed

gulpfile.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const currencyData = require("cldr-data/supplemental/currencyData.json");
99
const weekData = require("cldr-data/supplemental/weekData.json");
1010
const fs = require('fs');
1111
const { toJSObject, buildLocales } = require("./build-locales.js");
12+
const DEFAULT_TERRITORY = '001';
1213

1314
require('@progress/kendo-package-tasks')(gulp, 'kendo-intl');
1415

@@ -48,6 +49,12 @@ gulp.task("build-default-data", ["build-npm-package"], () => {
4849
weekData: {
4950
firstDay: {
5051
US: cldr.cldr.supplemental.weekData.firstDay.US
52+
},
53+
weekendStart: {
54+
[DEFAULT_TERRITORY]: cldr.cldr.supplemental.weekData.weekendStart[DEFAULT_TERRITORY]
55+
},
56+
weekendEnd: {
57+
[DEFAULT_TERRITORY]: cldr.cldr.supplemental.weekData.weekendEnd[DEFAULT_TERRITORY]
5158
}
5259
}
5360
}

src/cldr.d.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,22 @@ export function dateFieldName(options: DateFieldNameOptions, locale?: string): s
103103
*/
104104
export function firstDay(locale: string): number;
105105

106+
/**
107+
* The weekend start and end days
108+
*/
109+
export interface WeekendRange {
110+
start: number;
111+
end: number;
112+
}
113+
114+
/**
115+
* Returns and object.
116+
*
117+
* @param locale - The locale `id`.
118+
* @returns - The weekend range.
119+
*/
120+
export function weekendRange(locale: string): WeekendRange;
121+
106122
/**
107123
* Loads CLDR data.
108124
*

src/cldr.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ export { default as dateFormatNames } from './cldr/date-format-names';
55
export { cldr, localeInfo } from './cldr/info';
66
export { currencyDisplays, currencyDisplay, currencyFractionOptions, territoryCurrencyCode, localeCurrency } from './cldr/currency';
77
export { default as firstDay } from './cldr/first-day';
8+
export { default as weekendRange } from './cldr/weekend-range';
89
export { default as numberSymbols } from './cldr/number-symbols';
910

src/cldr/constants.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
export const DAYS_OF_WEEK = [ "sun", "mon", "tue", "wed", "thu", "fri", "sat" ];
3+
4+
export const DEFAULT_TERRITORY = '001';

src/cldr/first-day.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
import { cldr, getLocaleInfo } from './info';
22
import localeTerritory from './territory';
33

4+
import { DAYS_OF_WEEK, DEFAULT_TERRITORY } from './constants';
45
import { errors } from '../errors';
56

67
const { NoWeekData, NoFirstDay } = errors;
78

8-
const DAYS = [ "sun", "mon", "tue", "wed", "thu", "fri", "sat" ];
9-
const DEFAULT = '001';
10-
119
export default function firstDay(locale) {
1210
const info = getLocaleInfo(locale);
1311

@@ -20,13 +18,13 @@ export default function firstDay(locale) {
2018
throw NoWeekData.error();
2119
}
2220

23-
const firstDay = weekData.firstDay[localeTerritory(info)] || weekData.firstDay[DEFAULT];
21+
const firstDay = weekData.firstDay[localeTerritory(info)] || weekData.firstDay[DEFAULT_TERRITORY];
2422

2523
if (!firstDay) {
2624
throw NoFirstDay.error();
2725
}
2826

29-
info.firstDay = DAYS.indexOf(firstDay);
27+
info.firstDay = DAYS_OF_WEEK.indexOf(firstDay);
3028

3129
return info.firstDay;
3230
}

src/cldr/load.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,13 @@ export default function load() {
3030
} else if (entry.supplemental) {
3131
if (entry.supplemental.weekData) {
3232
cldr.supplemental.weekData = {
33-
firstDay: entry.supplemental.weekData.firstDay
33+
firstDay: entry.supplemental.weekData.firstDay,
34+
weekendStart: entry.supplemental.weekData.weekendStart,
35+
weekendEnd: entry.supplemental.weekData.weekendEnd
3436
};
3537
} else {
3638
Object.assign(cldr.supplemental, entry.supplemental);
3739
}
3840
}
3941
}
40-
}
42+
}

src/cldr/weekend-range.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { cldr, getLocaleInfo } from './info';
2+
import localeTerritory from './territory';
3+
4+
import { DAYS_OF_WEEK, DEFAULT_TERRITORY } from './constants';
5+
import { errors } from '../errors';
6+
7+
const { NoWeekData } = errors;
8+
9+
export default function weekendRange(locale) {
10+
const info = getLocaleInfo(locale);
11+
12+
if (info.weekendRange) {
13+
return info.weekendRange;
14+
}
15+
16+
const weekData = cldr.supplemental.weekData;
17+
if (!weekData) {
18+
throw NoWeekData.error();
19+
}
20+
21+
const territory = localeTerritory(info);
22+
const start = weekData.weekendStart[territory] || weekData.weekendStart[DEFAULT_TERRITORY];
23+
const end = weekData.weekendEnd[territory] || weekData.weekendEnd[DEFAULT_TERRITORY];
24+
25+
info.weekendRange = {
26+
start: DAYS_OF_WEEK.indexOf(start),
27+
end: DAYS_OF_WEEK.indexOf(end)
28+
};
29+
30+
return info.weekendRange;
31+
}

0 commit comments

Comments
 (0)