vuetify eingebunden + erster Versuch Combobox
This commit is contained in:
+183
@@ -0,0 +1,183 @@
|
||||
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
||||
|
||||
// Styles
|
||||
// import '../../stylus/components/_calendar-daily.styl'
|
||||
// Mixins
|
||||
import CalendarBase from './mixins/calendar-base';
|
||||
// Util
|
||||
import props from './util/props';
|
||||
import { DAYS_IN_MONTH_MAX, DAY_MIN, DAYS_IN_WEEK, parseTimestamp, relativeDays, nextDay, prevDay, copyTimestamp, updateFormatted, updateWeekday, updateRelative, getStartOfMonth, getEndOfMonth } from './util/timestamp';
|
||||
// Calendars
|
||||
import VCalendarMonthly from './VCalendarMonthly';
|
||||
import VCalendarDaily from './VCalendarDaily';
|
||||
import VCalendarWeekly from './VCalendarWeekly';
|
||||
/* @vue/component */
|
||||
export default CalendarBase.extend({
|
||||
name: 'v-calendar',
|
||||
props: _extends({}, props.calendar, props.weeks, props.intervals),
|
||||
data: function data() {
|
||||
return {
|
||||
lastStart: null,
|
||||
lastEnd: null
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
parsedValue: function parsedValue() {
|
||||
return parseTimestamp(this.value) || this.parsedStart || this.times.today;
|
||||
},
|
||||
renderProps: function renderProps() {
|
||||
var around = this.parsedValue;
|
||||
var component = 'div';
|
||||
var maxDays = this.maxDays;
|
||||
var start = around;
|
||||
var end = around;
|
||||
switch (this.type) {
|
||||
case 'month':
|
||||
component = VCalendarMonthly;
|
||||
start = getStartOfMonth(around);
|
||||
end = getEndOfMonth(around);
|
||||
break;
|
||||
case 'week':
|
||||
component = VCalendarDaily;
|
||||
start = this.getStartOfWeek(around);
|
||||
end = this.getEndOfWeek(around);
|
||||
maxDays = 7;
|
||||
break;
|
||||
case 'day':
|
||||
component = VCalendarDaily;
|
||||
maxDays = 1;
|
||||
break;
|
||||
case '4day':
|
||||
component = VCalendarDaily;
|
||||
end = relativeDays(copyTimestamp(end), nextDay, 4);
|
||||
updateFormatted(end);
|
||||
maxDays = 4;
|
||||
break;
|
||||
case 'custom-weekly':
|
||||
component = VCalendarWeekly;
|
||||
start = this.parsedStart || around;
|
||||
end = this.parsedEnd;
|
||||
break;
|
||||
case 'custom-daily':
|
||||
component = VCalendarDaily;
|
||||
start = this.parsedStart || around;
|
||||
end = this.parsedEnd;
|
||||
break;
|
||||
}
|
||||
return { component: component, start: start, end: end, maxDays: maxDays };
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
renderProps: 'checkChange'
|
||||
},
|
||||
methods: {
|
||||
checkChange: function checkChange() {
|
||||
var _renderProps = this.renderProps,
|
||||
start = _renderProps.start,
|
||||
end = _renderProps.end;
|
||||
|
||||
if (start !== this.lastStart || end !== this.lastEnd) {
|
||||
this.lastStart = start;
|
||||
this.lastEnd = end;
|
||||
this.$emit('change', { start: start, end: end });
|
||||
}
|
||||
},
|
||||
move: function move() {
|
||||
var amount = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
|
||||
|
||||
var moved = copyTimestamp(this.parsedValue);
|
||||
var forward = amount > 0;
|
||||
var mover = forward ? nextDay : prevDay;
|
||||
var limit = forward ? DAYS_IN_MONTH_MAX : DAY_MIN;
|
||||
var times = forward ? amount : -amount;
|
||||
while (--times >= 0) {
|
||||
switch (this.type) {
|
||||
case 'month':
|
||||
moved.day = limit;
|
||||
mover(moved);
|
||||
break;
|
||||
case 'week':
|
||||
relativeDays(moved, mover, DAYS_IN_WEEK);
|
||||
break;
|
||||
case 'day':
|
||||
mover(moved);
|
||||
break;
|
||||
case '4day':
|
||||
relativeDays(moved, mover, 4);
|
||||
break;
|
||||
}
|
||||
}
|
||||
updateWeekday(moved);
|
||||
updateFormatted(moved);
|
||||
updateRelative(moved, this.times.now);
|
||||
this.$emit('input', moved.date);
|
||||
this.$emit('moved', moved);
|
||||
},
|
||||
next: function next() {
|
||||
var amount = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
|
||||
|
||||
this.move(amount);
|
||||
},
|
||||
prev: function prev() {
|
||||
var amount = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
|
||||
|
||||
this.move(-amount);
|
||||
},
|
||||
timeToY: function timeToY(time) {
|
||||
var clamp = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
||||
|
||||
var c = this.$children[0];
|
||||
if (c && c.timeToY) {
|
||||
return c.timeToY(time, clamp);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
minutesToPixels: function minutesToPixels(minutes) {
|
||||
var c = this.$children[0];
|
||||
if (c && c.minutesToPixels) {
|
||||
return c.minutesToPixels(minutes);
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
},
|
||||
scrollToTime: function scrollToTime(time) {
|
||||
var c = this.$children[0];
|
||||
if (c && c.scrollToTime) {
|
||||
return c.scrollToTime(time);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
},
|
||||
render: function render(h) {
|
||||
var _this = this;
|
||||
|
||||
var _renderProps2 = this.renderProps,
|
||||
start = _renderProps2.start,
|
||||
end = _renderProps2.end,
|
||||
maxDays = _renderProps2.maxDays,
|
||||
component = _renderProps2.component;
|
||||
|
||||
return h(component, {
|
||||
staticClass: 'v-calendar',
|
||||
props: _extends({}, this.$props, {
|
||||
start: start.date,
|
||||
end: end.date,
|
||||
maxDays: maxDays
|
||||
}),
|
||||
on: _extends({}, this.$listeners, {
|
||||
'click:date': function clickDate(day) {
|
||||
if (_this.$listeners['input']) {
|
||||
_this.$emit('input', day.date);
|
||||
}
|
||||
if (_this.$listeners['click:date']) {
|
||||
_this.$emit('click:date', day);
|
||||
}
|
||||
}
|
||||
}),
|
||||
scopedSlots: this.$scopedSlots
|
||||
});
|
||||
}
|
||||
});
|
||||
//# sourceMappingURL=VCalendar.js.map
|
||||
+1
File diff suppressed because one or more lines are too long
+199
@@ -0,0 +1,199 @@
|
||||
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
||||
|
||||
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
||||
|
||||
// Styles
|
||||
import '../../../src/stylus/components/_calendar-daily.styl';
|
||||
// Directives
|
||||
import Resize from '../../directives/resize';
|
||||
// Mixins
|
||||
import CalendarWithIntervals from './mixins/calendar-with-intervals';
|
||||
// Util
|
||||
import { convertToUnit } from '../../util/helpers';
|
||||
/* @vue/component */
|
||||
export default CalendarWithIntervals.extend({
|
||||
name: 'v-calendar-daily',
|
||||
directives: { Resize: Resize },
|
||||
data: function data() {
|
||||
return {
|
||||
scrollPush: 0
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
classes: function classes() {
|
||||
return _extends({
|
||||
'v-calendar-daily': true
|
||||
}, this.themeClasses);
|
||||
}
|
||||
},
|
||||
mounted: function mounted() {
|
||||
this.init();
|
||||
},
|
||||
|
||||
methods: {
|
||||
init: function init() {
|
||||
this.$nextTick(this.onResize);
|
||||
},
|
||||
onResize: function onResize() {
|
||||
this.scrollPush = this.getScrollPush();
|
||||
},
|
||||
getScrollPush: function getScrollPush() {
|
||||
var area = this.$refs.scrollArea;
|
||||
var pane = this.$refs.pane;
|
||||
return area && pane ? area.offsetWidth - pane.offsetWidth : 0;
|
||||
},
|
||||
genHead: function genHead() {
|
||||
return this.$createElement('div', {
|
||||
staticClass: 'v-calendar-daily__head',
|
||||
style: {
|
||||
marginRight: this.scrollPush + 'px'
|
||||
}
|
||||
}, [this.genHeadIntervals()].concat(_toConsumableArray(this.genHeadDays())));
|
||||
},
|
||||
genHeadIntervals: function genHeadIntervals() {
|
||||
return this.$createElement('div', {
|
||||
staticClass: 'v-calendar-daily__intervals-head'
|
||||
});
|
||||
},
|
||||
genHeadDays: function genHeadDays() {
|
||||
return this.days.map(this.genHeadDay);
|
||||
},
|
||||
genHeadDay: function genHeadDay(day) {
|
||||
var _this = this;
|
||||
|
||||
var slot = this.$scopedSlots.dayHeader;
|
||||
return this.$createElement('div', {
|
||||
key: day.date,
|
||||
staticClass: 'v-calendar-daily_head-day',
|
||||
class: this.getRelativeClasses(day),
|
||||
on: this.getDefaultMouseEventHandlers(':day', function (_e) {
|
||||
return _this.getSlotScope(day);
|
||||
})
|
||||
}, [this.genHeadWeekday(day), this.genHeadDayLabel(day), slot ? slot(day) : '']);
|
||||
},
|
||||
genHeadWeekday: function genHeadWeekday(day) {
|
||||
var color = day.present ? this.color : undefined;
|
||||
return this.$createElement('div', this.setTextColor(color, {
|
||||
staticClass: 'v-calendar-daily_head-weekday'
|
||||
}), this.weekdayFormatter(day, this.shortWeekdays));
|
||||
},
|
||||
genHeadDayLabel: function genHeadDayLabel(day) {
|
||||
var color = day.present ? this.color : undefined;
|
||||
return this.$createElement('div', this.setTextColor(color, {
|
||||
staticClass: 'v-calendar-daily_head-day-label',
|
||||
on: this.getMouseEventHandlers({
|
||||
'click:date': { event: 'click', stop: true },
|
||||
'contextmenu:date': { event: 'contextmenu', stop: true, prevent: true, result: false }
|
||||
}, function (_e) {
|
||||
return day;
|
||||
})
|
||||
}), this.dayFormatter(day, false));
|
||||
},
|
||||
genBody: function genBody() {
|
||||
return this.$createElement('div', {
|
||||
staticClass: 'v-calendar-daily__body'
|
||||
}, [this.genScrollArea()]);
|
||||
},
|
||||
genScrollArea: function genScrollArea() {
|
||||
return this.$createElement('div', {
|
||||
ref: 'scrollArea',
|
||||
staticClass: 'v-calendar-daily__scroll-area'
|
||||
}, [this.genPane()]);
|
||||
},
|
||||
genPane: function genPane() {
|
||||
return this.$createElement('div', {
|
||||
ref: 'pane',
|
||||
staticClass: 'v-calendar-daily__pane',
|
||||
style: {
|
||||
height: convertToUnit(this.bodyHeight)
|
||||
}
|
||||
}, [this.genDayContainer()]);
|
||||
},
|
||||
genDayContainer: function genDayContainer() {
|
||||
return this.$createElement('div', {
|
||||
staticClass: 'v-calendar-daily__day-container'
|
||||
}, [this.genBodyIntervals()].concat(_toConsumableArray(this.genDays())));
|
||||
},
|
||||
genDays: function genDays() {
|
||||
return this.days.map(this.genDay);
|
||||
},
|
||||
genDay: function genDay(day, index) {
|
||||
var _this2 = this;
|
||||
|
||||
var slot = this.$scopedSlots.dayBody;
|
||||
var scope = this.getSlotScope(day);
|
||||
return this.$createElement('div', {
|
||||
key: day.date,
|
||||
staticClass: 'v-calendar-daily__day',
|
||||
class: this.getRelativeClasses(day),
|
||||
on: this.getDefaultMouseEventHandlers(':time', function (e) {
|
||||
return _this2.getSlotScope(_this2.getTimestampAtEvent(e, day));
|
||||
})
|
||||
}, [].concat(_toConsumableArray(this.genDayIntervals(index)), [slot ? slot(scope) : '']));
|
||||
},
|
||||
genDayIntervals: function genDayIntervals(index) {
|
||||
return this.intervals[index].map(this.genDayInterval);
|
||||
},
|
||||
genDayInterval: function genDayInterval(interval) {
|
||||
var height = convertToUnit(this.intervalHeight);
|
||||
var styler = this.intervalStyle || this.intervalStyleDefault;
|
||||
var slot = this.$scopedSlots.interval;
|
||||
var scope = this.getSlotScope(interval);
|
||||
var data = {
|
||||
key: interval.time,
|
||||
staticClass: 'v-calendar-daily__day-interval',
|
||||
style: _extends({
|
||||
height: height
|
||||
}, styler(interval))
|
||||
};
|
||||
var children = slot ? slot(scope) : undefined;
|
||||
return this.$createElement('div', data, children);
|
||||
},
|
||||
genBodyIntervals: function genBodyIntervals() {
|
||||
var _this3 = this;
|
||||
|
||||
var data = {
|
||||
staticClass: 'v-calendar-daily__intervals-body',
|
||||
on: this.getDefaultMouseEventHandlers(':interval', function (e) {
|
||||
return _this3.getTimestampAtEvent(e, _this3.parsedStart);
|
||||
})
|
||||
};
|
||||
return this.$createElement('div', data, this.genIntervalLabels());
|
||||
},
|
||||
genIntervalLabels: function genIntervalLabels() {
|
||||
return this.intervals[0].map(this.genIntervalLabel);
|
||||
},
|
||||
genIntervalLabel: function genIntervalLabel(interval) {
|
||||
var height = convertToUnit(this.intervalHeight);
|
||||
var short = this.shortIntervals;
|
||||
var shower = this.showIntervalLabel || this.showIntervalLabelDefault;
|
||||
var show = shower(interval);
|
||||
var label = show ? this.intervalFormatter(interval, short) : undefined;
|
||||
return this.$createElement('div', {
|
||||
key: interval.time,
|
||||
staticClass: 'v-calendar-daily__interval',
|
||||
style: {
|
||||
height: height
|
||||
}
|
||||
}, [this.$createElement('div', {
|
||||
staticClass: 'v-calendar-daily__interval-text'
|
||||
}, label)]);
|
||||
}
|
||||
},
|
||||
render: function render(h) {
|
||||
return h('div', {
|
||||
class: this.classes,
|
||||
nativeOn: {
|
||||
dragstart: function dragstart(e) {
|
||||
e.preventDefault();
|
||||
}
|
||||
},
|
||||
directives: [{
|
||||
modifiers: { quiet: true },
|
||||
name: 'resize',
|
||||
value: this.onResize
|
||||
}]
|
||||
}, [!this.hideHeader ? this.genHead() : '', this.genBody()]);
|
||||
}
|
||||
});
|
||||
//# sourceMappingURL=VCalendarDaily.js.map
|
||||
+1
File diff suppressed because one or more lines are too long
+22
@@ -0,0 +1,22 @@
|
||||
// Styles
|
||||
import '../../../src/stylus/components/_calendar-weekly.styl';
|
||||
// Mixins
|
||||
import VCalendarWeekly from './VCalendarWeekly';
|
||||
// Util
|
||||
import { parseTimestamp, getStartOfMonth, getEndOfMonth } from './util/timestamp';
|
||||
/* @vue/component */
|
||||
export default VCalendarWeekly.extend({
|
||||
name: 'v-calendar-monthly',
|
||||
computed: {
|
||||
staticClass: function staticClass() {
|
||||
return 'v-calendar-monthly v-calendar-weekly';
|
||||
},
|
||||
parsedStart: function parsedStart() {
|
||||
return getStartOfMonth(parseTimestamp(this.start));
|
||||
},
|
||||
parsedEnd: function parsedEnd() {
|
||||
return getEndOfMonth(parseTimestamp(this.end));
|
||||
}
|
||||
}
|
||||
});
|
||||
//# sourceMappingURL=VCalendarMonthly.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/components/VCalendar/VCalendarMonthly.ts"],"names":[],"mappings":";AACA,OAAO,sDAAP;AAEA;AACA,OAAO,eAAP,MAA4B,mBAA5B;AAEA;AACA,SAAqB,cAArB,EAAqC,eAArC,EAAsD,aAAtD,QAA2E,kBAA3E;AAEA;AACA,eAAe,gBAAgB,MAAhB,CAAuB;AACpC,UAAM,oBAD8B;AAGpC,cAAU;AACR,mBADQ,yBACG;AACT,mBAAO,sCAAP;AACD,SAHO;AAIR,mBAJQ,yBAIG;AACT,mBAAO,gBAAgB,eAAe,KAAK,KAApB,CAAhB,CAAP;AACD,SANO;AAOR,iBAPQ,uBAOC;AACP,mBAAO,cAAc,eAAe,KAAK,GAApB,CAAd,CAAP;AACD;AATO;AAH0B,CAAvB,CAAf","sourcesContent":["// Styles\nimport '../../stylus/components/_calendar-weekly.styl'\n\n// Mixins\nimport VCalendarWeekly from './VCalendarWeekly'\n\n// Util\nimport { VTimestamp, parseTimestamp, getStartOfMonth, getEndOfMonth } from './util/timestamp'\n\n/* @vue/component */\nexport default VCalendarWeekly.extend({\n name: 'v-calendar-monthly',\n\n computed: {\n staticClass (): string {\n return 'v-calendar-monthly v-calendar-weekly'\n },\n parsedStart (): VTimestamp {\n return getStartOfMonth(parseTimestamp(this.start) as VTimestamp)\n },\n parsedEnd (): VTimestamp {\n return getEndOfMonth(parseTimestamp(this.end) as VTimestamp)\n }\n }\n\n})\n"],"sourceRoot":""}
|
||||
+133
@@ -0,0 +1,133 @@
|
||||
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
||||
|
||||
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
||||
|
||||
// Styles
|
||||
import '../../../src/stylus/components/_calendar-weekly.styl';
|
||||
// Mixins
|
||||
import CalendarBase from './mixins/calendar-base';
|
||||
// Util
|
||||
import props from './util/props';
|
||||
import { createDayList, getDayIdentifier, createNativeLocaleFormatter } from './util/timestamp';
|
||||
/* @vue/component */
|
||||
export default CalendarBase.extend({
|
||||
name: 'v-calendar-weekly',
|
||||
props: props.weeks,
|
||||
computed: {
|
||||
staticClass: function staticClass() {
|
||||
return 'v-calendar-weekly';
|
||||
},
|
||||
classes: function classes() {
|
||||
return this.themeClasses;
|
||||
},
|
||||
parsedMinWeeks: function parsedMinWeeks() {
|
||||
return parseInt(this.minWeeks);
|
||||
},
|
||||
days: function days() {
|
||||
var minDays = this.parsedMinWeeks * this.weekdays.length;
|
||||
var start = this.getStartOfWeek(this.parsedStart);
|
||||
var end = this.getEndOfWeek(this.parsedEnd);
|
||||
return createDayList(start, end, this.times.today, this.weekdaySkips, Number.MAX_SAFE_INTEGER, minDays);
|
||||
},
|
||||
todayWeek: function todayWeek() {
|
||||
var today = this.times.today;
|
||||
var start = this.getStartOfWeek(today);
|
||||
var end = this.getEndOfWeek(today);
|
||||
return createDayList(start, end, today, this.weekdaySkips, this.weekdays.length, this.weekdays.length);
|
||||
},
|
||||
monthFormatter: function monthFormatter() {
|
||||
if (this.monthFormat) {
|
||||
return this.monthFormat;
|
||||
}
|
||||
var longOptions = { timeZone: 'UTC', month: 'long' };
|
||||
var shortOptions = { timeZone: 'UTC', month: 'short' };
|
||||
return createNativeLocaleFormatter(this.locale, function (_tms, short) {
|
||||
return short ? shortOptions : longOptions;
|
||||
});
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
isOutside: function isOutside(day) {
|
||||
var dayIdentifier = getDayIdentifier(day);
|
||||
return dayIdentifier < getDayIdentifier(this.parsedStart) || dayIdentifier > getDayIdentifier(this.parsedEnd);
|
||||
},
|
||||
genHead: function genHead() {
|
||||
return this.$createElement('div', {
|
||||
staticClass: 'v-calendar-weekly__head'
|
||||
}, this.genHeadDays());
|
||||
},
|
||||
genHeadDays: function genHeadDays() {
|
||||
return this.todayWeek.map(this.genHeadDay);
|
||||
},
|
||||
genHeadDay: function genHeadDay(day, index) {
|
||||
var outside = this.isOutside(this.days[index]);
|
||||
var color = day.present ? this.color : undefined;
|
||||
return this.$createElement('div', this.setTextColor(color, {
|
||||
key: day.date,
|
||||
staticClass: 'v-calendar-weekly__head-weekday',
|
||||
class: this.getRelativeClasses(day, outside)
|
||||
}), this.weekdayFormatter(day, this.shortWeekdays));
|
||||
},
|
||||
genWeeks: function genWeeks() {
|
||||
var days = this.days;
|
||||
var weekDays = this.weekdays.length;
|
||||
var weeks = [];
|
||||
for (var i = 0; i < days.length; i += weekDays) {
|
||||
weeks.push(this.genWeek(days.slice(i, i + weekDays)));
|
||||
}
|
||||
return weeks;
|
||||
},
|
||||
genWeek: function genWeek(week) {
|
||||
return this.$createElement('div', {
|
||||
key: week[0].date,
|
||||
staticClass: 'v-calendar-weekly__week'
|
||||
}, week.map(this.genDay));
|
||||
},
|
||||
genDay: function genDay(day) {
|
||||
var outside = this.isOutside(day);
|
||||
var slot = this.$scopedSlots.day;
|
||||
var slotData = _extends({ outside: outside }, day);
|
||||
var hasMonth = day.day === 1 && this.showMonthOnFirst;
|
||||
return this.$createElement('div', {
|
||||
key: day.date,
|
||||
staticClass: 'v-calendar-weekly__day',
|
||||
class: this.getRelativeClasses(day, outside),
|
||||
on: this.getDefaultMouseEventHandlers(':day', function (_e) {
|
||||
return day;
|
||||
})
|
||||
}, [this.genDayLabel(day), hasMonth ? this.genDayMonth(day) : '', slot ? slot(slotData) : '']);
|
||||
},
|
||||
genDayLabel: function genDayLabel(day) {
|
||||
var color = day.present ? this.color : undefined;
|
||||
var slot = this.$scopedSlots.dayLabel;
|
||||
return this.$createElement('div', this.setTextColor(color, {
|
||||
staticClass: 'v-calendar-weekly__day-label',
|
||||
on: this.getMouseEventHandlers({
|
||||
'click:date': { event: 'click', stop: true },
|
||||
'contextmenu:date': { event: 'contextmenu', stop: true, prevent: true, result: false }
|
||||
}, function (_e) {
|
||||
return day;
|
||||
})
|
||||
}), slot ? slot(day) : this.dayFormatter(day, false));
|
||||
},
|
||||
genDayMonth: function genDayMonth(day) {
|
||||
var color = day.present ? this.color : undefined;
|
||||
var slot = this.$scopedSlots.dayMonth;
|
||||
return this.$createElement('div', this.setTextColor(color, {
|
||||
staticClass: 'v-calendar-weekly__day-month'
|
||||
}), slot ? slot(day) : this.monthFormatter(day, this.shortMonths));
|
||||
}
|
||||
},
|
||||
render: function render(h) {
|
||||
return h('div', {
|
||||
staticClass: this.staticClass,
|
||||
class: this.classes,
|
||||
nativeOn: {
|
||||
dragstart: function dragstart(e) {
|
||||
e.preventDefault();
|
||||
}
|
||||
}
|
||||
}, [!this.hideHeader ? this.genHead() : ''].concat(_toConsumableArray(this.genWeeks())));
|
||||
}
|
||||
});
|
||||
//# sourceMappingURL=VCalendarWeekly.js.map
|
||||
+1
File diff suppressed because one or more lines are too long
+14
@@ -0,0 +1,14 @@
|
||||
import VCalendar from './VCalendar';
|
||||
import VCalendarDaily from './VCalendarDaily';
|
||||
import VCalendarWeekly from './VCalendarWeekly';
|
||||
import VCalendarMonthly from './VCalendarMonthly';
|
||||
export { VCalendar, VCalendarDaily, VCalendarWeekly, VCalendarMonthly };
|
||||
export default {
|
||||
$_vuetify_subcomponents: {
|
||||
VCalendar: VCalendar,
|
||||
VCalendarDaily: VCalendarDaily,
|
||||
VCalendarWeekly: VCalendarWeekly,
|
||||
VCalendarMonthly: VCalendarMonthly
|
||||
}
|
||||
};
|
||||
//# sourceMappingURL=index.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/components/VCalendar/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAP,MAAsB,aAAtB;AACA,OAAO,cAAP,MAA2B,kBAA3B;AACA,OAAO,eAAP,MAA4B,mBAA5B;AACA,OAAO,gBAAP,MAA6B,oBAA7B;AAEA,SAAS,SAAT,EAAoB,cAApB,EAAoC,eAApC,EAAqD,gBAArD;AAEA,eAAe;AACb,6BAAyB;AACvB,4BADuB;AAEvB,sCAFuB;AAGvB,wCAHuB;AAIvB;AAJuB;AADZ,CAAf","sourcesContent":["import VCalendar from './VCalendar'\nimport VCalendarDaily from './VCalendarDaily'\nimport VCalendarWeekly from './VCalendarWeekly'\nimport VCalendarMonthly from './VCalendarMonthly'\n\nexport { VCalendar, VCalendarDaily, VCalendarWeekly, VCalendarMonthly }\n\nexport default {\n $_vuetify_subcomponents: {\n VCalendar,\n VCalendarDaily,\n VCalendarWeekly,\n VCalendarMonthly\n }\n}\n"],"sourceRoot":""}
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
// Mixins
|
||||
import mixins from '../../../util/mixins';
|
||||
import Themeable from '../../../mixins/themeable';
|
||||
import Colorable from '../../../mixins/colorable';
|
||||
import Times from './times';
|
||||
import Mouse from './mouse';
|
||||
// Util
|
||||
import props from '../util/props';
|
||||
import { parseTimestamp, getWeekdaySkips, createDayList, createNativeLocaleFormatter, getStartOfWeek as _getStartOfWeek, getEndOfWeek as _getEndOfWeek } from '../util/timestamp';
|
||||
/* @vue/component */
|
||||
export default mixins(Colorable, Themeable, Times, Mouse).extend({
|
||||
name: 'calendar-base',
|
||||
props: props.base,
|
||||
computed: {
|
||||
weekdaySkips: function weekdaySkips() {
|
||||
return getWeekdaySkips(this.weekdays);
|
||||
},
|
||||
parsedStart: function parsedStart() {
|
||||
return parseTimestamp(this.start);
|
||||
},
|
||||
parsedEnd: function parsedEnd() {
|
||||
return parseTimestamp(this.end);
|
||||
},
|
||||
days: function days() {
|
||||
return createDayList(this.parsedStart, this.parsedEnd, this.times.today, this.weekdaySkips);
|
||||
},
|
||||
dayFormatter: function dayFormatter() {
|
||||
if (this.dayFormat) {
|
||||
return this.dayFormat;
|
||||
}
|
||||
var options = { timeZone: 'UTC', day: 'numeric' };
|
||||
return createNativeLocaleFormatter(this.locale, function (_tms, _short) {
|
||||
return options;
|
||||
});
|
||||
},
|
||||
weekdayFormatter: function weekdayFormatter() {
|
||||
if (this.weekdayFormat) {
|
||||
return this.weekdayFormat;
|
||||
}
|
||||
var longOptions = { timeZone: 'UTC', weekday: 'long' };
|
||||
var shortOptions = { timeZone: 'UTC', weekday: 'short' };
|
||||
return createNativeLocaleFormatter(this.locale, function (_tms, short) {
|
||||
return short ? shortOptions : longOptions;
|
||||
});
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getRelativeClasses: function getRelativeClasses(timestamp) {
|
||||
var outside = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
||||
|
||||
return {
|
||||
'v-present': timestamp.present,
|
||||
'v-past': timestamp.past,
|
||||
'v-future': timestamp.future,
|
||||
'v-outside': outside
|
||||
};
|
||||
},
|
||||
getStartOfWeek: function getStartOfWeek(timestamp) {
|
||||
return _getStartOfWeek(timestamp, this.weekdays, this.times.today);
|
||||
},
|
||||
getEndOfWeek: function getEndOfWeek(timestamp) {
|
||||
return _getEndOfWeek(timestamp, this.weekdays, this.times.today);
|
||||
}
|
||||
}
|
||||
});
|
||||
//# sourceMappingURL=calendar-base.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../../src/components/VCalendar/mixins/calendar-base.ts"],"names":[],"mappings":";AAEA,OAAO,MAAP,MAAmB,sBAAnB;AACA,OAAO,SAAP,MAAsB,2BAAtB;AACA,OAAO,SAAP,MAAsB,2BAAtB;AACA,OAAO,KAAP,MAAkB,SAAlB;AACA,OAAO,KAAP,MAAkB,SAAlB;AAEA;AACA,OAAO,KAAP,MAAkB,eAAlB;AACA,SAGE,cAHF,EAIE,eAJF,EAKE,aALF,EAME,2BANF,EAOE,iCAPF,EAQE,6BARF,QASO,mBATP;AAWA;AACA,eAAe,OAAO,SAAP,EAAkB,SAAlB,EAA6B,KAA7B,EAAoC,KAApC,EAA2C,MAA3C,CAAkD;AAC/D,UAAM,eADyD;AAG/D,WAAO,MAAM,IAHkD;AAK/D,cAAU;AACR,oBADQ,0BACI;AACV,mBAAO,gBAAgB,KAAK,QAArB,CAAP;AACD,SAHO;AAIR,mBAJQ,yBAIG;AACT,mBAAO,eAAe,KAAK,KAApB,CAAP;AACD,SANO;AAOR,iBAPQ,uBAOC;AACP,mBAAO,eAAe,KAAK,GAApB,CAAP;AACD,SATO;AAUR,YAVQ,kBAUJ;AACF,mBAAO,cACL,KAAK,WADA,EAEL,KAAK,SAFA,EAGL,KAAK,KAAL,CAAW,KAHN,EAIL,KAAK,YAJA,CAAP;AAMD,SAjBO;AAkBR,oBAlBQ,0BAkBI;AACV,gBAAI,KAAK,SAAT,EAAoB;AAClB,uBAAO,KAAK,SAAZ;AACD;AAED,gBAAM,UAAU,EAAE,UAAU,KAAZ,EAAmB,KAAK,SAAxB,EAAhB;AAEA,mBAAO,4BACL,KAAK,MADA,EAEL,UAAC,IAAD,EAAO,MAAP;AAAA,uBAAkB,OAAlB;AAAA,aAFK,CAAP;AAID,SA7BO;AA8BR,wBA9BQ,8BA8BQ;AACd,gBAAI,KAAK,aAAT,EAAwB;AACtB,uBAAO,KAAK,aAAZ;AACD;AAED,gBAAM,cAAc,EAAE,UAAU,KAAZ,EAAmB,SAAS,MAA5B,EAApB;AACA,gBAAM,eAAe,EAAE,UAAU,KAAZ,EAAmB,SAAS,OAA5B,EAArB;AAEA,mBAAO,4BACL,KAAK,MADA,EAEL,UAAC,IAAD,EAAO,KAAP;AAAA,uBAAiB,QAAQ,YAAR,GAAuB,WAAxC;AAAA,aAFK,CAAP;AAID;AA1CO,KALqD;AAkD/D,aAAS;AACP,0BADO,8BACa,SADb,EACmD;AAAA,gBAAf,OAAe,uEAAL,KAAK;;AACxD,mBAAO;AACL,6BAAa,UAAU,OADlB;AAEL,0BAAU,UAAU,IAFf;AAGL,4BAAY,UAAU,MAHjB;AAIL,6BAAa;AAJR,aAAP;AAMD,SARM;AASP,sBATO,0BASS,SATT,EAS8B;AACnC,mBAAO,gBAAe,SAAf,EAA0B,KAAK,QAA/B,EAAyC,KAAK,KAAL,CAAW,KAApD,CAAP;AACD,SAXM;AAYP,oBAZO,wBAYO,SAZP,EAY4B;AACjC,mBAAO,cAAa,SAAb,EAAwB,KAAK,QAA7B,EAAuC,KAAK,KAAL,CAAW,KAAlD,CAAP;AACD;AAdM;AAlDsD,CAAlD,CAAf","sourcesContent":["\n// Mixins\nimport mixins from '../../../util/mixins'\nimport Themeable from '../../../mixins/themeable'\nimport Colorable from '../../../mixins/colorable'\nimport Times from './times'\nimport Mouse from './mouse'\n\n// Util\nimport props from '../util/props'\nimport {\n VTimestamp,\n VTimestampFormatter,\n parseTimestamp,\n getWeekdaySkips,\n createDayList,\n createNativeLocaleFormatter,\n getStartOfWeek,\n getEndOfWeek\n} from '../util/timestamp'\n\n/* @vue/component */\nexport default mixins(Colorable, Themeable, Times, Mouse).extend({\n name: 'calendar-base',\n\n props: props.base,\n\n computed: {\n weekdaySkips (): number[] {\n return getWeekdaySkips(this.weekdays)\n },\n parsedStart (): VTimestamp {\n return parseTimestamp(this.start) as VTimestamp\n },\n parsedEnd (): VTimestamp {\n return parseTimestamp(this.end) as VTimestamp\n },\n days (): VTimestamp[] {\n return createDayList(\n this.parsedStart,\n this.parsedEnd,\n this.times.today,\n this.weekdaySkips\n )\n },\n dayFormatter (): VTimestampFormatter {\n if (this.dayFormat) {\n return this.dayFormat as VTimestampFormatter\n }\n\n const options = { timeZone: 'UTC', day: 'numeric' }\n\n return createNativeLocaleFormatter(\n this.locale,\n (_tms, _short) => options\n )\n },\n weekdayFormatter (): VTimestampFormatter {\n if (this.weekdayFormat) {\n return this.weekdayFormat as VTimestampFormatter\n }\n\n const longOptions = { timeZone: 'UTC', weekday: 'long' }\n const shortOptions = { timeZone: 'UTC', weekday: 'short' }\n\n return createNativeLocaleFormatter(\n this.locale,\n (_tms, short) => short ? shortOptions : longOptions\n )\n }\n },\n\n methods: {\n getRelativeClasses (timestamp: VTimestamp, outside = false): object {\n return {\n 'v-present': timestamp.present,\n 'v-past': timestamp.past,\n 'v-future': timestamp.future,\n 'v-outside': outside\n }\n },\n getStartOfWeek (timestamp: VTimestamp): VTimestamp {\n return getStartOfWeek(timestamp, this.weekdays, this.times.today)\n },\n getEndOfWeek (timestamp: VTimestamp): VTimestamp {\n return getEndOfWeek(timestamp, this.weekdays, this.times.today)\n }\n }\n})\n"],"sourceRoot":""}
|
||||
+117
@@ -0,0 +1,117 @@
|
||||
// Mixins
|
||||
import CalendarBase from './calendar-base';
|
||||
// Util
|
||||
import props from '../util/props';
|
||||
import { parseTime, copyTimestamp, updateMinutes, createDayList, createIntervalList, createNativeLocaleFormatter } from '../util/timestamp';
|
||||
/* @vue/component */
|
||||
export default CalendarBase.extend({
|
||||
name: 'calendar-with-intervals',
|
||||
props: props.intervals,
|
||||
computed: {
|
||||
parsedFirstInterval: function parsedFirstInterval() {
|
||||
return parseInt(this.firstInterval);
|
||||
},
|
||||
parsedIntervalMinutes: function parsedIntervalMinutes() {
|
||||
return parseInt(this.intervalMinutes);
|
||||
},
|
||||
parsedIntervalCount: function parsedIntervalCount() {
|
||||
return parseInt(this.intervalCount);
|
||||
},
|
||||
parsedIntervalHeight: function parsedIntervalHeight() {
|
||||
return parseFloat(this.intervalHeight);
|
||||
},
|
||||
firstMinute: function firstMinute() {
|
||||
return this.parsedFirstInterval * this.parsedIntervalMinutes;
|
||||
},
|
||||
bodyHeight: function bodyHeight() {
|
||||
return this.parsedIntervalCount * this.parsedIntervalHeight;
|
||||
},
|
||||
days: function days() {
|
||||
return createDayList(this.parsedStart, this.parsedEnd, this.times.today, this.weekdaySkips, this.maxDays);
|
||||
},
|
||||
intervals: function intervals() {
|
||||
var days = this.days;
|
||||
var first = this.parsedFirstInterval;
|
||||
var minutes = this.parsedIntervalMinutes;
|
||||
var count = this.parsedIntervalCount;
|
||||
var now = this.times.now;
|
||||
return days.map(function (d) {
|
||||
return createIntervalList(d, first, minutes, count, now);
|
||||
});
|
||||
},
|
||||
intervalFormatter: function intervalFormatter() {
|
||||
if (this.intervalFormat) {
|
||||
return this.intervalFormat;
|
||||
}
|
||||
var longOptions = { timeZone: 'UTC', hour12: true, hour: '2-digit', minute: '2-digit' };
|
||||
var shortOptions = { timeZone: 'UTC', hour12: true, hour: 'numeric', minute: '2-digit' };
|
||||
var shortHourOptions = { timeZone: 'UTC', hour12: true, hour: 'numeric' };
|
||||
return createNativeLocaleFormatter(this.locale, function (tms, short) {
|
||||
return short ? tms.minute === 0 ? shortHourOptions : shortOptions : longOptions;
|
||||
});
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
showIntervalLabelDefault: function showIntervalLabelDefault(interval) {
|
||||
var first = this.intervals[0][0];
|
||||
var isFirst = first.hour === interval.hour && first.minute === interval.minute;
|
||||
return !isFirst && interval.minute === 0;
|
||||
},
|
||||
intervalStyleDefault: function intervalStyleDefault(_interval) {
|
||||
return undefined;
|
||||
},
|
||||
getTimestampAtEvent: function getTimestampAtEvent(e, day) {
|
||||
var timestamp = copyTimestamp(day);
|
||||
var bounds = e.currentTarget.getBoundingClientRect();
|
||||
var baseMinutes = this.firstMinute;
|
||||
var touchEvent = e;
|
||||
var mouseEvent = e;
|
||||
var touches = touchEvent.changedTouches || touchEvent.touches;
|
||||
var clientY = touches && touches[0] ? touches[0].clientY : mouseEvent.clientY;
|
||||
var addIntervals = (clientY - bounds.top) / this.parsedIntervalHeight;
|
||||
var addMinutes = Math.floor(addIntervals * this.parsedIntervalMinutes);
|
||||
var minutes = baseMinutes + addMinutes;
|
||||
return updateMinutes(timestamp, minutes, this.times.now);
|
||||
},
|
||||
getSlotScope: function getSlotScope(timestamp) {
|
||||
var scope = copyTimestamp(timestamp);
|
||||
scope.timeToY = this.timeToY;
|
||||
scope.minutesToPixels = this.minutesToPixels;
|
||||
return scope;
|
||||
},
|
||||
scrollToTime: function scrollToTime(time) {
|
||||
var y = this.timeToY(time);
|
||||
var pane = this.$refs.scrollArea;
|
||||
if (y === false || !pane) {
|
||||
return false;
|
||||
}
|
||||
pane.scrollTop = y;
|
||||
return true;
|
||||
},
|
||||
minutesToPixels: function minutesToPixels(minutes) {
|
||||
return minutes / this.parsedIntervalMinutes * this.parsedIntervalHeight;
|
||||
},
|
||||
timeToY: function timeToY(time) {
|
||||
var clamp = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
||||
|
||||
var minutes = parseTime(time);
|
||||
if (minutes === false) {
|
||||
return false;
|
||||
}
|
||||
var min = this.firstMinute;
|
||||
var gap = this.parsedIntervalCount * this.parsedIntervalMinutes;
|
||||
var delta = (minutes - min) / gap;
|
||||
var y = delta * this.bodyHeight;
|
||||
if (clamp) {
|
||||
if (y < 0) {
|
||||
y = 0;
|
||||
}
|
||||
if (y > this.bodyHeight) {
|
||||
y = this.bodyHeight;
|
||||
}
|
||||
}
|
||||
return y;
|
||||
}
|
||||
}
|
||||
});
|
||||
//# sourceMappingURL=calendar-with-intervals.js.map
|
||||
Generated
Vendored
+1
File diff suppressed because one or more lines are too long
+56
@@ -0,0 +1,56 @@
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
import Vue from 'vue';
|
||||
export default Vue.extend({
|
||||
name: 'mouse',
|
||||
methods: {
|
||||
getDefaultMouseEventHandlers: function getDefaultMouseEventHandlers(suffix, getEvent) {
|
||||
var _getMouseEventHandler;
|
||||
|
||||
return this.getMouseEventHandlers((_getMouseEventHandler = {}, _defineProperty(_getMouseEventHandler, 'click' + suffix, { event: 'click' }), _defineProperty(_getMouseEventHandler, 'contextmenu' + suffix, { event: 'contextmenu', prevent: true, result: false }), _defineProperty(_getMouseEventHandler, 'mousedown' + suffix, { event: 'mousedown' }), _defineProperty(_getMouseEventHandler, 'mousemove' + suffix, { event: 'mousemove' }), _defineProperty(_getMouseEventHandler, 'mouseup' + suffix, { event: 'mouseup' }), _defineProperty(_getMouseEventHandler, 'mouseenter' + suffix, { event: 'mouseenter' }), _defineProperty(_getMouseEventHandler, 'mouseleave' + suffix, { event: 'mouseleave' }), _defineProperty(_getMouseEventHandler, 'touchstart' + suffix, { event: 'touchstart' }), _defineProperty(_getMouseEventHandler, 'touchmove' + suffix, { event: 'touchmove' }), _defineProperty(_getMouseEventHandler, 'touchend' + suffix, { event: 'touchend' }), _getMouseEventHandler), getEvent);
|
||||
},
|
||||
getMouseEventHandlers: function getMouseEventHandlers(events, getEvent) {
|
||||
var _this = this;
|
||||
|
||||
var on = {};
|
||||
|
||||
var _loop = function _loop(event) {
|
||||
var eventOptions = events[event];
|
||||
if (!_this.$listeners[event]) return 'continue';
|
||||
// TODO somehow pull in modifiers
|
||||
var prefix = eventOptions.passive ? '&' : (eventOptions.once ? '~' : '') + (eventOptions.capture ? '!' : '');
|
||||
var key = prefix + eventOptions.event;
|
||||
var handler = function handler(e) {
|
||||
var mouseEvent = e;
|
||||
if (eventOptions.button === undefined || mouseEvent.buttons > 0 && mouseEvent.button === eventOptions.button) {
|
||||
if (eventOptions.prevent) {
|
||||
e.preventDefault();
|
||||
}
|
||||
if (eventOptions.stop) {
|
||||
e.stopPropagation();
|
||||
}
|
||||
_this.$emit(event, getEvent(e));
|
||||
}
|
||||
return eventOptions.result;
|
||||
};
|
||||
if (key in on) {
|
||||
if (Array.isArray(on[key])) {
|
||||
on[key].push(handler);
|
||||
} else {
|
||||
on[key] = [on[key], handler];
|
||||
}
|
||||
} else {
|
||||
on[key] = handler;
|
||||
}
|
||||
};
|
||||
|
||||
for (var event in events) {
|
||||
var _ret = _loop(event);
|
||||
|
||||
if (_ret === 'continue') continue;
|
||||
}
|
||||
return on;
|
||||
}
|
||||
}
|
||||
});
|
||||
//# sourceMappingURL=mouse.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../../src/components/VCalendar/mixins/mouse.ts"],"names":[],"mappings":";;AAAA,OAAO,GAAP,MAAgB,KAAhB;AAqBA,eAAe,IAAI,MAAJ,CAAW;AACxB,UAAM,OADkB;AAGxB,aAAS;AACP,oCADO,wCACuB,MADvB,EACuC,QADvC,EAC6D;AAAA;;AAClE,mBAAO,KAAK,qBAAL,qEACJ,UAAU,MADN,EACe,EAAE,OAAO,OAAT,EADf,0CAEJ,gBAAgB,MAFZ,EAEqB,EAAE,OAAO,aAAT,EAAwB,SAAS,IAAjC,EAAuC,QAAQ,KAA/C,EAFrB,0CAGJ,cAAc,MAHV,EAGmB,EAAE,OAAO,WAAT,EAHnB,0CAIJ,cAAc,MAJV,EAImB,EAAE,OAAO,WAAT,EAJnB,0CAKJ,YAAY,MALR,EAKiB,EAAE,OAAO,SAAT,EALjB,0CAMJ,eAAe,MANX,EAMoB,EAAE,OAAO,YAAT,EANpB,0CAOJ,eAAe,MAPX,EAOoB,EAAE,OAAO,YAAT,EAPpB,0CAQJ,eAAe,MARX,EAQoB,EAAE,OAAO,YAAT,EARpB,0CASJ,cAAc,MATV,EASmB,EAAE,OAAO,WAAT,EATnB,0CAUJ,aAAa,MAVT,EAUkB,EAAE,OAAO,UAAT,EAVlB,2BAWJ,QAXI,CAAP;AAYD,SAdM;AAeP,6BAfO,iCAegB,MAfhB,EAeqC,QAfrC,EAe2D;AAAA;;AAChE,gBAAM,KAAqB,EAA3B;;AADgE,uCAGrD,KAHqD;AAI9D,oBAAM,eAAe,OAAO,KAAP,CAArB;AAEA,oBAAI,CAAC,MAAK,UAAL,CAAgB,KAAhB,CAAL,EAA6B;AAE7B;AAEA,oBAAM,SAAS,aAAa,OAAb,GAAuB,GAAvB,GAA8B,CAAC,aAAa,IAAb,GAAoB,GAApB,GAA0B,EAA3B,KAAkC,aAAa,OAAb,GAAuB,GAAvB,GAA6B,EAA/D,CAA7C;AACA,oBAAM,MAAM,SAAS,aAAa,KAAlC;AAEA,oBAAM,UAAwB,SAAxB,OAAwB,IAAI;AAChC,wBAAM,aAAyB,CAA/B;AACA,wBAAI,aAAa,MAAb,KAAwB,SAAxB,IAAsC,WAAW,OAAX,GAAqB,CAArB,IAA0B,WAAW,MAAX,KAAsB,aAAa,MAAvG,EAAgH;AAC9G,4BAAI,aAAa,OAAjB,EAA0B;AACxB,8BAAE,cAAF;AACD;AACD,4BAAI,aAAa,IAAjB,EAAuB;AACrB,8BAAE,eAAF;AACD;AACD,8BAAK,KAAL,CAAW,KAAX,EAAkB,SAAS,CAAT,CAAlB;AACD;AAED,2BAAO,aAAa,MAApB;AACD,iBAbD;AAeA,oBAAI,OAAO,EAAX,EAAe;AACb,wBAAI,MAAM,OAAN,CAAc,GAAG,GAAH,CAAd,CAAJ,EAA4B;AACzB,2BAAG,GAAH,EAA2B,IAA3B,CAAgC,OAAhC;AACF,qBAFD,MAEO;AACL,2BAAG,GAAH,IAAU,CAAC,GAAG,GAAH,CAAD,EAAU,OAAV,CAAV;AACD;AACF,iBAND,MAMO;AACL,uBAAG,GAAH,IAAU,OAAV;AACD;AApC6D;;AAGhE,iBAAK,IAAM,KAAX,IAAoB,MAApB,EAA4B;AAAA,iCAAjB,KAAiB;;AAAA,yCAGG;AA+B9B;AAED,mBAAO,EAAP;AACD;AAvDM;AAHe,CAAX,CAAf","sourcesContent":["import Vue from 'vue'\n\nexport type MouseHandler = (e: MouseEvent | TouchEvent) => any\n\nexport type MouseEvents = {\n [event: string]: {\n event: string\n passive?: boolean\n capture?: boolean\n once?: boolean\n stop?: boolean\n prevent?: boolean\n button?: number\n result?: any\n }\n}\n\nexport type MouseEventsMap = {\n [event: string]: MouseHandler | MouseHandler[]\n}\n\nexport default Vue.extend({\n name: 'mouse',\n\n methods: {\n getDefaultMouseEventHandlers (suffix: string, getEvent: MouseHandler): MouseEventsMap {\n return this.getMouseEventHandlers({\n ['click' + suffix]: { event: 'click' },\n ['contextmenu' + suffix]: { event: 'contextmenu', prevent: true, result: false },\n ['mousedown' + suffix]: { event: 'mousedown' },\n ['mousemove' + suffix]: { event: 'mousemove' },\n ['mouseup' + suffix]: { event: 'mouseup' },\n ['mouseenter' + suffix]: { event: 'mouseenter' },\n ['mouseleave' + suffix]: { event: 'mouseleave' },\n ['touchstart' + suffix]: { event: 'touchstart' },\n ['touchmove' + suffix]: { event: 'touchmove' },\n ['touchend' + suffix]: { event: 'touchend' }\n }, getEvent)\n },\n getMouseEventHandlers (events: MouseEvents, getEvent: MouseHandler): MouseEventsMap {\n const on: MouseEventsMap = {}\n\n for (const event in events) {\n const eventOptions = events[event]\n\n if (!this.$listeners[event]) continue\n\n // TODO somehow pull in modifiers\n\n const prefix = eventOptions.passive ? '&' : ((eventOptions.once ? '~' : '') + (eventOptions.capture ? '!' : ''))\n const key = prefix + eventOptions.event\n\n const handler: MouseHandler = e => {\n const mouseEvent: MouseEvent = e as MouseEvent\n if (eventOptions.button === undefined || (mouseEvent.buttons > 0 && mouseEvent.button === eventOptions.button)) {\n if (eventOptions.prevent) {\n e.preventDefault()\n }\n if (eventOptions.stop) {\n e.stopPropagation()\n }\n this.$emit(event, getEvent(e))\n }\n\n return eventOptions.result\n }\n\n if (key in on) {\n if (Array.isArray(on[key])) {\n (on[key] as MouseHandler[]).push(handler)\n } else {\n on[key] = [on[key], handler] as MouseHandler[]\n }\n } else {\n on[key] = handler\n }\n }\n\n return on\n }\n }\n})\n"],"sourceRoot":""}
|
||||
+65
@@ -0,0 +1,65 @@
|
||||
import Vue from 'vue';
|
||||
import { validateTimestamp, parseTimestamp, parseDate } from '../util/timestamp';
|
||||
export default Vue.extend({
|
||||
name: 'times',
|
||||
props: {
|
||||
now: {
|
||||
type: String,
|
||||
validator: validateTimestamp
|
||||
}
|
||||
},
|
||||
data: function data() {
|
||||
return {
|
||||
times: {
|
||||
now: parseTimestamp('0000-00-00 00:00'),
|
||||
today: parseTimestamp('0000-00-00')
|
||||
}
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
parsedNow: function parsedNow() {
|
||||
return this.now ? parseTimestamp(this.now) : null;
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
parsedNow: 'updateTimes'
|
||||
},
|
||||
created: function created() {
|
||||
this.updateTimes();
|
||||
this.setPresent();
|
||||
},
|
||||
|
||||
methods: {
|
||||
setPresent: function setPresent() {
|
||||
this.times.now.present = this.times.today.present = true;
|
||||
this.times.now.past = this.times.today.past = false;
|
||||
this.times.now.future = this.times.today.future = false;
|
||||
},
|
||||
updateTimes: function updateTimes() {
|
||||
var now = this.parsedNow || this.getNow();
|
||||
this.updateDay(now, this.times.now);
|
||||
this.updateTime(now, this.times.now);
|
||||
this.updateDay(now, this.times.today);
|
||||
},
|
||||
getNow: function getNow() {
|
||||
return parseDate(new Date());
|
||||
},
|
||||
updateDay: function updateDay(now, target) {
|
||||
if (now.date !== target.date) {
|
||||
target.year = now.year;
|
||||
target.month = now.month;
|
||||
target.day = now.day;
|
||||
target.weekday = now.weekday;
|
||||
target.date = now.date;
|
||||
}
|
||||
},
|
||||
updateTime: function updateTime(now, target) {
|
||||
if (now.time !== target.time) {
|
||||
target.hour = now.hour;
|
||||
target.minute = now.minute;
|
||||
target.time = now.time;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
//# sourceMappingURL=times.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../../src/components/VCalendar/mixins/times.ts"],"names":[],"mappings":"AAAA,OAAO,GAAP,MAAgB,KAAhB;AAEA,SAEE,iBAFF,EAGE,cAHF,EAIE,SAJF,QAKO,mBALP;AAOA,eAAe,IAAI,MAAJ,CAAW;AACxB,UAAM,OADkB;AAGxB,WAAO;AACL,aAAK;AACH,kBAAM,MADH;AAEH,uBAAW;AAFR;AADA,KAHiB;AAUxB,UAAM;AAAA,eAAO;AACX,mBAAO;AACL,qBAAK,eAAe,kBAAf,CADA;AAEL,uBAAO,eAAe,YAAf;AAFF;AADI,SAAP;AAAA,KAVkB;AAiBxB,cAAU;AACR,iBADQ,uBACC;AACP,mBAAO,KAAK,GAAL,GAAW,eAAe,KAAK,GAApB,CAAX,GAAsC,IAA7C;AACD;AAHO,KAjBc;AAuBxB,WAAO;AACL,mBAAW;AADN,KAvBiB;AA2BxB,WA3BwB,qBA2BjB;AACL,aAAK,WAAL;AACA,aAAK,UAAL;AACD,KA9BuB;;AAgCxB,aAAS;AACP,kBADO,wBACG;AACR,iBAAK,KAAL,CAAW,GAAX,CAAe,OAAf,GAAyB,KAAK,KAAL,CAAW,KAAX,CAAiB,OAAjB,GAA2B,IAApD;AACA,iBAAK,KAAL,CAAW,GAAX,CAAe,IAAf,GAAsB,KAAK,KAAL,CAAW,KAAX,CAAiB,IAAjB,GAAwB,KAA9C;AACA,iBAAK,KAAL,CAAW,GAAX,CAAe,MAAf,GAAwB,KAAK,KAAL,CAAW,KAAX,CAAiB,MAAjB,GAA0B,KAAlD;AACD,SALM;AAMP,mBANO,yBAMI;AACT,gBAAM,MAAkB,KAAK,SAAL,IAAkB,KAAK,MAAL,EAA1C;AACA,iBAAK,SAAL,CAAe,GAAf,EAAoB,KAAK,KAAL,CAAW,GAA/B;AACA,iBAAK,UAAL,CAAgB,GAAhB,EAAqB,KAAK,KAAL,CAAW,GAAhC;AACA,iBAAK,SAAL,CAAe,GAAf,EAAoB,KAAK,KAAL,CAAW,KAA/B;AACD,SAXM;AAYP,cAZO,oBAYD;AACJ,mBAAO,UAAU,IAAI,IAAJ,EAAV,CAAP;AACD,SAdM;AAeP,iBAfO,qBAeI,GAfJ,EAeqB,MAfrB,EAeuC;AAC5C,gBAAI,IAAI,IAAJ,KAAa,OAAO,IAAxB,EAA8B;AAC5B,uBAAO,IAAP,GAAc,IAAI,IAAlB;AACA,uBAAO,KAAP,GAAe,IAAI,KAAnB;AACA,uBAAO,GAAP,GAAa,IAAI,GAAjB;AACA,uBAAO,OAAP,GAAiB,IAAI,OAArB;AACA,uBAAO,IAAP,GAAc,IAAI,IAAlB;AACD;AACF,SAvBM;AAwBP,kBAxBO,sBAwBK,GAxBL,EAwBsB,MAxBtB,EAwBwC;AAC7C,gBAAI,IAAI,IAAJ,KAAa,OAAO,IAAxB,EAA8B;AAC5B,uBAAO,IAAP,GAAc,IAAI,IAAlB;AACA,uBAAO,MAAP,GAAgB,IAAI,MAApB;AACA,uBAAO,IAAP,GAAc,IAAI,IAAlB;AACD;AACF;AA9BM;AAhCe,CAAX,CAAf","sourcesContent":["import Vue from 'vue'\n\nimport {\n VTimestamp,\n validateTimestamp,\n parseTimestamp,\n parseDate\n} from '../util/timestamp'\n\nexport default Vue.extend({\n name: 'times',\n\n props: {\n now: {\n type: String,\n validator: validateTimestamp\n }\n },\n\n data: () => ({\n times: {\n now: parseTimestamp('0000-00-00 00:00') as VTimestamp,\n today: parseTimestamp('0000-00-00') as VTimestamp\n }\n }),\n\n computed: {\n parsedNow (): VTimestamp | null {\n return this.now ? parseTimestamp(this.now) : null\n }\n },\n\n watch: {\n parsedNow: 'updateTimes'\n },\n\n created () {\n this.updateTimes()\n this.setPresent()\n },\n\n methods: {\n setPresent (): void {\n this.times.now.present = this.times.today.present = true\n this.times.now.past = this.times.today.past = false\n this.times.now.future = this.times.today.future = false\n },\n updateTimes (): void {\n const now: VTimestamp = this.parsedNow || this.getNow()\n this.updateDay(now, this.times.now)\n this.updateTime(now, this.times.now)\n this.updateDay(now, this.times.today)\n },\n getNow (): VTimestamp {\n return parseDate(new Date())\n },\n updateDay (now: VTimestamp, target: VTimestamp): void {\n if (now.date !== target.date) {\n target.year = now.year\n target.month = now.month\n target.day = now.day\n target.weekday = now.weekday\n target.date = now.date\n }\n },\n updateTime (now: VTimestamp, target: VTimestamp): void {\n if (now.time !== target.time) {\n target.hour = now.hour\n target.minute = now.minute\n target.time = now.time\n }\n }\n }\n})\n"],"sourceRoot":""}
|
||||
+117
@@ -0,0 +1,117 @@
|
||||
import { validateTimestamp, parseDate } from './timestamp';
|
||||
export default {
|
||||
base: {
|
||||
start: {
|
||||
type: String,
|
||||
validate: validateTimestamp,
|
||||
default: function _default() {
|
||||
return parseDate(new Date()).date;
|
||||
}
|
||||
},
|
||||
end: {
|
||||
type: String,
|
||||
validate: validateTimestamp,
|
||||
default: '0000-00-00'
|
||||
},
|
||||
weekdays: {
|
||||
type: Array,
|
||||
default: function _default() {
|
||||
return [0, 1, 2, 3, 4, 5, 6];
|
||||
}
|
||||
},
|
||||
hideHeader: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
shortWeekdays: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
weekdayFormat: {
|
||||
type: Function,
|
||||
default: null
|
||||
},
|
||||
dayFormat: {
|
||||
type: Function,
|
||||
default: null
|
||||
},
|
||||
locale: {
|
||||
type: String,
|
||||
default: 'en-us'
|
||||
}
|
||||
},
|
||||
intervals: {
|
||||
maxDays: {
|
||||
type: Number,
|
||||
default: 7
|
||||
},
|
||||
shortIntervals: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
intervalHeight: {
|
||||
type: [Number, String],
|
||||
default: 40,
|
||||
validate: validateNumber
|
||||
},
|
||||
intervalMinutes: {
|
||||
type: [Number, String],
|
||||
default: 60,
|
||||
validate: validateNumber
|
||||
},
|
||||
firstInterval: {
|
||||
type: [Number, String],
|
||||
default: 0,
|
||||
validate: validateNumber
|
||||
},
|
||||
intervalCount: {
|
||||
type: [Number, String],
|
||||
default: 24,
|
||||
validate: validateNumber
|
||||
},
|
||||
intervalFormat: {
|
||||
type: Function,
|
||||
default: null
|
||||
},
|
||||
intervalStyle: {
|
||||
type: Function,
|
||||
default: null
|
||||
},
|
||||
showIntervalLabel: {
|
||||
type: Function,
|
||||
default: null
|
||||
}
|
||||
},
|
||||
weeks: {
|
||||
minWeeks: {
|
||||
validate: validateNumber,
|
||||
default: 1
|
||||
},
|
||||
shortMonths: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
showMonthOnFirst: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
monthFormat: {
|
||||
type: Function,
|
||||
default: null
|
||||
}
|
||||
},
|
||||
calendar: {
|
||||
type: {
|
||||
type: String,
|
||||
default: 'month'
|
||||
},
|
||||
value: {
|
||||
type: String,
|
||||
validate: validateTimestamp
|
||||
}
|
||||
}
|
||||
};
|
||||
function validateNumber(input) {
|
||||
return isFinite(parseInt(input));
|
||||
}
|
||||
//# sourceMappingURL=props.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../../src/components/VCalendar/util/props.ts"],"names":[],"mappings":"AACA,SAAS,iBAAT,EAA4B,SAA5B,QAA6C,aAA7C;AAEA,eAAe;AACb,UAAM;AACJ,eAAO;AACL,kBAAM,MADD;AAEL,sBAAU,iBAFL;AAGL,qBAAS;AAAA,uBAAM,UAAU,IAAI,IAAJ,EAAV,EAAsB,IAA5B;AAAA;AAHJ,SADH;AAMJ,aAAK;AACH,kBAAM,MADH;AAEH,sBAAU,iBAFP;AAGH,qBAAS;AAHN,SAND;AAWJ,kBAAU;AACR,kBAAM,KADE;AAER,qBAAS;AAAA,uBAAM,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CAAN;AAAA;AAFD,SAXN;AAeJ,oBAAY;AACV,kBAAM,OADI;AAEV,qBAAS;AAFC,SAfR;AAmBJ,uBAAe;AACb,kBAAM,OADO;AAEb,qBAAS;AAFI,SAnBX;AAuBJ,uBAAe;AACb,kBAAM,QADO;AAEb,qBAAS;AAFI,SAvBX;AA2BJ,mBAAW;AACT,kBAAM,QADG;AAET,qBAAS;AAFA,SA3BP;AA+BJ,gBAAQ;AACN,kBAAM,MADA;AAEN,qBAAS;AAFH;AA/BJ,KADO;AAqCb,eAAW;AACT,iBAAS;AACP,kBAAM,MADC;AAEP,qBAAS;AAFF,SADA;AAKT,wBAAgB;AACd,kBAAM,OADQ;AAEd,qBAAS;AAFK,SALP;AAST,wBAAgB;AACd,kBAAM,CAAC,MAAD,EAAS,MAAT,CADQ;AAEd,qBAAS,EAFK;AAGd,sBAAU;AAHI,SATP;AAcT,yBAAiB;AACf,kBAAM,CAAC,MAAD,EAAS,MAAT,CADS;AAEf,qBAAS,EAFM;AAGf,sBAAU;AAHK,SAdR;AAmBT,uBAAe;AACb,kBAAM,CAAC,MAAD,EAAS,MAAT,CADO;AAEb,qBAAS,CAFI;AAGb,sBAAU;AAHG,SAnBN;AAwBT,uBAAe;AACb,kBAAM,CAAC,MAAD,EAAS,MAAT,CADO;AAEb,qBAAS,EAFI;AAGb,sBAAU;AAHG,SAxBN;AA6BT,wBAAgB;AACd,kBAAM,QADQ;AAEd,qBAAS;AAFK,SA7BP;AAiCT,uBAAe;AACb,kBAAM,QADO;AAEb,qBAAS;AAFI,SAjCN;AAqCT,2BAAmB;AACjB,kBAAM,QADW;AAEjB,qBAAS;AAFQ;AArCV,KArCE;AA+Eb,WAAO;AACL,kBAAU;AACR,sBAAU,cADF;AAER,qBAAS;AAFD,SADL;AAKL,qBAAa;AACX,kBAAM,OADK;AAEX,qBAAS;AAFE,SALR;AASL,0BAAkB;AAChB,kBAAM,OADU;AAEhB,qBAAS;AAFO,SATb;AAaL,qBAAa;AACX,kBAAM,QADK;AAEX,qBAAS;AAFE;AAbR,KA/EM;AAiGb,cAAU;AACR,cAAM;AACJ,kBAAM,MADF;AAEJ,qBAAS;AAFL,SADE;AAKR,eAAO;AACL,kBAAM,MADD;AAEL,sBAAU;AAFL;AALC;AAjGG,CAAf;AA6GA,SAAS,cAAT,CAAyB,KAAzB,EAAmC;AACjC,WAAO,SAAS,SAAS,KAAT,CAAT,CAAP;AACD","sourcesContent":["\nimport { validateTimestamp, parseDate } from './timestamp'\n\nexport default {\n base: {\n start: {\n type: String,\n validate: validateTimestamp,\n default: () => parseDate(new Date()).date\n },\n end: {\n type: String,\n validate: validateTimestamp,\n default: '0000-00-00'\n },\n weekdays: {\n type: Array as () => number[],\n default: () => [0, 1, 2, 3, 4, 5, 6]\n },\n hideHeader: {\n type: Boolean,\n default: false\n },\n shortWeekdays: {\n type: Boolean,\n default: true\n },\n weekdayFormat: {\n type: Function, // VTimestampFormatter,\n default: null\n },\n dayFormat: {\n type: Function, // VTimestampFormatter,\n default: null\n },\n locale: {\n type: String,\n default: 'en-us'\n }\n },\n intervals: {\n maxDays: {\n type: Number,\n default: 7\n },\n shortIntervals: {\n type: Boolean,\n default: true\n },\n intervalHeight: {\n type: [Number, String],\n default: 40,\n validate: validateNumber\n },\n intervalMinutes: {\n type: [Number, String],\n default: 60,\n validate: validateNumber\n },\n firstInterval: {\n type: [Number, String],\n default: 0,\n validate: validateNumber\n },\n intervalCount: {\n type: [Number, String],\n default: 24,\n validate: validateNumber\n },\n intervalFormat: {\n type: Function, // VTimestampFormatter,\n default: null\n },\n intervalStyle: {\n type: Function, // (interval: VTimestamp): object\n default: null\n },\n showIntervalLabel: {\n type: Function, // (interval: VTimestamp): boolean\n default: null\n }\n },\n weeks: {\n minWeeks: {\n validate: validateNumber,\n default: 1\n },\n shortMonths: {\n type: Boolean,\n default: true\n },\n showMonthOnFirst: {\n type: Boolean,\n default: true\n },\n monthFormat: {\n type: Function, // VTimestampFormatter,\n default: null\n }\n },\n calendar: {\n type: {\n type: String,\n default: 'month'\n },\n value: {\n type: String,\n validate: validateTimestamp\n }\n }\n}\n\nfunction validateNumber (input: any): boolean {\n return isFinite(parseInt(input))\n}\n"],"sourceRoot":""}
|
||||
+336
@@ -0,0 +1,336 @@
|
||||
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
||||
|
||||
export var PARSE_REGEX = /^(\d{4})-(\d{1,2})(-(\d{1,2}))?([^\d]+(\d{1,2}))?(:(\d{1,2}))?(:(\d{1,2}))?$/;
|
||||
export var PARSE_TIME = /(\d\d?)(:(\d\d?)|)(:(\d\d?)|)/;
|
||||
export var DAYS_IN_MONTH = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
||||
export var DAYS_IN_MONTH_LEAP = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
||||
export var DAYS_IN_MONTH_MIN = 28;
|
||||
export var DAYS_IN_MONTH_MAX = 31;
|
||||
export var MONTH_MAX = 12;
|
||||
export var MONTH_MIN = 1;
|
||||
export var DAY_MIN = 1;
|
||||
export var DAYS_IN_WEEK = 7;
|
||||
export var MINUTES_IN_HOUR = 60;
|
||||
export var HOURS_IN_DAY = 24;
|
||||
export var FIRST_HOUR = 0;
|
||||
export function getStartOfWeek(timestamp, weekdays, today) {
|
||||
var start = copyTimestamp(timestamp);
|
||||
findWeekday(start, weekdays[0], prevDay);
|
||||
updateFormatted(start);
|
||||
if (today) {
|
||||
updateRelative(start, today, start.hasTime);
|
||||
}
|
||||
return start;
|
||||
}
|
||||
export function getEndOfWeek(timestamp, weekdays, today) {
|
||||
var end = copyTimestamp(timestamp);
|
||||
findWeekday(end, weekdays[weekdays.length - 1]);
|
||||
updateFormatted(end);
|
||||
if (today) {
|
||||
updateRelative(end, today, end.hasTime);
|
||||
}
|
||||
return end;
|
||||
}
|
||||
export function getStartOfMonth(timestamp) {
|
||||
var start = copyTimestamp(timestamp);
|
||||
start.day = DAY_MIN;
|
||||
updateWeekday(start);
|
||||
updateFormatted(start);
|
||||
return start;
|
||||
}
|
||||
export function getEndOfMonth(timestamp) {
|
||||
var end = copyTimestamp(timestamp);
|
||||
end.day = daysInMonth(end.year, end.month);
|
||||
updateWeekday(end);
|
||||
updateFormatted(end);
|
||||
return end;
|
||||
}
|
||||
export function parseTime(input) {
|
||||
if (typeof input === 'number') {
|
||||
// when a number is given, it's minutes since 12:00am
|
||||
return input;
|
||||
} else if (typeof input === 'string') {
|
||||
// when a string is given, it's a hh:mm:ss format where seconds are optional
|
||||
var parts = PARSE_TIME.exec(input);
|
||||
if (!parts) {
|
||||
return false;
|
||||
}
|
||||
return parseInt(parts[1]) * 60 + parseInt(parts[3] || 0);
|
||||
} else if ((typeof input === 'undefined' ? 'undefined' : _typeof(input)) === 'object') {
|
||||
// when an object is given, it must have hour and minute
|
||||
if (typeof input.hour !== 'number' || typeof input.minute !== 'number') {
|
||||
return false;
|
||||
}
|
||||
return input.hour * 60 + input.minute;
|
||||
} else {
|
||||
// unsupported type
|
||||
return false;
|
||||
}
|
||||
}
|
||||
export function validateTimestamp(input) {
|
||||
return !!PARSE_REGEX.exec(input);
|
||||
}
|
||||
export function parseTimestamp(input, now) {
|
||||
// YYYY-MM-DD hh:mm:ss
|
||||
var parts = PARSE_REGEX.exec(input);
|
||||
if (!parts) return null;
|
||||
var timestamp = {
|
||||
date: input,
|
||||
time: '',
|
||||
year: parseInt(parts[1]),
|
||||
month: parseInt(parts[2]),
|
||||
day: parseInt(parts[4]) || 1,
|
||||
hour: parseInt(parts[6]) || 0,
|
||||
minute: parseInt(parts[8]) || 0,
|
||||
weekday: 0,
|
||||
hasDay: !!parts[4],
|
||||
hasTime: !!(parts[6] && parts[8]),
|
||||
past: false,
|
||||
present: false,
|
||||
future: false
|
||||
};
|
||||
updateWeekday(timestamp);
|
||||
updateFormatted(timestamp);
|
||||
if (now) {
|
||||
updateRelative(timestamp, now, timestamp.hasTime);
|
||||
}
|
||||
return timestamp;
|
||||
}
|
||||
export function parseDate(date) {
|
||||
return updateFormatted({
|
||||
date: '',
|
||||
time: '',
|
||||
year: date.getFullYear(),
|
||||
month: date.getMonth() + 1,
|
||||
day: date.getDate(),
|
||||
weekday: date.getDay(),
|
||||
hour: date.getHours(),
|
||||
minute: date.getMinutes(),
|
||||
hasDay: true,
|
||||
hasTime: true,
|
||||
past: false,
|
||||
present: true,
|
||||
future: false
|
||||
});
|
||||
}
|
||||
export function getDayIdentifier(timestamp) {
|
||||
return timestamp.year * 10000 + timestamp.month * 100 + timestamp.day;
|
||||
}
|
||||
export function getTimeIdentifier(timestamp) {
|
||||
return timestamp.hour * 100 + timestamp.minute;
|
||||
}
|
||||
export function updateRelative(timestamp, now) {
|
||||
var time = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
||||
|
||||
var a = getDayIdentifier(now);
|
||||
var b = getDayIdentifier(timestamp);
|
||||
var present = a === b;
|
||||
if (timestamp.hasTime && time && present) {
|
||||
a = getTimeIdentifier(now);
|
||||
b = getTimeIdentifier(timestamp);
|
||||
present = a === b;
|
||||
}
|
||||
timestamp.past = b < a;
|
||||
timestamp.present = present;
|
||||
timestamp.future = b > a;
|
||||
return timestamp;
|
||||
}
|
||||
export function updateMinutes(timestamp, minutes, now) {
|
||||
timestamp.hasTime = true;
|
||||
timestamp.hour = Math.floor(minutes / MINUTES_IN_HOUR);
|
||||
timestamp.minute = minutes % MINUTES_IN_HOUR;
|
||||
timestamp.time = getTime(timestamp);
|
||||
if (now) {
|
||||
updateRelative(timestamp, now, true);
|
||||
}
|
||||
return timestamp;
|
||||
}
|
||||
export function updateWeekday(timestamp) {
|
||||
timestamp.weekday = getWeekday(timestamp);
|
||||
return timestamp;
|
||||
}
|
||||
export function updateFormatted(timestamp) {
|
||||
timestamp.time = getTime(timestamp);
|
||||
timestamp.date = getDate(timestamp);
|
||||
return timestamp;
|
||||
}
|
||||
export function getWeekday(timestamp) {
|
||||
if (timestamp.hasDay) {
|
||||
var _ = Math.floor;
|
||||
var k = timestamp.day;
|
||||
var m = (timestamp.month + 9) % MONTH_MAX + 1;
|
||||
var C = _(timestamp.year / 100);
|
||||
var Y = timestamp.year % 100 - (timestamp.month <= 2 ? 1 : 0);
|
||||
return ((k + _(2.6 * m - 0.2) - 2 * C + Y + _(Y / 4) + _(C / 4)) % 7 + 7) % 7;
|
||||
}
|
||||
return timestamp.weekday;
|
||||
}
|
||||
export function isLeapYear(year) {
|
||||
return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
|
||||
}
|
||||
export function daysInMonth(year, month) {
|
||||
return isLeapYear(year) ? DAYS_IN_MONTH_LEAP[month] : DAYS_IN_MONTH[month];
|
||||
}
|
||||
export function copyTimestamp(timestamp) {
|
||||
var date = timestamp.date,
|
||||
time = timestamp.time,
|
||||
year = timestamp.year,
|
||||
month = timestamp.month,
|
||||
day = timestamp.day,
|
||||
weekday = timestamp.weekday,
|
||||
hour = timestamp.hour,
|
||||
minute = timestamp.minute,
|
||||
hasDay = timestamp.hasDay,
|
||||
hasTime = timestamp.hasTime,
|
||||
past = timestamp.past,
|
||||
present = timestamp.present,
|
||||
future = timestamp.future;
|
||||
|
||||
return { date: date, time: time, year: year, month: month, day: day, weekday: weekday, hour: hour, minute: minute, hasDay: hasDay, hasTime: hasTime, past: past, present: present, future: future };
|
||||
}
|
||||
export function padNumber(x, length) {
|
||||
var padded = String(x);
|
||||
while (padded.length < length) {
|
||||
padded = '0' + padded;
|
||||
}
|
||||
return padded;
|
||||
}
|
||||
export function getDate(timestamp) {
|
||||
var str = padNumber(timestamp.year, 4) + '-' + padNumber(timestamp.month, 2);
|
||||
if (timestamp.hasDay) str += '-' + padNumber(timestamp.day, 2);
|
||||
return str;
|
||||
}
|
||||
export function getTime(timestamp) {
|
||||
if (!timestamp.hasTime) {
|
||||
return '';
|
||||
}
|
||||
return padNumber(timestamp.hour, 2) + ':' + padNumber(timestamp.minute, 2);
|
||||
}
|
||||
export function nextMinutes(timestamp, minutes) {
|
||||
timestamp.minute += minutes;
|
||||
while (timestamp.minute > MINUTES_IN_HOUR) {
|
||||
timestamp.minute -= MINUTES_IN_HOUR;
|
||||
timestamp.hour++;
|
||||
if (timestamp.hour >= HOURS_IN_DAY) {
|
||||
nextDay(timestamp);
|
||||
timestamp.hour = FIRST_HOUR;
|
||||
}
|
||||
}
|
||||
return timestamp;
|
||||
}
|
||||
export function nextDay(timestamp) {
|
||||
timestamp.day++;
|
||||
timestamp.weekday = (timestamp.weekday + 1) % DAYS_IN_WEEK;
|
||||
if (timestamp.day > DAYS_IN_MONTH_MIN && timestamp.day > daysInMonth(timestamp.year, timestamp.month)) {
|
||||
timestamp.day = DAY_MIN;
|
||||
timestamp.month++;
|
||||
if (timestamp.month > MONTH_MAX) {
|
||||
timestamp.month = MONTH_MIN;
|
||||
timestamp.year++;
|
||||
}
|
||||
}
|
||||
return timestamp;
|
||||
}
|
||||
export function prevDay(timestamp) {
|
||||
timestamp.day--;
|
||||
timestamp.weekday = (timestamp.weekday + 6) % DAYS_IN_WEEK;
|
||||
if (timestamp.day < DAY_MIN) {
|
||||
timestamp.month--;
|
||||
if (timestamp.month < MONTH_MIN) {
|
||||
timestamp.year--;
|
||||
timestamp.month = MONTH_MAX;
|
||||
}
|
||||
timestamp.day = daysInMonth(timestamp.year, timestamp.month);
|
||||
}
|
||||
return timestamp;
|
||||
}
|
||||
export function relativeDays(timestamp) {
|
||||
var mover = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : nextDay;
|
||||
var days = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
||||
|
||||
while (--days >= 0) {
|
||||
mover(timestamp);
|
||||
}return timestamp;
|
||||
}
|
||||
export function findWeekday(timestamp, weekday) {
|
||||
var mover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : nextDay;
|
||||
var maxDays = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 6;
|
||||
|
||||
while (timestamp.weekday !== weekday && --maxDays >= 0) {
|
||||
mover(timestamp);
|
||||
}return timestamp;
|
||||
}
|
||||
export function getWeekdaySkips(weekdays) {
|
||||
var skips = [1, 1, 1, 1, 1, 1, 1];
|
||||
var filled = [0, 0, 0, 0, 0, 0, 0];
|
||||
for (var i = 0; i < weekdays.length; i++) {
|
||||
filled[weekdays[i]] = 1;
|
||||
}
|
||||
for (var k = 0; k < DAYS_IN_WEEK; k++) {
|
||||
var skip = 1;
|
||||
for (var j = 1; j < DAYS_IN_WEEK; j++) {
|
||||
var next = (k + j) % DAYS_IN_WEEK;
|
||||
if (filled[next]) {
|
||||
break;
|
||||
}
|
||||
skip++;
|
||||
}
|
||||
skips[k] = filled[k] * skip;
|
||||
}
|
||||
return skips;
|
||||
}
|
||||
export function createDayList(start, end, now, weekdaySkips) {
|
||||
var max = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 42;
|
||||
var min = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;
|
||||
|
||||
var stop = getDayIdentifier(end);
|
||||
var days = [];
|
||||
var current = copyTimestamp(start);
|
||||
var currentIdentifier = 0;
|
||||
var stopped = currentIdentifier === stop;
|
||||
if (stop < getDayIdentifier(start)) {
|
||||
return days;
|
||||
}
|
||||
while ((!stopped || days.length < min) && days.length < max) {
|
||||
currentIdentifier = getDayIdentifier(current);
|
||||
stopped = stopped || currentIdentifier === stop;
|
||||
if (weekdaySkips[current.weekday] === 0) {
|
||||
current = nextDay(current);
|
||||
continue;
|
||||
}
|
||||
var day = copyTimestamp(current);
|
||||
updateFormatted(day);
|
||||
updateRelative(day, now);
|
||||
days.push(day);
|
||||
current = relativeDays(current, nextDay, weekdaySkips[current.weekday]);
|
||||
}
|
||||
return days;
|
||||
}
|
||||
export function createIntervalList(timestamp, first, minutes, count, now) {
|
||||
var intervals = [];
|
||||
for (var i = 0; i < count; i++) {
|
||||
var mins = (first + i) * minutes;
|
||||
var int = copyTimestamp(timestamp);
|
||||
intervals.push(updateMinutes(int, mins, now));
|
||||
}
|
||||
return intervals;
|
||||
}
|
||||
export function createNativeLocaleFormatter(locale, getOptions) {
|
||||
var emptyFormatter = function emptyFormatter(_t, _s) {
|
||||
return '';
|
||||
};
|
||||
if (typeof Intl === 'undefined' || typeof Intl.DateTimeFormat === 'undefined') {
|
||||
return emptyFormatter;
|
||||
}
|
||||
return function (timestamp, short) {
|
||||
try {
|
||||
var intlFormatter = new Intl.DateTimeFormat(locale || undefined, getOptions(timestamp, short));
|
||||
var time = padNumber(timestamp.hour, 2) + ':' + padNumber(timestamp.minute, 2);
|
||||
var date = timestamp.date;
|
||||
return intlFormatter.format(new Date(date + 'T' + time + ':00+00:00'));
|
||||
} catch (e) {
|
||||
return '';
|
||||
}
|
||||
};
|
||||
}
|
||||
//# sourceMappingURL=timestamp.js.map
|
||||
+1
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user