Skip to content

Commit 090fff3

Browse files
committed
add locale, update test cases, add serve, ...
1 parent f5d4846 commit 090fff3

File tree

14 files changed

+153
-77
lines changed

14 files changed

+153
-77
lines changed

build/rollup.config.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ export default {
1313
css: true, // Dynamically inject css as a <style> tag
1414
compileTemplate: true, // Explicitly convert template to render function
1515
}),
16-
buble({
17-
objectAssign: 'Object.assign',
18-
transforms: {
19-
forOf: false
20-
}
21-
}), // Transpile to ES5
16+
// buble({
17+
// objectAssign: 'Object.assign',
18+
// transforms: {
19+
// forOf: false
20+
// }
21+
// }), // Transpile to ES5
2222
],
2323
};

examples/vue-cron.vue

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
</span>
1313

1414

15-
<template v-for="f in p.fields">
15+
<template v-for="f in orderByRank(p.fields)">
1616
<span :key="f.name" v-if="p.rankAttrs.value >= f.rank">
1717
{{f.name}}:
1818
<select @input="f.events.input(getSelected($event.target))" multiple>
@@ -68,6 +68,10 @@ export default {
6868
getSelected(select){
6969
let options = select && select.options;
7070
return Array.from(options).filter((opt) => opt.selected).map((opt) => opt.value)
71+
},
72+
73+
orderByRank(fields){
74+
return fields.slice().sort((a, b) => b.rank - a.rank)
7175
}
7276
}
7377
}

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
},
1111
"scripts": {
1212
"test": "jest",
13+
"serve": "vue serve examples/vue-cron.vue",
1314
"build": "yarn build:umd & yarn run build:es & yarn run build:unpkg",
1415
"build:umd": "yarn rollup --config build/rollup.config.js --format umd --file dist/core.umd.js",
1516
"build:es": "yarn rollup --config build/rollup.config.js --format es --file dist/core.esm.js",

src/core.vue

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
<script>
22
import multiple from './fields/multiple'
33
import util from './util'
4-
import en from './locale/en'
4+
import locale from './locale'
55
6+
const {getLocale} = locale
67
const {Field} = util
78
89
export default {
@@ -12,15 +13,22 @@ export default {
1213
type: String,
1314
required: true
1415
},
16+
locale: {
17+
type: String,
18+
default: 'en'
19+
},
1520
fields: {
1621
type: Array,
17-
default: () => {
22+
default: function() {
23+
24+
let locale = getLocale(this.locale)
25+
1826
return [
19-
{name: 'minute', items: en.minuteItems, rank: 0},
20-
{name: 'hour', items: en.hourItems, rank: 1},
21-
{name: 'day', items: en.dayItems, rank: 2},
22-
{name: 'month', items: en.monthItems, rank: 4},
23-
{name: 'dayOfWeek', items: en.dayOfWeekItems, rank: 3},
27+
{name: 'minute', items: locale.minuteItems, rank: 0},
28+
{name: 'hour', items: locale.hourItems, rank: 1},
29+
{name: 'day', items: locale.dayItems, rank: 2},
30+
{name: 'month', items: locale.monthItems, rank: 4},
31+
{name: 'dayOfWeek', items: locale.dayOfWeekItems, rank: 3},
2432
]
2533
}
2634
},
@@ -48,7 +56,7 @@ export default {
4856
return {
4957
selected: selected,
5058
error: '',
51-
selectedRank: this.ranks[this.ranks.length-1].value
59+
selectedRank: this.ranks[this.ranks.length-1].value
5260
}
5361
},
5462
@@ -111,7 +119,7 @@ export default {
111119
fieldProps.push({
112120
...field,
113121
cron: this.splitValue[i],
114-
selectedStr: multiple.arrayToStr(values, field),
122+
selectedStr: multiple.arrayToStr(values, field).text,
115123
events,
116124
attrs
117125
})
@@ -180,7 +188,7 @@ export default {
180188
this.error = 'invalid selection'
181189
return
182190
}
183-
strings.push(str)
191+
strings.push(str.value)
184192
}
185193
this.error = ''
186194
this.$emit('input', strings.join(' '))

src/fields/any.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11

22
// *
3+
import util from '../util'
4+
const { AnyColumn } = util
35

46
function strToArray(str){
57
if(str != '*'){
@@ -8,9 +10,11 @@ function strToArray(str){
810
return []
911
}
1012

11-
function arrayToStr(arr, {items}){
13+
function arrayToStr(arr, field){
14+
let {items} = field
15+
1216
if(arr.length == 0){
13-
return '*'
17+
return new AnyColumn(field)
1418
}
1519
if(arr.length != items.length){
1620
return null
@@ -21,7 +25,7 @@ function arrayToStr(arr, {items}){
2125
return null
2226
}
2327
}
24-
return '*'
28+
return new AnyColumn(field)
2529
}
2630

2731
export default {

src/fields/every.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
// */x
2+
import util from '../util'
3+
const { EveryColumn } = util
24

35
let re = /^\*\/\d+$/
46

@@ -20,7 +22,9 @@ function strToArray(str, {min, max}){
2022
return res.length > 0 ? res : null
2123
}
2224

23-
function arrayToStr(arr, {min, max}){
25+
function arrayToStr(arr, field){
26+
let {min, max} = field
27+
2428
if(arr.length < 3){
2529
return null
2630
}
@@ -41,7 +45,7 @@ function arrayToStr(arr, {min, max}){
4145
}
4246
}
4347

44-
return '*/'+step
48+
return new EveryColumn(field, step)
4549
}
4650

4751
export default {

src/fields/multiple.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ function strToArray(str, field){
3232

3333
function arrayToStr(arr, field){
3434
for(let fieldType of fieldTypes){
35-
let strValue = fieldType.arrayToStr(arr, field)
36-
if(strValue){
37-
return strValue
35+
let value = fieldType.arrayToStr(arr, field)
36+
if(value){
37+
return value
3838
}
3939
}
4040
return null

src/fields/range.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import util from '../util'
2-
2+
let { RangeColumn, CombinedColumn, ValueColumn } = util
33
// x-y
44

55
let re = /^\d+-\d+$/
@@ -20,7 +20,8 @@ function strToArray(str, {min, max}){
2020
return util.range(start, end)
2121
}
2222

23-
function arrayToStr(arr, {min, max}){
23+
function arrayToStr(arr, field){
24+
let {min, max} = field
2425

2526
if(arr.length <= 1){
2627
return null
@@ -41,16 +42,16 @@ function arrayToStr(arr, {min, max}){
4142
for(let i = 0; i < arr.length; i++){
4243
if(arr[i+1] === undefined || arr[i+1] - arr[i] > 1){
4344
if(i == start){
44-
ranges.push(arr[start])
45+
ranges.push(new ValueColumn(field, arr[start]))
4546
}
4647
else{
47-
ranges.push(arr[start]+'-'+arr[i])
48+
ranges.push(new RangeColumn(field, arr[start], arr[i]))
4849
}
4950
start = i+1
5051
}
5152
}
5253

53-
return ranges.join(',')
54+
return new CombinedColumn(field, ranges)
5455
}
5556

5657
export default {

src/fields/value.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,24 @@
11
// x
2+
import util from '../util'
3+
const { ValueColumn, CombinedColumn } = util
24

35
function strToArray(str, {min, max}){
46
let number = parseInt(str)
57
return (String(number) == str && number >= min && number <= max) ? [number] : null
68
}
79

8-
function arrayToStr(arr, {min, max}){
10+
function arrayToStr(arr, field){
11+
let {min, max} = field
12+
913
if(Math.min(arr) < min){
1014
return null
1115
}
1216
if(Math.max(arr) > max){
1317
return null
1418
}
1519

16-
return arr.join(',')
20+
let values = arr.map((x) => {return new ValueColumn(field, x)})
21+
return new CombinedColumn(field, values)
1722
}
1823

1924
export default {

src/locale/en.js

Lines changed: 12 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,16 @@
11
import util from '../util'
22

3-
function genItems(min, max, textFormat=(value) => {return value+''}){
4-
let res = []
5-
for(let i of new util.Range(min, max)){
6-
let item = {}
7-
item.text = textFormat(i)
8-
item.value = i
9-
res.push(item)
3+
export default () => {
4+
return {
5+
minuteItems: util.genItems(0, 59, (value) => util.pad(value, 2)),
6+
hourItems: util.genItems(0, 59, (value) => util.pad(value, 2)),
7+
dayItems: util.genItems(1, 31),
8+
monthItems: util.genItems(1, 12, (value) => {
9+
return new Date(2021, value-1, 1).toLocaleDateString('en-US', {month: 'long'})
10+
}),
11+
dayOfWeekItems: util.genItems(0, 6, (value) => {
12+
let date = new Date(2021, 0, 3+value) //first sunday in 2021
13+
return date.toLocaleDateString('en-US', {weekday: 'long'})
14+
})
1015
}
11-
return res
12-
}
13-
14-
function pad(n, width){
15-
n = n+''
16-
return (n.length < width) ? new Array(width - n.length).fill('0').join('') + n : n;
17-
}
18-
19-
export default {
20-
minuteItems: genItems(0, 59, (value) => pad(value, 2)),
21-
hourItems: genItems(0, 59, (value) => pad(value, 2)),
22-
dayItems: genItems(1, 31),
23-
monthItems: genItems(1, 12, (value) => {
24-
return new Date(2021, value-1, 1).toLocaleDateString('en-US', {month: 'long'})
25-
}),
26-
dayOfWeekItems: genItems(0, 6, (value) => {
27-
let date = new Date(2021, 0, 3+value) //first sunday in 2021
28-
return date.toLocaleDateString('en-US', {weekday: 'long'})
29-
})
3016
}

0 commit comments

Comments
 (0)