255 lines
4.8 KiB
JavaScript
255 lines
4.8 KiB
JavaScript
import { validateTimestamp, parseDate, DAYS_IN_WEEK, validateTime } from './timestamp';
|
|
import { CalendarEventOverlapModes } from '../modes';
|
|
export default {
|
|
base: {
|
|
start: {
|
|
type: [String, Number, Date],
|
|
validate: validateTimestamp,
|
|
default: () => parseDate(new Date()).date
|
|
},
|
|
end: {
|
|
type: [String, Number, Date],
|
|
validate: validateTimestamp
|
|
},
|
|
weekdays: {
|
|
type: [Array, String],
|
|
default: () => [0, 1, 2, 3, 4, 5, 6],
|
|
validate: validateWeekdays
|
|
},
|
|
hideHeader: {
|
|
type: Boolean
|
|
},
|
|
shortWeekdays: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
weekdayFormat: {
|
|
type: Function,
|
|
default: null
|
|
},
|
|
dayFormat: {
|
|
type: Function,
|
|
default: null
|
|
}
|
|
},
|
|
intervals: {
|
|
maxDays: {
|
|
type: Number,
|
|
default: 7
|
|
},
|
|
shortIntervals: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
intervalHeight: {
|
|
type: [Number, String],
|
|
default: 48,
|
|
validate: validateNumber
|
|
},
|
|
intervalWidth: {
|
|
type: [Number, String],
|
|
default: 60,
|
|
validate: validateNumber
|
|
},
|
|
intervalMinutes: {
|
|
type: [Number, String],
|
|
default: 60,
|
|
validate: validateNumber
|
|
},
|
|
firstInterval: {
|
|
type: [Number, String],
|
|
default: 0,
|
|
validate: validateNumber
|
|
},
|
|
firstTime: {
|
|
type: [Number, String, Object],
|
|
validate: validateTime
|
|
},
|
|
intervalCount: {
|
|
type: [Number, String],
|
|
default: 24,
|
|
validate: validateNumber
|
|
},
|
|
intervalFormat: {
|
|
type: Function,
|
|
default: null
|
|
},
|
|
intervalStyle: {
|
|
type: Function,
|
|
default: null
|
|
},
|
|
showIntervalLabel: {
|
|
type: Function,
|
|
default: null
|
|
}
|
|
},
|
|
weeks: {
|
|
localeFirstDayOfYear: {
|
|
type: [String, Number],
|
|
default: 0
|
|
},
|
|
minWeeks: {
|
|
validate: validateNumber,
|
|
default: 1
|
|
},
|
|
shortMonths: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
showMonthOnFirst: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
showWeek: Boolean,
|
|
monthFormat: {
|
|
type: Function,
|
|
default: null
|
|
}
|
|
},
|
|
calendar: {
|
|
type: {
|
|
type: String,
|
|
default: 'month'
|
|
},
|
|
value: {
|
|
type: [String, Number, Date],
|
|
validate: validateTimestamp
|
|
}
|
|
},
|
|
category: {
|
|
categories: {
|
|
type: [Array, String],
|
|
default: ''
|
|
},
|
|
categoryHideDynamic: {
|
|
type: Boolean
|
|
},
|
|
categoryShowAll: {
|
|
type: Boolean
|
|
},
|
|
categoryForInvalid: {
|
|
type: String,
|
|
default: ''
|
|
},
|
|
categoryDays: {
|
|
type: [Number, String],
|
|
default: 1,
|
|
validate: x => isFinite(parseInt(x)) && parseInt(x) > 0
|
|
}
|
|
},
|
|
events: {
|
|
events: {
|
|
type: Array,
|
|
default: () => []
|
|
},
|
|
eventStart: {
|
|
type: String,
|
|
default: 'start'
|
|
},
|
|
eventEnd: {
|
|
type: String,
|
|
default: 'end'
|
|
},
|
|
eventTimed: {
|
|
type: [String, Function],
|
|
default: 'timed'
|
|
},
|
|
eventCategory: {
|
|
type: [String, Function],
|
|
default: 'category'
|
|
},
|
|
eventHeight: {
|
|
type: Number,
|
|
default: 20
|
|
},
|
|
eventColor: {
|
|
type: [String, Function],
|
|
default: 'primary'
|
|
},
|
|
eventTextColor: {
|
|
type: [String, Function],
|
|
default: 'white'
|
|
},
|
|
eventName: {
|
|
type: [String, Function],
|
|
default: 'name'
|
|
},
|
|
eventOverlapThreshold: {
|
|
type: [String, Number],
|
|
default: 60
|
|
},
|
|
eventOverlapMode: {
|
|
type: [String, Function],
|
|
default: 'stack',
|
|
validate: mode => mode in CalendarEventOverlapModes || typeof mode === 'function'
|
|
},
|
|
eventMore: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
eventMoreText: {
|
|
type: String,
|
|
default: '$vuetify.calendar.moreEvents'
|
|
},
|
|
eventRipple: {
|
|
type: [Boolean, Object],
|
|
default: null
|
|
},
|
|
eventMarginBottom: {
|
|
type: Number,
|
|
default: 1
|
|
}
|
|
}
|
|
};
|
|
export function validateNumber(input) {
|
|
return isFinite(parseInt(input));
|
|
}
|
|
export function validateWeekdays(input) {
|
|
if (typeof input === 'string') {
|
|
input = input.split(',');
|
|
}
|
|
|
|
if (Array.isArray(input)) {
|
|
const ints = input.map(x => parseInt(x));
|
|
|
|
if (ints.length > DAYS_IN_WEEK || ints.length === 0) {
|
|
return false;
|
|
}
|
|
|
|
const visited = {};
|
|
let wrapped = false;
|
|
|
|
for (let i = 0; i < ints.length; i++) {
|
|
const x = ints[i];
|
|
|
|
if (!isFinite(x) || x < 0 || x >= DAYS_IN_WEEK) {
|
|
return false;
|
|
}
|
|
|
|
if (i > 0) {
|
|
const d = x - ints[i - 1];
|
|
|
|
if (d < 0) {
|
|
if (wrapped) {
|
|
return false;
|
|
}
|
|
|
|
wrapped = true;
|
|
} else if (d === 0) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if (visited[x]) {
|
|
return false;
|
|
}
|
|
|
|
visited[x] = true;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
//# sourceMappingURL=props.js.map
|