Skip to content

Commit d701d2e

Browse files
committed
refactor: util and locale
1 parent fd8420b commit d701d2e

File tree

2 files changed

+95
-44
lines changed

2 files changed

+95
-44
lines changed

core/src/locale/index.js

Lines changed: 39 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,51 @@
11
import en from './en'
22
import util from '../util'
3-
const {genItems, pad} = util
3+
const {genItems, pad, traverse} = util
44

55
const locales = {
66
en: en
77
}
88

9-
function traverse(obj, ...keys){
10-
if(keys.length == 0)
11-
return obj
12-
13-
for(let key of keys[0]){
14-
if(obj.hasOwnProperty(key)){
15-
let res = traverse(obj[key], ...keys.slice(1))
16-
if(res !== undefined){
17-
return res
18-
}
19-
}
9+
/**
10+
*
11+
* @param {string} locale=en
12+
* @returns {object} object with all strings in the request language
13+
*/
14+
function getLocale(locale){
15+
if(locales.hasOwnProperty(locale)){
16+
return locales[locale]
17+
}
18+
else {
19+
return locales['en']
2020
}
21-
return
2221
}
2322

24-
export default {
25-
getLocale: (locale) => {
26-
if(locales.hasOwnProperty(locale)){
27-
return locales[locale]
28-
}
29-
else {
30-
return locales['en']
31-
}
32-
},
23+
/**
24+
*
25+
* @param {string} locale
26+
* @returns {object} items for minute, hour, day, month and day of week
27+
*/
28+
function defaultItems(locale){
29+
return {
30+
minuteItems: genItems(0, 59, (value) => pad(value, 2)),
31+
hourItems: genItems(0, 59, (value) => pad(value, 2)),
32+
dayItems: genItems(1, 31),
33+
monthItems: genItems(1, 12, (value) => {
34+
return new Date(2021, value-1, 1).toLocaleDateString(locale, {month: 'long'})
35+
}, (value) => {
36+
return new Date(2021, value-1, 1).toLocaleDateString(locale, {month: 'short'})
37+
}),
38+
dayOfWeekItems: genItems(0, 6, (value) => {
39+
let date = new Date(2021, 0, 3+value) //first sunday in 2021
40+
return date.toLocaleDateString(locale, {weekday: 'long'})
41+
}, (value) => {
42+
let date = new Date(2021, 0, 3+value) //first sunday in 2021
43+
return date.toLocaleDateString(locale, {weekday: 'short'})
44+
})
45+
}
46+
}
3347

48+
export default {
3449
getLocaleStr: (locale, periodId, fieldId, localeKey) => {
3550
return traverse(locale, [periodId+'Period', 'eachPeriod'], [fieldId+'Field', 'eachField'], [localeKey]) || ''
3651
},
@@ -43,23 +58,6 @@ export default {
4358
return traverse(locale, [periodId+'Period', 'eachPeriod'], [fieldId+'Field', 'eachField'], ['suffix']) || ''
4459
},
4560

46-
defaultItems: (locale) => {
47-
return {
48-
minuteItems: genItems(0, 59, (value) => pad(value, 2)),
49-
hourItems: genItems(0, 59, (value) => pad(value, 2)),
50-
dayItems: genItems(1, 31),
51-
monthItems: genItems(1, 12, (value) => {
52-
return new Date(2021, value-1, 1).toLocaleDateString(locale, {month: 'long'})
53-
}, (value) => {
54-
return new Date(2021, value-1, 1).toLocaleDateString(locale, {month: 'short'})
55-
}),
56-
dayOfWeekItems: genItems(0, 6, (value) => {
57-
let date = new Date(2021, 0, 3+value) //first sunday in 2021
58-
return date.toLocaleDateString(locale, {weekday: 'long'})
59-
}, (value) => {
60-
let date = new Date(2021, 0, 3+value) //first sunday in 2021
61-
return date.toLocaleDateString(locale, {weekday: 'short'})
62-
})
63-
}
64-
},
61+
defaultItems,
62+
getLocale
6563
}

core/src/util.js

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,22 @@ function format(str, params){
5959
return str
6060
}
6161

62+
/**
63+
* type definition
64+
* @name toText
65+
* @function
66+
* @param {number} value
67+
* @returns {string}
68+
*/
69+
70+
/**
71+
* generate items for fields
72+
* @param {number} min first value
73+
* @param {number} max last value
74+
* @param {toText} genText returns a string representation of value
75+
* @param {toText} genAltText returns an alternative string representation of value
76+
* @returns {Array<{value:number, text:string, alt:string}>} array of items
77+
*/
6278
function genItems(min, max, genText=(value) => {return value+''}, genAltText=(value) => {return value+''}){
6379
let res = []
6480
for(let i of new Range(min, max)){
@@ -71,15 +87,35 @@ function genItems(min, max, genText=(value) => {return value+''}, genAltText=(va
7187
return res
7288
}
7389

90+
/**
91+
* pads numbers
92+
* @param {number} n number to pad
93+
* @param {number} width
94+
* @example
95+
* //returns "001"
96+
* util.pad(1,3)
97+
* @returns {string} the padded number
98+
*/
7499
function pad(n, width){
75100
n = n+''
76101
return (n.length < width) ? new Array(width - n.length).fill('0').join('') + n : n;
77102
}
78103

79-
function isObject(obj){
80-
return (obj && typeof obj == 'object' && !Array.isArray(obj))
104+
/**
105+
* determines whether the passed value is an object
106+
* @param {any} value
107+
* @returns {Boolean} true if value is an object, otherwise false
108+
*/
109+
function isObject(value){
110+
return (value && typeof value == 'object' && !Array.isArray(value))
81111
}
82112

113+
/**
114+
* copies (deep copy) all properties from each source to target
115+
* @param {object} target
116+
* @param {...object} sources
117+
* @returns {object} target
118+
*/
83119
function deepMerge(target, ...sources){
84120
if(!isObject(target) || sources.length == 0) return
85121
let source = sources.shift()
@@ -103,12 +139,29 @@ function deepMerge(target, ...sources){
103139
return target
104140
}
105141

142+
143+
function traverse(obj, ...keys){
144+
if(keys.length == 0)
145+
return obj
146+
147+
for(let key of keys[0]){
148+
if(obj.hasOwnProperty(key)){
149+
let res = traverse(obj[key], ...keys.slice(1))
150+
if(res !== undefined){
151+
return res
152+
}
153+
}
154+
}
155+
return
156+
}
157+
106158
export default {
107159
range,
108160
Range,
109161
format,
110162
genItems,
111163
pad,
112164
deepMerge,
113-
isObject
165+
isObject,
166+
traverse
114167
}

0 commit comments

Comments
 (0)