vuetify eingebunden + erster Versuch Combobox

This commit is contained in:
2019-04-17 15:58:15 +02:00
parent 24642ca1a8
commit 56f4a3f940
1846 changed files with 219701 additions and 53848 deletions
+66
View File
@@ -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
@@ -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":""}
@@ -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
File diff suppressed because one or more lines are too long
+56
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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":""}