@fullcalendar/list
Advanced tools
+335
| /*! | ||
| FullCalendar List View Plugin v4.3.0 | ||
| Docs & License: https://fullcalendar.io/ | ||
| (c) 2019 Adam Shaw | ||
| */ | ||
| import { getAllDayHtml, isMultiDayRange, htmlEscape, FgEventRenderer, memoize, memoizeRendering, ScrollComponent, subtractInnerElHeight, sliceEventStore, intersectRanges, htmlToElement, createFormatter, createElement, buildGotoAnchorHtml, View, startOfDay, addDays, createPlugin } from '@fullcalendar/core'; | ||
| /*! ***************************************************************************** | ||
| Copyright (c) Microsoft Corporation. All rights reserved. | ||
| Licensed under the Apache License, Version 2.0 (the "License"); you may not use | ||
| this file except in compliance with the License. You may obtain a copy of the | ||
| License at http://www.apache.org/licenses/LICENSE-2.0 | ||
| THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
| KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED | ||
| WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, | ||
| MERCHANTABLITY OR NON-INFRINGEMENT. | ||
| See the Apache Version 2.0 License for specific language governing permissions | ||
| and limitations under the License. | ||
| ***************************************************************************** */ | ||
| /* global Reflect, Promise */ | ||
| var extendStatics = function(d, b) { | ||
| extendStatics = Object.setPrototypeOf || | ||
| ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || | ||
| function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; | ||
| return extendStatics(d, b); | ||
| }; | ||
| function __extends(d, b) { | ||
| extendStatics(d, b); | ||
| function __() { this.constructor = d; } | ||
| d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); | ||
| } | ||
| var ListEventRenderer = /** @class */ (function (_super) { | ||
| __extends(ListEventRenderer, _super); | ||
| function ListEventRenderer(listView) { | ||
| var _this = _super.call(this, listView.context) || this; | ||
| _this.listView = listView; | ||
| return _this; | ||
| } | ||
| ListEventRenderer.prototype.attachSegs = function (segs) { | ||
| if (!segs.length) { | ||
| this.listView.renderEmptyMessage(); | ||
| } | ||
| else { | ||
| this.listView.renderSegList(segs); | ||
| } | ||
| }; | ||
| ListEventRenderer.prototype.detachSegs = function () { | ||
| }; | ||
| // generates the HTML for a single event row | ||
| ListEventRenderer.prototype.renderSegHtml = function (seg) { | ||
| var _a = this.context, view = _a.view, theme = _a.theme; | ||
| var eventRange = seg.eventRange; | ||
| var eventDef = eventRange.def; | ||
| var eventInstance = eventRange.instance; | ||
| var eventUi = eventRange.ui; | ||
| var url = eventDef.url; | ||
| var classes = ['fc-list-item'].concat(eventUi.classNames); | ||
| var bgColor = eventUi.backgroundColor; | ||
| var timeHtml; | ||
| if (eventDef.allDay) { | ||
| timeHtml = getAllDayHtml(view); | ||
| } | ||
| else if (isMultiDayRange(eventRange.range)) { | ||
| if (seg.isStart) { | ||
| timeHtml = htmlEscape(this._getTimeText(eventInstance.range.start, seg.end, false // allDay | ||
| )); | ||
| } | ||
| else if (seg.isEnd) { | ||
| timeHtml = htmlEscape(this._getTimeText(seg.start, eventInstance.range.end, false // allDay | ||
| )); | ||
| } | ||
| else { // inner segment that lasts the whole day | ||
| timeHtml = getAllDayHtml(view); | ||
| } | ||
| } | ||
| else { | ||
| // Display the normal time text for the *event's* times | ||
| timeHtml = htmlEscape(this.getTimeText(eventRange)); | ||
| } | ||
| if (url) { | ||
| classes.push('fc-has-url'); | ||
| } | ||
| return '<tr class="' + classes.join(' ') + '">' + | ||
| (this.displayEventTime ? | ||
| '<td class="fc-list-item-time ' + theme.getClass('widgetContent') + '">' + | ||
| (timeHtml || '') + | ||
| '</td>' : | ||
| '') + | ||
| '<td class="fc-list-item-marker ' + theme.getClass('widgetContent') + '">' + | ||
| '<span class="fc-event-dot"' + | ||
| (bgColor ? | ||
| ' style="background-color:' + bgColor + '"' : | ||
| '') + | ||
| '></span>' + | ||
| '</td>' + | ||
| '<td class="fc-list-item-title ' + theme.getClass('widgetContent') + '">' + | ||
| '<a' + (url ? ' href="' + htmlEscape(url) + '"' : '') + '>' + | ||
| htmlEscape(eventDef.title || '') + | ||
| '</a>' + | ||
| '</td>' + | ||
| '</tr>'; | ||
| }; | ||
| // like "4:00am" | ||
| ListEventRenderer.prototype.computeEventTimeFormat = function () { | ||
| return { | ||
| hour: 'numeric', | ||
| minute: '2-digit', | ||
| meridiem: 'short' | ||
| }; | ||
| }; | ||
| return ListEventRenderer; | ||
| }(FgEventRenderer)); | ||
| /* | ||
| Responsible for the scroller, and forwarding event-related actions into the "grid". | ||
| */ | ||
| var ListView = /** @class */ (function (_super) { | ||
| __extends(ListView, _super); | ||
| function ListView(context, viewSpec, dateProfileGenerator, parentEl) { | ||
| var _this = _super.call(this, context, viewSpec, dateProfileGenerator, parentEl) || this; | ||
| _this.computeDateVars = memoize(computeDateVars); | ||
| _this.eventStoreToSegs = memoize(_this._eventStoreToSegs); | ||
| var eventRenderer = _this.eventRenderer = new ListEventRenderer(_this); | ||
| _this.renderContent = memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer)); | ||
| _this.el.classList.add('fc-list-view'); | ||
| var listViewClassNames = (_this.theme.getClass('listView') || '').split(' '); // wish we didn't have to do this | ||
| for (var _i = 0, listViewClassNames_1 = listViewClassNames; _i < listViewClassNames_1.length; _i++) { | ||
| var listViewClassName = listViewClassNames_1[_i]; | ||
| if (listViewClassName) { // in case input was empty string | ||
| _this.el.classList.add(listViewClassName); | ||
| } | ||
| } | ||
| _this.scroller = new ScrollComponent('hidden', // overflow x | ||
| 'auto' // overflow y | ||
| ); | ||
| _this.el.appendChild(_this.scroller.el); | ||
| _this.contentEl = _this.scroller.el; // shortcut | ||
| context.calendar.registerInteractiveComponent(_this, { | ||
| el: _this.el | ||
| // TODO: make aware that it doesn't do Hits | ||
| }); | ||
| return _this; | ||
| } | ||
| ListView.prototype.render = function (props) { | ||
| var _a = this.computeDateVars(props.dateProfile), dayDates = _a.dayDates, dayRanges = _a.dayRanges; | ||
| this.dayDates = dayDates; | ||
| this.renderContent(this.eventStoreToSegs(props.eventStore, props.eventUiBases, dayRanges)); | ||
| }; | ||
| ListView.prototype.destroy = function () { | ||
| _super.prototype.destroy.call(this); | ||
| this.renderContent.unrender(); | ||
| this.scroller.destroy(); // will remove the Grid too | ||
| this.calendar.unregisterInteractiveComponent(this); | ||
| }; | ||
| ListView.prototype.updateSize = function (isResize, viewHeight, isAuto) { | ||
| _super.prototype.updateSize.call(this, isResize, viewHeight, isAuto); | ||
| this.eventRenderer.computeSizes(isResize); | ||
| this.eventRenderer.assignSizes(isResize); | ||
| this.scroller.clear(); // sets height to 'auto' and clears overflow | ||
| if (!isAuto) { | ||
| this.scroller.setHeight(this.computeScrollerHeight(viewHeight)); | ||
| } | ||
| }; | ||
| ListView.prototype.computeScrollerHeight = function (viewHeight) { | ||
| return viewHeight - | ||
| subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller | ||
| }; | ||
| ListView.prototype._eventStoreToSegs = function (eventStore, eventUiBases, dayRanges) { | ||
| return this.eventRangesToSegs(sliceEventStore(eventStore, eventUiBases, this.props.dateProfile.activeRange, this.nextDayThreshold).fg, dayRanges); | ||
| }; | ||
| ListView.prototype.eventRangesToSegs = function (eventRanges, dayRanges) { | ||
| var segs = []; | ||
| for (var _i = 0, eventRanges_1 = eventRanges; _i < eventRanges_1.length; _i++) { | ||
| var eventRange = eventRanges_1[_i]; | ||
| segs.push.apply(segs, this.eventRangeToSegs(eventRange, dayRanges)); | ||
| } | ||
| return segs; | ||
| }; | ||
| ListView.prototype.eventRangeToSegs = function (eventRange, dayRanges) { | ||
| var _a = this, dateEnv = _a.dateEnv, nextDayThreshold = _a.nextDayThreshold; | ||
| var range = eventRange.range; | ||
| var allDay = eventRange.def.allDay; | ||
| var dayIndex; | ||
| var segRange; | ||
| var seg; | ||
| var segs = []; | ||
| for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex++) { | ||
| segRange = intersectRanges(range, dayRanges[dayIndex]); | ||
| if (segRange) { | ||
| seg = { | ||
| component: this, | ||
| eventRange: eventRange, | ||
| start: segRange.start, | ||
| end: segRange.end, | ||
| isStart: eventRange.isStart && segRange.start.valueOf() === range.start.valueOf(), | ||
| isEnd: eventRange.isEnd && segRange.end.valueOf() === range.end.valueOf(), | ||
| dayIndex: dayIndex | ||
| }; | ||
| segs.push(seg); | ||
| // detect when range won't go fully into the next day, | ||
| // and mutate the latest seg to the be the end. | ||
| if (!seg.isEnd && !allDay && | ||
| dayIndex + 1 < dayRanges.length && | ||
| range.end < | ||
| dateEnv.add(dayRanges[dayIndex + 1].start, nextDayThreshold)) { | ||
| seg.end = range.end; | ||
| seg.isEnd = true; | ||
| break; | ||
| } | ||
| } | ||
| } | ||
| return segs; | ||
| }; | ||
| ListView.prototype.renderEmptyMessage = function () { | ||
| this.contentEl.innerHTML = | ||
| '<div class="fc-list-empty-wrap2">' + // TODO: try less wraps | ||
| '<div class="fc-list-empty-wrap1">' + | ||
| '<div class="fc-list-empty">' + | ||
| htmlEscape(this.opt('noEventsMessage')) + | ||
| '</div>' + | ||
| '</div>' + | ||
| '</div>'; | ||
| }; | ||
| // called by ListEventRenderer | ||
| ListView.prototype.renderSegList = function (allSegs) { | ||
| var segsByDay = this.groupSegsByDay(allSegs); // sparse array | ||
| var dayIndex; | ||
| var daySegs; | ||
| var i; | ||
| var tableEl = htmlToElement('<table class="fc-list-table ' + this.calendar.theme.getClass('tableList') + '"><tbody></tbody></table>'); | ||
| var tbodyEl = tableEl.querySelector('tbody'); | ||
| for (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) { | ||
| daySegs = segsByDay[dayIndex]; | ||
| if (daySegs) { // sparse array, so might be undefined | ||
| // append a day header | ||
| tbodyEl.appendChild(this.buildDayHeaderRow(this.dayDates[dayIndex])); | ||
| daySegs = this.eventRenderer.sortEventSegs(daySegs); | ||
| for (i = 0; i < daySegs.length; i++) { | ||
| tbodyEl.appendChild(daySegs[i].el); // append event row | ||
| } | ||
| } | ||
| } | ||
| this.contentEl.innerHTML = ''; | ||
| this.contentEl.appendChild(tableEl); | ||
| }; | ||
| // Returns a sparse array of arrays, segs grouped by their dayIndex | ||
| ListView.prototype.groupSegsByDay = function (segs) { | ||
| var segsByDay = []; // sparse array | ||
| var i; | ||
| var seg; | ||
| for (i = 0; i < segs.length; i++) { | ||
| seg = segs[i]; | ||
| (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = [])) | ||
| .push(seg); | ||
| } | ||
| return segsByDay; | ||
| }; | ||
| // generates the HTML for the day headers that live amongst the event rows | ||
| ListView.prototype.buildDayHeaderRow = function (dayDate) { | ||
| var dateEnv = this.dateEnv; | ||
| var mainFormat = createFormatter(this.opt('listDayFormat')); // TODO: cache | ||
| var altFormat = createFormatter(this.opt('listDayAltFormat')); // TODO: cache | ||
| return createElement('tr', { | ||
| className: 'fc-list-heading', | ||
| 'data-date': dateEnv.formatIso(dayDate, { omitTime: true }) | ||
| }, '<td class="' + (this.calendar.theme.getClass('tableListHeading') || | ||
| this.calendar.theme.getClass('widgetHeader')) + '" colspan="3">' + | ||
| (mainFormat ? | ||
| buildGotoAnchorHtml(this, dayDate, { 'class': 'fc-list-heading-main' }, htmlEscape(dateEnv.format(dayDate, mainFormat)) // inner HTML | ||
| ) : | ||
| '') + | ||
| (altFormat ? | ||
| buildGotoAnchorHtml(this, dayDate, { 'class': 'fc-list-heading-alt' }, htmlEscape(dateEnv.format(dayDate, altFormat)) // inner HTML | ||
| ) : | ||
| '') + | ||
| '</td>'); | ||
| }; | ||
| return ListView; | ||
| }(View)); | ||
| ListView.prototype.fgSegSelector = '.fc-list-item'; // which elements accept event actions | ||
| function computeDateVars(dateProfile) { | ||
| var dayStart = startOfDay(dateProfile.renderRange.start); | ||
| var viewEnd = dateProfile.renderRange.end; | ||
| var dayDates = []; | ||
| var dayRanges = []; | ||
| while (dayStart < viewEnd) { | ||
| dayDates.push(dayStart); | ||
| dayRanges.push({ | ||
| start: dayStart, | ||
| end: addDays(dayStart, 1) | ||
| }); | ||
| dayStart = addDays(dayStart, 1); | ||
| } | ||
| return { dayDates: dayDates, dayRanges: dayRanges }; | ||
| } | ||
| var main = createPlugin({ | ||
| views: { | ||
| list: { | ||
| class: ListView, | ||
| buttonTextKey: 'list', | ||
| listDayFormat: { month: 'long', day: 'numeric', year: 'numeric' } // like "January 1, 2016" | ||
| }, | ||
| listDay: { | ||
| type: 'list', | ||
| duration: { days: 1 }, | ||
| listDayFormat: { weekday: 'long' } // day-of-week is all we need. full date is probably in header | ||
| }, | ||
| listWeek: { | ||
| type: 'list', | ||
| duration: { weeks: 1 }, | ||
| listDayFormat: { weekday: 'long' }, | ||
| listDayAltFormat: { month: 'long', day: 'numeric', year: 'numeric' } | ||
| }, | ||
| listMonth: { | ||
| type: 'list', | ||
| duration: { month: 1 }, | ||
| listDayAltFormat: { weekday: 'long' } // day-of-week is nice-to-have | ||
| }, | ||
| listYear: { | ||
| type: 'list', | ||
| duration: { year: 1 }, | ||
| listDayAltFormat: { weekday: 'long' } // day-of-week is nice-to-have | ||
| } | ||
| } | ||
| }); | ||
| export default main; | ||
| export { ListView }; |
+44
-27
@@ -1,6 +0,1 @@ | ||
| /*! | ||
| FullCalendar List View Plugin v4.2.0 | ||
| Docs & License: https://fullcalendar.io/ | ||
| (c) 2019 Adam Shaw | ||
| */ | ||
| /* List View | ||
@@ -13,3 +8,4 @@ --------------------------------------------------------------------------------------------------*/ | ||
| height: 10px; | ||
| border-radius: 5px; } | ||
| border-radius: 5px; | ||
| } | ||
@@ -19,7 +15,9 @@ /* view wrapper */ | ||
| direction: rtl; | ||
| /* unlike core views, leverage browser RTL */ } | ||
| /* unlike core views, leverage browser RTL */ | ||
| } | ||
| .fc-list-view { | ||
| border-width: 1px; | ||
| border-style: solid; } | ||
| border-style: solid; | ||
| } | ||
@@ -29,29 +27,38 @@ /* table resets */ | ||
| table-layout: auto; | ||
| /* for shrinkwrapping cell content */ } | ||
| /* for shrinkwrapping cell content */ | ||
| } | ||
| .fc-list-table td { | ||
| border-width: 1px 0 0; | ||
| padding: 8px 14px; } | ||
| padding: 8px 14px; | ||
| } | ||
| .fc-list-table tr:first-child td { | ||
| border-top-width: 0; } | ||
| border-top-width: 0; | ||
| } | ||
| /* day headings with the list */ | ||
| .fc-list-heading { | ||
| border-bottom-width: 1px; } | ||
| border-bottom-width: 1px; | ||
| } | ||
| .fc-list-heading td { | ||
| font-weight: bold; } | ||
| font-weight: bold; | ||
| } | ||
| .fc-ltr .fc-list-heading-main { | ||
| float: left; } | ||
| float: left; | ||
| } | ||
| .fc-ltr .fc-list-heading-alt { | ||
| float: right; } | ||
| float: right; | ||
| } | ||
| .fc-rtl .fc-list-heading-main { | ||
| float: right; } | ||
| float: right; | ||
| } | ||
| .fc-rtl .fc-list-heading-alt { | ||
| float: left; } | ||
| float: left; | ||
| } | ||
@@ -61,3 +68,4 @@ /* event list items */ | ||
| cursor: pointer; | ||
| /* whole row will be clickable */ } | ||
| /* whole row will be clickable */ | ||
| } | ||
@@ -67,10 +75,13 @@ .fc-list-item-marker, | ||
| white-space: nowrap; | ||
| width: 1px; } | ||
| width: 1px; | ||
| } | ||
| /* make the dot closer to the event title */ | ||
| .fc-ltr .fc-list-item-marker { | ||
| padding-right: 0; } | ||
| padding-right: 0; | ||
| } | ||
| .fc-rtl .fc-list-item-marker { | ||
| padding-left: 0; } | ||
| padding-left: 0; | ||
| } | ||
@@ -80,7 +91,9 @@ .fc-list-item-title a { | ||
| text-decoration: none; | ||
| color: inherit; } | ||
| color: inherit; | ||
| } | ||
| .fc-list-item-title a[href]:hover { | ||
| /* hover effect only on titles with hrefs */ | ||
| text-decoration: underline; } | ||
| text-decoration: underline; | ||
| } | ||
@@ -93,3 +106,4 @@ /* message when no events */ | ||
| right: 0; | ||
| bottom: 0; } | ||
| bottom: 0; | ||
| } | ||
@@ -99,3 +113,4 @@ .fc-list-empty-wrap1 { | ||
| height: 100%; | ||
| display: table; } | ||
| display: table; | ||
| } | ||
@@ -105,6 +120,8 @@ .fc-list-empty { | ||
| vertical-align: middle; | ||
| text-align: center; } | ||
| text-align: center; | ||
| } | ||
| .fc-unthemed .fc-list-empty { | ||
| /* theme will provide own background */ | ||
| background-color: #eee; } | ||
| background-color: #eee; | ||
| } |
+11
-27
@@ -1,21 +0,14 @@ | ||
| declare module "@fullcalendar/list/ListEventRenderer" { | ||
| import { FgEventRenderer, Seg } from "@fullcalendar/core"; | ||
| import ListView from "@fullcalendar/list/ListView"; | ||
| export { ListEventRenderer as default, ListEventRenderer }; | ||
| class ListEventRenderer extends FgEventRenderer { | ||
| listView: ListView; | ||
| constructor(listView: ListView); | ||
| attachSegs(segs: Seg[]): void; | ||
| detachSegs(): void; | ||
| renderSegHtml(seg: Seg): string; | ||
| computeEventTimeFormat(): { | ||
| hour: string; | ||
| minute: string; | ||
| meridiem: string; | ||
| }; | ||
| } | ||
| // Generated by dts-bundle v0.7.3-fork.1 | ||
| // Dependencies for this module: | ||
| // ../../../../../@fullcalendar/core | ||
| declare module '@fullcalendar/list' { | ||
| import ListView from '@fullcalendar/list/ListView'; | ||
| export { ListView }; | ||
| const _default: import("@fullcalendar/core").PluginDef; | ||
| export default _default; | ||
| } | ||
| declare module "@fullcalendar/list/ListView" { | ||
| import { View, ViewProps, ScrollComponent, DateMarker, DateRange, DateProfileGenerator, ComponentContext, ViewSpec, EventUiHash, EventRenderRange, EventStore, Seg } from "@fullcalendar/core"; | ||
| declare module '@fullcalendar/list/ListView' { | ||
| import { View, ViewProps, ScrollComponent, DateMarker, DateRange, DateProfileGenerator, ComponentContext, ViewSpec, EventUiHash, EventRenderRange, EventStore, Seg } from '@fullcalendar/core'; | ||
| export { ListView as default, ListView }; | ||
@@ -26,5 +19,2 @@ class ListView extends View { | ||
| dayDates: DateMarker[]; | ||
| private computeDateVars; | ||
| private eventStoreToSegs; | ||
| private renderContent; | ||
| constructor(context: ComponentContext, viewSpec: ViewSpec, dateProfileGenerator: DateProfileGenerator, parentEl: HTMLElement); | ||
@@ -45,7 +35,1 @@ render(props: ViewProps): void; | ||
| declare module "@fullcalendar/list" { | ||
| import ListView from "@fullcalendar/list/ListView"; | ||
| export { ListView }; | ||
| const _default_9: import("@fullcalendar/core/plugin-system").PluginDef; | ||
| export default _default_9; | ||
| } |
+3
-1
| /*! | ||
| FullCalendar List View Plugin v4.2.0 | ||
| FullCalendar List View Plugin v4.3.0 | ||
| Docs & License: https://fullcalendar.io/ | ||
| (c) 2019 Adam Shaw | ||
| */ | ||
| (function (global, factory) { | ||
@@ -160,2 +161,3 @@ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core')) : | ||
| _super.prototype.destroy.call(this); | ||
| this.renderContent.unrender(); | ||
| this.scroller.destroy(); // will remove the Grid too | ||
@@ -162,0 +164,0 @@ this.calendar.unregisterInteractiveComponent(this); |
+1
-5
@@ -1,5 +0,1 @@ | ||
| /*! | ||
| FullCalendar List View Plugin v4.2.0 | ||
| Docs & License: https://fullcalendar.io/ | ||
| (c) 2019 Adam Shaw | ||
| */.fc-event-dot{display:inline-block;width:10px;height:10px;border-radius:5px}.fc-rtl .fc-list-view{direction:rtl}.fc-list-view{border-width:1px;border-style:solid}.fc .fc-list-table{table-layout:auto}.fc-list-table td{border-width:1px 0 0;padding:8px 14px}.fc-list-table tr:first-child td{border-top-width:0}.fc-list-heading{border-bottom-width:1px}.fc-list-heading td{font-weight:700}.fc-ltr .fc-list-heading-main{float:left}.fc-ltr .fc-list-heading-alt,.fc-rtl .fc-list-heading-main{float:right}.fc-rtl .fc-list-heading-alt{float:left}.fc-list-item.fc-has-url{cursor:pointer}.fc-list-item-marker,.fc-list-item-time{white-space:nowrap;width:1px}.fc-ltr .fc-list-item-marker{padding-right:0}.fc-rtl .fc-list-item-marker{padding-left:0}.fc-list-item-title a{text-decoration:none;color:inherit}.fc-list-item-title a[href]:hover{text-decoration:underline}.fc-list-empty-wrap2{position:absolute;top:0;left:0;right:0;bottom:0}.fc-list-empty-wrap1{width:100%;height:100%;display:table}.fc-list-empty{display:table-cell;vertical-align:middle;text-align:center}.fc-unthemed .fc-list-empty{background-color:#eee} | ||
| .fc-event-dot{display:inline-block;width:10px;height:10px;border-radius:5px}.fc-rtl .fc-list-view{direction:rtl}.fc-list-view{border-width:1px;border-style:solid}.fc .fc-list-table{table-layout:auto}.fc-list-table td{border-width:1px 0 0;padding:8px 14px}.fc-list-table tr:first-child td{border-top-width:0}.fc-list-heading{border-bottom-width:1px}.fc-list-heading td{font-weight:700}.fc-ltr .fc-list-heading-main{float:left}.fc-ltr .fc-list-heading-alt,.fc-rtl .fc-list-heading-main{float:right}.fc-rtl .fc-list-heading-alt{float:left}.fc-list-item.fc-has-url{cursor:pointer}.fc-list-item-marker,.fc-list-item-time{white-space:nowrap;width:1px}.fc-ltr .fc-list-item-marker{padding-right:0}.fc-rtl .fc-list-item-marker{padding-left:0}.fc-list-item-title a{text-decoration:none;color:inherit}.fc-list-item-title a[href]:hover{text-decoration:underline}.fc-list-empty-wrap2{position:absolute;top:0;left:0;right:0;bottom:0}.fc-list-empty-wrap1{width:100%;height:100%;display:table}.fc-list-empty{display:table-cell;vertical-align:middle;text-align:center}.fc-unthemed .fc-list-empty{background-color:#eee} |
+2
-16
| /*! | ||
| FullCalendar List View Plugin v4.2.0 | ||
| FullCalendar List View Plugin v4.3.0 | ||
| Docs & License: https://fullcalendar.io/ | ||
| (c) 2019 Adam Shaw | ||
| */ | ||
| !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@fullcalendar/core")):"function"==typeof define&&define.amd?define(["exports","@fullcalendar/core"],t):(e=e||self,t(e.FullCalendarList={},e.FullCalendar))}(this,function(e,t){"use strict";function n(e,t){function n(){this.constructor=e}s(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}function r(e){for(var n=t.startOfDay(e.renderRange.start),r=e.renderRange.end,s=[],a=[];n<r;)s.push(n),a.push({start:n,end:t.addDays(n,1)}),n=t.addDays(n,1);return{dayDates:s,dayRanges:a}}/*! ***************************************************************************** | ||
| Copyright (c) Microsoft Corporation. All rights reserved. | ||
| Licensed under the Apache License, Version 2.0 (the "License"); you may not use | ||
| this file except in compliance with the License. You may obtain a copy of the | ||
| License at http://www.apache.org/licenses/LICENSE-2.0 | ||
| THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
| KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED | ||
| WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, | ||
| MERCHANTABLITY OR NON-INFRINGEMENT. | ||
| See the Apache Version 2.0 License for specific language governing permissions | ||
| and limitations under the License. | ||
| ***************************************************************************** */ | ||
| var s=function(e,t){return(s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},a=function(e){function r(t){var n=e.call(this,t.context)||this;return n.listView=t,n}return n(r,e),r.prototype.attachSegs=function(e){e.length?this.listView.renderSegList(e):this.listView.renderEmptyMessage()},r.prototype.detachSegs=function(){},r.prototype.renderSegHtml=function(e){var n,r=this.context,s=r.view,a=r.theme,i=e.eventRange,o=i.def,l=i.instance,d=i.ui,c=o.url,p=["fc-list-item"].concat(d.classNames),h=d.backgroundColor;return n=o.allDay?t.getAllDayHtml(s):t.isMultiDayRange(i.range)?e.isStart?t.htmlEscape(this._getTimeText(l.range.start,e.end,!1)):e.isEnd?t.htmlEscape(this._getTimeText(e.start,l.range.end,!1)):t.getAllDayHtml(s):t.htmlEscape(this.getTimeText(i)),c&&p.push("fc-has-url"),'<tr class="'+p.join(" ")+'">'+(this.displayEventTime?'<td class="fc-list-item-time '+a.getClass("widgetContent")+'">'+(n||"")+"</td>":"")+'<td class="fc-list-item-marker '+a.getClass("widgetContent")+'"><span class="fc-event-dot"'+(h?' style="background-color:'+h+'"':"")+'></span></td><td class="fc-list-item-title '+a.getClass("widgetContent")+'"><a'+(c?' href="'+t.htmlEscape(c)+'"':"")+">"+t.htmlEscape(o.title||"")+"</a></td></tr>"},r.prototype.computeEventTimeFormat=function(){return{hour:"numeric",minute:"2-digit",meridiem:"short"}},r}(t.FgEventRenderer),i=function(e){function s(n,s,i,o){var l=e.call(this,n,s,i,o)||this;l.computeDateVars=t.memoize(r),l.eventStoreToSegs=t.memoize(l._eventStoreToSegs);var d=l.eventRenderer=new a(l);l.renderContent=t.memoizeRendering(d.renderSegs.bind(d),d.unrender.bind(d)),l.el.classList.add("fc-list-view");for(var c=(l.theme.getClass("listView")||"").split(" "),p=0,h=c;p<h.length;p++){var u=h[p];u&&l.el.classList.add(u)}return l.scroller=new t.ScrollComponent("hidden","auto"),l.el.appendChild(l.scroller.el),l.contentEl=l.scroller.el,n.calendar.registerInteractiveComponent(l,{el:l.el}),l}return n(s,e),s.prototype.render=function(e){var t=this.computeDateVars(e.dateProfile),n=t.dayDates,r=t.dayRanges;this.dayDates=n,this.renderContent(this.eventStoreToSegs(e.eventStore,e.eventUiBases,r))},s.prototype.destroy=function(){e.prototype.destroy.call(this),this.scroller.destroy(),this.calendar.unregisterInteractiveComponent(this)},s.prototype.updateSize=function(t,n,r){e.prototype.updateSize.call(this,t,n,r),this.eventRenderer.computeSizes(t),this.eventRenderer.assignSizes(t),this.scroller.clear(),r||this.scroller.setHeight(this.computeScrollerHeight(n))},s.prototype.computeScrollerHeight=function(e){return e-t.subtractInnerElHeight(this.el,this.scroller.el)},s.prototype._eventStoreToSegs=function(e,n,r){return this.eventRangesToSegs(t.sliceEventStore(e,n,this.props.dateProfile.activeRange,this.nextDayThreshold).fg,r)},s.prototype.eventRangesToSegs=function(e,t){for(var n=[],r=0,s=e;r<s.length;r++){var a=s[r];n.push.apply(n,this.eventRangeToSegs(a,t))}return n},s.prototype.eventRangeToSegs=function(e,n){var r,s,a,i=this,o=i.dateEnv,l=i.nextDayThreshold,d=e.range,c=e.def.allDay,p=[];for(r=0;r<n.length;r++)if((s=t.intersectRanges(d,n[r]))&&(a={component:this,eventRange:e,start:s.start,end:s.end,isStart:e.isStart&&s.start.valueOf()===d.start.valueOf(),isEnd:e.isEnd&&s.end.valueOf()===d.end.valueOf(),dayIndex:r},p.push(a),!a.isEnd&&!c&&r+1<n.length&&d.end<o.add(n[r+1].start,l))){a.end=d.end,a.isEnd=!0;break}return p},s.prototype.renderEmptyMessage=function(){this.contentEl.innerHTML='<div class="fc-list-empty-wrap2"><div class="fc-list-empty-wrap1"><div class="fc-list-empty">'+t.htmlEscape(this.opt("noEventsMessage"))+"</div></div></div>"},s.prototype.renderSegList=function(e){var n,r,s,a=this.groupSegsByDay(e),i=t.htmlToElement('<table class="fc-list-table '+this.calendar.theme.getClass("tableList")+'"><tbody></tbody></table>'),o=i.querySelector("tbody");for(n=0;n<a.length;n++)if(r=a[n])for(o.appendChild(this.buildDayHeaderRow(this.dayDates[n])),r=this.eventRenderer.sortEventSegs(r),s=0;s<r.length;s++)o.appendChild(r[s].el);this.contentEl.innerHTML="",this.contentEl.appendChild(i)},s.prototype.groupSegsByDay=function(e){var t,n,r=[];for(t=0;t<e.length;t++)n=e[t],(r[n.dayIndex]||(r[n.dayIndex]=[])).push(n);return r},s.prototype.buildDayHeaderRow=function(e){var n=this.dateEnv,r=t.createFormatter(this.opt("listDayFormat")),s=t.createFormatter(this.opt("listDayAltFormat"));return t.createElement("tr",{className:"fc-list-heading","data-date":n.formatIso(e,{omitTime:!0})},'<td class="'+(this.calendar.theme.getClass("tableListHeading")||this.calendar.theme.getClass("widgetHeader"))+'" colspan="3">'+(r?t.buildGotoAnchorHtml(this,e,{class:"fc-list-heading-main"},t.htmlEscape(n.format(e,r))):"")+(s?t.buildGotoAnchorHtml(this,e,{class:"fc-list-heading-alt"},t.htmlEscape(n.format(e,s))):"")+"</td>")},s}(t.View);i.prototype.fgSegSelector=".fc-list-item";var o=t.createPlugin({views:{list:{class:i,buttonTextKey:"list",listDayFormat:{month:"long",day:"numeric",year:"numeric"}},listDay:{type:"list",duration:{days:1},listDayFormat:{weekday:"long"}},listWeek:{type:"list",duration:{weeks:1},listDayFormat:{weekday:"long"},listDayAltFormat:{month:"long",day:"numeric",year:"numeric"}},listMonth:{type:"list",duration:{month:1},listDayAltFormat:{weekday:"long"}},listYear:{type:"list",duration:{year:1},listDayAltFormat:{weekday:"long"}}}});e.ListView=i,e.default=o,Object.defineProperty(e,"__esModule",{value:!0})}); | ||
| !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@fullcalendar/core")):"function"==typeof define&&define.amd?define(["exports","@fullcalendar/core"],t):t((e=e||self).FullCalendarList={},e.FullCalendar)}(this,function(e,t){"use strict";var n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function r(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var s=function(e){function n(t){var n=e.call(this,t.context)||this;return n.listView=t,n}return r(n,e),n.prototype.attachSegs=function(e){e.length?this.listView.renderSegList(e):this.listView.renderEmptyMessage()},n.prototype.detachSegs=function(){},n.prototype.renderSegHtml=function(e){var n,r=this.context,s=r.view,a=r.theme,i=e.eventRange,o=i.def,l=i.instance,d=i.ui,c=o.url,p=["fc-list-item"].concat(d.classNames),h=d.backgroundColor;return n=o.allDay?t.getAllDayHtml(s):t.isMultiDayRange(i.range)?e.isStart?t.htmlEscape(this._getTimeText(l.range.start,e.end,!1)):e.isEnd?t.htmlEscape(this._getTimeText(e.start,l.range.end,!1)):t.getAllDayHtml(s):t.htmlEscape(this.getTimeText(i)),c&&p.push("fc-has-url"),'<tr class="'+p.join(" ")+'">'+(this.displayEventTime?'<td class="fc-list-item-time '+a.getClass("widgetContent")+'">'+(n||"")+"</td>":"")+'<td class="fc-list-item-marker '+a.getClass("widgetContent")+'"><span class="fc-event-dot"'+(h?' style="background-color:'+h+'"':"")+'></span></td><td class="fc-list-item-title '+a.getClass("widgetContent")+'"><a'+(c?' href="'+t.htmlEscape(c)+'"':"")+">"+t.htmlEscape(o.title||"")+"</a></td></tr>"},n.prototype.computeEventTimeFormat=function(){return{hour:"numeric",minute:"2-digit",meridiem:"short"}},n}(t.FgEventRenderer),a=function(e){function n(n,r,a,o){var l=e.call(this,n,r,a,o)||this;l.computeDateVars=t.memoize(i),l.eventStoreToSegs=t.memoize(l._eventStoreToSegs);var d=l.eventRenderer=new s(l);l.renderContent=t.memoizeRendering(d.renderSegs.bind(d),d.unrender.bind(d)),l.el.classList.add("fc-list-view");for(var c=0,p=(l.theme.getClass("listView")||"").split(" ");c<p.length;c++){var h=p[c];h&&l.el.classList.add(h)}return l.scroller=new t.ScrollComponent("hidden","auto"),l.el.appendChild(l.scroller.el),l.contentEl=l.scroller.el,n.calendar.registerInteractiveComponent(l,{el:l.el}),l}return r(n,e),n.prototype.render=function(e){var t=this.computeDateVars(e.dateProfile),n=t.dayDates,r=t.dayRanges;this.dayDates=n,this.renderContent(this.eventStoreToSegs(e.eventStore,e.eventUiBases,r))},n.prototype.destroy=function(){e.prototype.destroy.call(this),this.renderContent.unrender(),this.scroller.destroy(),this.calendar.unregisterInteractiveComponent(this)},n.prototype.updateSize=function(t,n,r){e.prototype.updateSize.call(this,t,n,r),this.eventRenderer.computeSizes(t),this.eventRenderer.assignSizes(t),this.scroller.clear(),r||this.scroller.setHeight(this.computeScrollerHeight(n))},n.prototype.computeScrollerHeight=function(e){return e-t.subtractInnerElHeight(this.el,this.scroller.el)},n.prototype._eventStoreToSegs=function(e,n,r){return this.eventRangesToSegs(t.sliceEventStore(e,n,this.props.dateProfile.activeRange,this.nextDayThreshold).fg,r)},n.prototype.eventRangesToSegs=function(e,t){for(var n=[],r=0,s=e;r<s.length;r++){var a=s[r];n.push.apply(n,this.eventRangeToSegs(a,t))}return n},n.prototype.eventRangeToSegs=function(e,n){var r,s,a,i=this.dateEnv,o=this.nextDayThreshold,l=e.range,d=e.def.allDay,c=[];for(r=0;r<n.length;r++)if((s=t.intersectRanges(l,n[r]))&&(a={component:this,eventRange:e,start:s.start,end:s.end,isStart:e.isStart&&s.start.valueOf()===l.start.valueOf(),isEnd:e.isEnd&&s.end.valueOf()===l.end.valueOf(),dayIndex:r},c.push(a),!a.isEnd&&!d&&r+1<n.length&&l.end<i.add(n[r+1].start,o))){a.end=l.end,a.isEnd=!0;break}return c},n.prototype.renderEmptyMessage=function(){this.contentEl.innerHTML='<div class="fc-list-empty-wrap2"><div class="fc-list-empty-wrap1"><div class="fc-list-empty">'+t.htmlEscape(this.opt("noEventsMessage"))+"</div></div></div>"},n.prototype.renderSegList=function(e){var n,r,s,a=this.groupSegsByDay(e),i=t.htmlToElement('<table class="fc-list-table '+this.calendar.theme.getClass("tableList")+'"><tbody></tbody></table>'),o=i.querySelector("tbody");for(n=0;n<a.length;n++)if(r=a[n])for(o.appendChild(this.buildDayHeaderRow(this.dayDates[n])),r=this.eventRenderer.sortEventSegs(r),s=0;s<r.length;s++)o.appendChild(r[s].el);this.contentEl.innerHTML="",this.contentEl.appendChild(i)},n.prototype.groupSegsByDay=function(e){var t,n,r=[];for(t=0;t<e.length;t++)(r[(n=e[t]).dayIndex]||(r[n.dayIndex]=[])).push(n);return r},n.prototype.buildDayHeaderRow=function(e){var n=this.dateEnv,r=t.createFormatter(this.opt("listDayFormat")),s=t.createFormatter(this.opt("listDayAltFormat"));return t.createElement("tr",{className:"fc-list-heading","data-date":n.formatIso(e,{omitTime:!0})},'<td class="'+(this.calendar.theme.getClass("tableListHeading")||this.calendar.theme.getClass("widgetHeader"))+'" colspan="3">'+(r?t.buildGotoAnchorHtml(this,e,{class:"fc-list-heading-main"},t.htmlEscape(n.format(e,r))):"")+(s?t.buildGotoAnchorHtml(this,e,{class:"fc-list-heading-alt"},t.htmlEscape(n.format(e,s))):"")+"</td>")},n}(t.View);function i(e){for(var n=t.startOfDay(e.renderRange.start),r=e.renderRange.end,s=[],a=[];n<r;)s.push(n),a.push({start:n,end:t.addDays(n,1)}),n=t.addDays(n,1);return{dayDates:s,dayRanges:a}}a.prototype.fgSegSelector=".fc-list-item";var o=t.createPlugin({views:{list:{class:a,buttonTextKey:"list",listDayFormat:{month:"long",day:"numeric",year:"numeric"}},listDay:{type:"list",duration:{days:1},listDayFormat:{weekday:"long"}},listWeek:{type:"list",duration:{weeks:1},listDayFormat:{weekday:"long"},listDayAltFormat:{month:"long",day:"numeric",year:"numeric"}},listMonth:{type:"list",duration:{month:1},listDayAltFormat:{weekday:"long"}},listYear:{type:"list",duration:{year:1},listDayAltFormat:{weekday:"long"}}}});e.ListView=a,e.default=o,Object.defineProperty(e,"__esModule",{value:!0})}); |
+4
-4
| { | ||
| "name": "@fullcalendar/list", | ||
| "version": "4.3.0", | ||
| "title": "FullCalendar List View Plugin", | ||
@@ -25,10 +26,9 @@ "description": "View your events as a bulleted list", | ||
| "copyright": "2019 Adam Shaw", | ||
| "version": "4.2.0", | ||
| "releaseDate": "2019-06-02", | ||
| "peerDependencies": { | ||
| "@fullcalendar/core": "~4.2.0" | ||
| "@fullcalendar/core": "~4.3.0" | ||
| }, | ||
| "main": "main.js", | ||
| "module": "main.esm.js", | ||
| "unpkg": "main.min.js", | ||
| "types": "main.d.ts" | ||
| } | ||
| } |
| {"version":3,"file":"main.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/list/ListEventRenderer.ts","../../src/list/ListView.ts","../../src/list/main.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import {\n htmlEscape,\n FgEventRenderer,\n Seg,\n isMultiDayRange,\n getAllDayHtml\n} from '@fullcalendar/core'\nimport ListView from './ListView'\n\n\nexport default class ListEventRenderer extends FgEventRenderer {\n\n listView: ListView\n\n\n constructor(listView: ListView) {\n super(listView.context)\n\n this.listView = listView\n }\n\n\n attachSegs(segs: Seg[]) {\n if (!segs.length) {\n this.listView.renderEmptyMessage()\n } else {\n this.listView.renderSegList(segs)\n }\n }\n\n\n detachSegs() {\n }\n\n\n // generates the HTML for a single event row\n renderSegHtml(seg: Seg) {\n let { view, theme } = this.context\n let eventRange = seg.eventRange\n let eventDef = eventRange.def\n let eventInstance = eventRange.instance\n let eventUi = eventRange.ui\n let url = eventDef.url\n let classes = [ 'fc-list-item' ].concat(eventUi.classNames)\n let bgColor = eventUi.backgroundColor\n let timeHtml\n\n if (eventDef.allDay) {\n timeHtml = getAllDayHtml(view)\n } else if (isMultiDayRange(eventRange.range)) {\n if (seg.isStart) {\n timeHtml = htmlEscape(this._getTimeText(\n eventInstance.range.start,\n seg.end,\n false // allDay\n ))\n } else if (seg.isEnd) {\n timeHtml = htmlEscape(this._getTimeText(\n seg.start,\n eventInstance.range.end,\n false // allDay\n ))\n } else { // inner segment that lasts the whole day\n timeHtml = getAllDayHtml(view)\n }\n } else {\n // Display the normal time text for the *event's* times\n timeHtml = htmlEscape(this.getTimeText(eventRange))\n }\n\n if (url) {\n classes.push('fc-has-url')\n }\n\n return '<tr class=\"' + classes.join(' ') + '\">' +\n (this.displayEventTime ?\n '<td class=\"fc-list-item-time ' + theme.getClass('widgetContent') + '\">' +\n (timeHtml || '') +\n '</td>' :\n '') +\n '<td class=\"fc-list-item-marker ' + theme.getClass('widgetContent') + '\">' +\n '<span class=\"fc-event-dot\"' +\n (bgColor ?\n ' style=\"background-color:' + bgColor + '\"' :\n '') +\n '></span>' +\n '</td>' +\n '<td class=\"fc-list-item-title ' + theme.getClass('widgetContent') + '\">' +\n '<a' + (url ? ' href=\"' + htmlEscape(url) + '\"' : '') + '>' +\n htmlEscape(eventDef.title || '') +\n '</a>' +\n '</td>' +\n '</tr>'\n }\n\n\n // like \"4:00am\"\n computeEventTimeFormat() {\n return {\n hour: 'numeric',\n minute: '2-digit',\n meridiem: 'short'\n }\n }\n\n}\n","import {\n htmlToElement,\n createElement,\n htmlEscape,\n subtractInnerElHeight,\n View,\n ViewProps,\n ScrollComponent,\n DateMarker,\n addDays,\n startOfDay,\n createFormatter,\n DateRange,\n intersectRanges,\n DateProfileGenerator,\n DateProfile,\n buildGotoAnchorHtml,\n ComponentContext,\n ViewSpec,\n EventUiHash,\n EventRenderRange,\n sliceEventStore,\n EventStore,\n memoize,\n MemoizedRendering,\n memoizeRendering,\n Seg\n} from '@fullcalendar/core'\nimport ListEventRenderer from './ListEventRenderer'\n\n/*\nResponsible for the scroller, and forwarding event-related actions into the \"grid\".\n*/\nexport default class ListView extends View {\n\n scroller: ScrollComponent\n contentEl: HTMLElement\n\n dayDates: DateMarker[] // TOOD: kill this. only have it because ListEventRenderer\n\n private computeDateVars = memoize(computeDateVars)\n private eventStoreToSegs = memoize(this._eventStoreToSegs)\n private renderContent: MemoizedRendering<[Seg[]]>\n\n\n constructor(context: ComponentContext, viewSpec: ViewSpec, dateProfileGenerator: DateProfileGenerator, parentEl: HTMLElement) {\n super(context, viewSpec, dateProfileGenerator, parentEl)\n\n let eventRenderer = this.eventRenderer = new ListEventRenderer(this)\n this.renderContent = memoizeRendering(\n eventRenderer.renderSegs.bind(eventRenderer),\n eventRenderer.unrender.bind(eventRenderer)\n )\n\n this.el.classList.add('fc-list-view')\n\n let listViewClassNames = (this.theme.getClass('listView') || '').split(' ') // wish we didn't have to do this\n for (let listViewClassName of listViewClassNames) {\n if (listViewClassName) { // in case input was empty string\n this.el.classList.add(listViewClassName)\n }\n }\n\n this.scroller = new ScrollComponent(\n 'hidden', // overflow x\n 'auto' // overflow y\n )\n\n this.el.appendChild(this.scroller.el)\n this.contentEl = this.scroller.el // shortcut\n\n context.calendar.registerInteractiveComponent(this, {\n el: this.el\n // TODO: make aware that it doesn't do Hits\n })\n }\n\n\n render(props: ViewProps) {\n let { dayDates, dayRanges } = this.computeDateVars(props.dateProfile)\n this.dayDates = dayDates\n\n this.renderContent(\n this.eventStoreToSegs(props.eventStore, props.eventUiBases, dayRanges)\n )\n }\n\n\n destroy() {\n super.destroy()\n\n this.scroller.destroy() // will remove the Grid too\n\n this.calendar.unregisterInteractiveComponent(this)\n }\n\n\n updateSize(isResize, viewHeight, isAuto) {\n super.updateSize(isResize, viewHeight, isAuto)\n\n this.eventRenderer.computeSizes(isResize)\n this.eventRenderer.assignSizes(isResize)\n\n this.scroller.clear() // sets height to 'auto' and clears overflow\n\n if (!isAuto) {\n this.scroller.setHeight(this.computeScrollerHeight(viewHeight))\n }\n }\n\n\n computeScrollerHeight(viewHeight) {\n return viewHeight -\n subtractInnerElHeight(this.el, this.scroller.el) // everything that's NOT the scroller\n }\n\n\n _eventStoreToSegs(eventStore: EventStore, eventUiBases: EventUiHash, dayRanges: DateRange[]): Seg[] {\n return this.eventRangesToSegs(\n sliceEventStore(\n eventStore,\n eventUiBases,\n this.props.dateProfile.activeRange,\n this.nextDayThreshold\n ).fg,\n dayRanges\n )\n }\n\n\n eventRangesToSegs(eventRanges: EventRenderRange[], dayRanges: DateRange[]) {\n let segs = []\n\n for (let eventRange of eventRanges) {\n segs.push(...this.eventRangeToSegs(eventRange, dayRanges))\n }\n\n return segs\n }\n\n\n eventRangeToSegs(eventRange: EventRenderRange, dayRanges: DateRange[]) {\n let { dateEnv, nextDayThreshold } = this\n let range = eventRange.range\n let allDay = eventRange.def.allDay\n let dayIndex\n let segRange\n let seg\n let segs = []\n\n for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex++) {\n segRange = intersectRanges(range, dayRanges[dayIndex])\n\n if (segRange) {\n seg = {\n component: this,\n eventRange,\n start: segRange.start,\n end: segRange.end,\n isStart: eventRange.isStart && segRange.start.valueOf() === range.start.valueOf(),\n isEnd: eventRange.isEnd && segRange.end.valueOf() === range.end.valueOf(),\n dayIndex: dayIndex\n }\n\n segs.push(seg)\n\n // detect when range won't go fully into the next day,\n // and mutate the latest seg to the be the end.\n if (\n !seg.isEnd && !allDay &&\n dayIndex + 1 < dayRanges.length &&\n range.end <\n dateEnv.add(\n dayRanges[dayIndex + 1].start,\n nextDayThreshold\n )\n ) {\n seg.end = range.end\n seg.isEnd = true\n break\n }\n }\n }\n\n return segs\n }\n\n\n renderEmptyMessage() {\n this.contentEl.innerHTML =\n '<div class=\"fc-list-empty-wrap2\">' + // TODO: try less wraps\n '<div class=\"fc-list-empty-wrap1\">' +\n '<div class=\"fc-list-empty\">' +\n htmlEscape(this.opt('noEventsMessage')) +\n '</div>' +\n '</div>' +\n '</div>'\n }\n\n\n // called by ListEventRenderer\n renderSegList(allSegs) {\n let segsByDay = this.groupSegsByDay(allSegs) // sparse array\n let dayIndex\n let daySegs\n let i\n let tableEl = htmlToElement('<table class=\"fc-list-table ' + this.calendar.theme.getClass('tableList') + '\"><tbody></tbody></table>')\n let tbodyEl = tableEl.querySelector('tbody')\n\n for (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) {\n daySegs = segsByDay[dayIndex]\n\n if (daySegs) { // sparse array, so might be undefined\n\n // append a day header\n tbodyEl.appendChild(this.buildDayHeaderRow(this.dayDates[dayIndex]))\n\n daySegs = this.eventRenderer.sortEventSegs(daySegs)\n\n for (i = 0; i < daySegs.length; i++) {\n tbodyEl.appendChild(daySegs[i].el) // append event row\n }\n }\n }\n\n this.contentEl.innerHTML = ''\n this.contentEl.appendChild(tableEl)\n }\n\n\n // Returns a sparse array of arrays, segs grouped by their dayIndex\n groupSegsByDay(segs) {\n let segsByDay = [] // sparse array\n let i\n let seg\n\n for (i = 0; i < segs.length; i++) {\n seg = segs[i];\n (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = []))\n .push(seg)\n }\n\n return segsByDay\n }\n\n\n // generates the HTML for the day headers that live amongst the event rows\n buildDayHeaderRow(dayDate) {\n let { dateEnv } = this\n let mainFormat = createFormatter(this.opt('listDayFormat')) // TODO: cache\n let altFormat = createFormatter(this.opt('listDayAltFormat')) // TODO: cache\n\n return createElement('tr', {\n className: 'fc-list-heading',\n 'data-date': dateEnv.formatIso(dayDate, { omitTime: true })\n }, '<td class=\"' + (\n this.calendar.theme.getClass('tableListHeading') ||\n this.calendar.theme.getClass('widgetHeader')\n ) + '\" colspan=\"3\">' +\n (mainFormat ?\n buildGotoAnchorHtml(\n this,\n dayDate,\n { 'class': 'fc-list-heading-main' },\n htmlEscape(dateEnv.format(dayDate, mainFormat)) // inner HTML\n ) :\n '') +\n (altFormat ?\n buildGotoAnchorHtml(\n this,\n dayDate,\n { 'class': 'fc-list-heading-alt' },\n htmlEscape(dateEnv.format(dayDate, altFormat)) // inner HTML\n ) :\n '') +\n '</td>') as HTMLTableRowElement\n }\n\n}\n\nListView.prototype.fgSegSelector = '.fc-list-item' // which elements accept event actions\n\n\nfunction computeDateVars(dateProfile: DateProfile) {\n let dayStart = startOfDay(dateProfile.renderRange.start)\n let viewEnd = dateProfile.renderRange.end\n let dayDates: DateMarker[] = []\n let dayRanges: DateRange[] = []\n\n while (dayStart < viewEnd) {\n\n dayDates.push(dayStart)\n\n dayRanges.push({\n start: dayStart,\n end: addDays(dayStart, 1)\n })\n\n dayStart = addDays(dayStart, 1)\n }\n\n return { dayDates, dayRanges }\n}\n","import { createPlugin } from '@fullcalendar/core'\nimport ListView from './ListView'\n\nexport { ListView }\n\nexport default createPlugin({\n views: {\n\n list: {\n class: ListView,\n buttonTextKey: 'list', // what to lookup in locale files\n listDayFormat: { month: 'long', day: 'numeric', year: 'numeric' } // like \"January 1, 2016\"\n },\n\n listDay: {\n type: 'list',\n duration: { days: 1 },\n listDayFormat: { weekday: 'long' } // day-of-week is all we need. full date is probably in header\n },\n\n listWeek: {\n type: 'list',\n duration: { weeks: 1 },\n listDayFormat: { weekday: 'long' }, // day-of-week is more important\n listDayAltFormat: { month: 'long', day: 'numeric', year: 'numeric' }\n },\n\n listMonth: {\n type: 'list',\n duration: { month: 1 },\n listDayAltFormat: { weekday: 'long' } // day-of-week is nice-to-have\n },\n\n listYear: {\n type: 'list',\n duration: { year: 1 },\n listDayAltFormat: { weekday: 'long' } // day-of-week is nice-to-have\n }\n\n }\n})\n"],"names":["tslib_1.__extends","getAllDayHtml","isMultiDayRange","htmlEscape","FgEventRenderer","memoize","memoizeRendering","ScrollComponent","subtractInnerElHeight","sliceEventStore","intersectRanges","htmlToElement","createFormatter","createElement","buildGotoAnchorHtml","View","startOfDay","addDays","createPlugin"],"mappings":"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"} |
789
64.72%43306
-31.12%