diff options
Diffstat (limited to 'library/fullcalendar/packages/list')
-rw-r--r-- | library/fullcalendar/packages/list/LICENSE.txt | 20 | ||||
-rw-r--r-- | library/fullcalendar/packages/list/README.md | 8 | ||||
-rw-r--r-- | library/fullcalendar/packages/list/main.css | 71 | ||||
-rw-r--r-- | library/fullcalendar/packages/list/main.d.ts | 36 | ||||
-rw-r--r-- | library/fullcalendar/packages/list/main.esm.js | 348 | ||||
-rw-r--r-- | library/fullcalendar/packages/list/main.js | 111 | ||||
-rw-r--r-- | library/fullcalendar/packages/list/main.min.css | 6 | ||||
-rw-r--r-- | library/fullcalendar/packages/list/main.min.js | 18 | ||||
-rw-r--r-- | library/fullcalendar/packages/list/package.json | 33 |
9 files changed, 555 insertions, 96 deletions
diff --git a/library/fullcalendar/packages/list/LICENSE.txt b/library/fullcalendar/packages/list/LICENSE.txt new file mode 100644 index 000000000..2149cfbef --- /dev/null +++ b/library/fullcalendar/packages/list/LICENSE.txt @@ -0,0 +1,20 @@ +Copyright (c) 2019 Adam Shaw + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/library/fullcalendar/packages/list/README.md b/library/fullcalendar/packages/list/README.md new file mode 100644 index 000000000..1122d7f9d --- /dev/null +++ b/library/fullcalendar/packages/list/README.md @@ -0,0 +1,8 @@ + +# FullCalendar List View Plugin + +View your events as a bulleted list + +[View the docs »](https://fullcalendar.io/docs/list-view) + +This package was created from the [FullCalendar monorepo »](https://github.com/fullcalendar/fullcalendar) diff --git a/library/fullcalendar/packages/list/main.css b/library/fullcalendar/packages/list/main.css index eac305505..6af9bb70c 100644 --- a/library/fullcalendar/packages/list/main.css +++ b/library/fullcalendar/packages/list/main.css @@ -1,8 +1,3 @@ -/*! -FullCalendar List View Plugin v4.0.2 -Docs & License: https://fullcalendar.io/ -(c) 2019 Adam Shaw -*/ /* List View --------------------------------------------------------------------------------------------------*/ /* possibly reusable */ @@ -10,73 +5,91 @@ Docs & License: https://fullcalendar.io/ display: inline-block; width: 10px; height: 10px; - border-radius: 5px; } + border-radius: 5px; +} /* view wrapper */ .fc-rtl .fc-list-view { 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; +} /* table resets */ .fc .fc-list-table { 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; +} /* event list items */ .fc-list-item.fc-has-url { cursor: pointer; - /* whole row will be clickable */ } + /* whole row will be clickable */ +} .fc-list-item-marker, .fc-list-item-time { 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; +} .fc-list-item-title a { /* every event title cell has an <a> tag */ 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; +} /* message when no events */ .fc-list-empty-wrap2 { @@ -84,18 +97,22 @@ Docs & License: https://fullcalendar.io/ top: 0; left: 0; right: 0; - bottom: 0; } + bottom: 0; +} .fc-list-empty-wrap1 { width: 100%; height: 100%; - display: table; } + display: table; +} .fc-list-empty { display: table-cell; 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; +} diff --git a/library/fullcalendar/packages/list/main.d.ts b/library/fullcalendar/packages/list/main.d.ts new file mode 100644 index 000000000..ecbb49679 --- /dev/null +++ b/library/fullcalendar/packages/list/main.d.ts @@ -0,0 +1,36 @@ +// 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, ComponentContext, EventUiHash, EventRenderRange, EventStore, Seg, ViewSpec } from '@fullcalendar/core'; + export { ListView as default, ListView }; + class ListView extends View { + scroller: ScrollComponent; + contentEl: HTMLElement; + dayDates: DateMarker[]; + constructor(viewSpec: ViewSpec, parentEl: HTMLElement); + firstContext(context: ComponentContext): void; + render(props: ViewProps, context: ComponentContext): void; + destroy(): void; + _renderSkeleton(context: ComponentContext): void; + _unrenderSkeleton(): void; + updateSize(isResize: any, viewHeight: any, isAuto: any): void; + computeScrollerHeight(viewHeight: any): number; + _eventStoreToSegs(eventStore: EventStore, eventUiBases: EventUiHash, dayRanges: DateRange[]): Seg[]; + eventRangesToSegs(eventRanges: EventRenderRange[], dayRanges: DateRange[]): any[]; + eventRangeToSegs(eventRange: EventRenderRange, dayRanges: DateRange[]): any[]; + renderEmptyMessage(): void; + renderSegList(allSegs: any): void; + groupSegsByDay(segs: any): any[]; + buildDayHeaderRow(dayDate: any): HTMLTableRowElement; + } +} + diff --git a/library/fullcalendar/packages/list/main.esm.js b/library/fullcalendar/packages/list/main.esm.js new file mode 100644 index 000000000..a03226977 --- /dev/null +++ b/library/fullcalendar/packages/list/main.esm.js @@ -0,0 +1,348 @@ +/*! +FullCalendar List View Plugin v4.4.2 +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.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
+/* 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) || 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, theme = _a.theme, options = _a.options; + 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(options); + } + 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(options); + } + } + 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(viewSpec, parentEl) { + var _this = _super.call(this, viewSpec, parentEl) || this; + _this.computeDateVars = memoize(computeDateVars); + _this.eventStoreToSegs = memoize(_this._eventStoreToSegs); + _this.renderSkeleton = memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton); + var eventRenderer = _this.eventRenderer = new ListEventRenderer(_this); + _this.renderContent = memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [_this.renderSkeleton]); + return _this; + } + ListView.prototype.firstContext = function (context) { + context.calendar.registerInteractiveComponent(this, { + el: this.el + // TODO: make aware that it doesn't do Hits + }); + }; + ListView.prototype.render = function (props, context) { + _super.prototype.render.call(this, props, context); + var _a = this.computeDateVars(props.dateProfile), dayDates = _a.dayDates, dayRanges = _a.dayRanges; + this.dayDates = dayDates; + this.renderSkeleton(context); + this.renderContent(context, this.eventStoreToSegs(props.eventStore, props.eventUiBases, dayRanges)); + }; + ListView.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.renderSkeleton.unrender(); + this.renderContent.unrender(); + this.context.calendar.unregisterInteractiveComponent(this); + }; + ListView.prototype._renderSkeleton = function (context) { + var theme = context.theme; + this.el.classList.add('fc-list-view'); + var listViewClassNames = (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 + }; + ListView.prototype._unrenderSkeleton = function () { + // TODO: remove classNames + this.scroller.destroy(); // will remove the Grid too + }; + 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.context.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.context, 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.context.options.noEventsMessage) + + '</div>' + + '</div>' + + '</div>'; + }; + // called by ListEventRenderer + ListView.prototype.renderSegList = function (allSegs) { + var theme = this.context.theme; + var segsByDay = this.groupSegsByDay(allSegs); // sparse array + var dayIndex; + var daySegs; + var i; + var tableEl = htmlToElement('<table class="fc-list-table ' + 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 _a = this.context, theme = _a.theme, dateEnv = _a.dateEnv, options = _a.options; + var mainFormat = createFormatter(options.listDayFormat); // TODO: cache + var altFormat = createFormatter(options.listDayAltFormat); // TODO: cache + return createElement('tr', { + className: 'fc-list-heading', + 'data-date': dateEnv.formatIso(dayDate, { omitTime: true }) + }, '<td class="' + (theme.getClass('tableListHeading') || + theme.getClass('widgetHeader')) + '" colspan="3">' + + (mainFormat ? + buildGotoAnchorHtml(options, dateEnv, dayDate, { 'class': 'fc-list-heading-main' }, htmlEscape(dateEnv.format(dayDate, mainFormat)) // inner HTML + ) : + '') + + (altFormat ? + buildGotoAnchorHtml(options, dateEnv, 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 }; diff --git a/library/fullcalendar/packages/list/main.js b/library/fullcalendar/packages/list/main.js index abd7c1192..84b12341e 100644 --- a/library/fullcalendar/packages/list/main.js +++ b/library/fullcalendar/packages/list/main.js @@ -1,8 +1,9 @@ /*! -FullCalendar List View Plugin v4.0.2 +FullCalendar List View Plugin v4.4.2 Docs & License: https://fullcalendar.io/ (c) 2019 Adam Shaw */ + (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core')) : typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core'], factory) : @@ -10,18 +11,18 @@ Docs & License: https://fullcalendar.io/ }(this, function (exports, core) { 'use strict'; /*! *****************************************************************************
- 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
+ Copyright (c) Microsoft Corporation.
- 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.
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted.
- See the Apache Version 2.0 License for specific language governing permissions
- and limitations under the License.
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
/* global Reflect, Promise */
@@ -41,7 +42,7 @@ Docs & License: https://fullcalendar.io/ var ListEventRenderer = /** @class */ (function (_super) { __extends(ListEventRenderer, _super); function ListEventRenderer(listView) { - var _this = _super.call(this, listView.context) || this; + var _this = _super.call(this) || this; _this.listView = listView; return _this; } @@ -57,7 +58,7 @@ Docs & License: https://fullcalendar.io/ }; // generates the HTML for a single event row ListEventRenderer.prototype.renderSegHtml = function (seg) { - var _a = this.context, view = _a.view, theme = _a.theme; + var _a = this.context, theme = _a.theme, options = _a.options; var eventRange = seg.eventRange; var eventDef = eventRange.def; var eventInstance = eventRange.instance; @@ -67,7 +68,7 @@ Docs & License: https://fullcalendar.io/ var bgColor = eventUi.backgroundColor; var timeHtml; if (eventDef.allDay) { - timeHtml = core.getAllDayHtml(view); + timeHtml = core.getAllDayHtml(options); } else if (core.isMultiDayRange(eventRange.range)) { if (seg.isStart) { @@ -79,7 +80,7 @@ Docs & License: https://fullcalendar.io/ )); } else { // inner segment that lasts the whole day - timeHtml = core.getAllDayHtml(view); + timeHtml = core.getAllDayHtml(options); } } else { @@ -125,40 +126,53 @@ Docs & License: https://fullcalendar.io/ */ var ListView = /** @class */ (function (_super) { __extends(ListView, _super); - function ListView(context, viewSpec, dateProfileGenerator, parentEl) { - var _this = _super.call(this, context, viewSpec, dateProfileGenerator, parentEl) || this; + function ListView(viewSpec, parentEl) { + var _this = _super.call(this, viewSpec, parentEl) || this; _this.computeDateVars = core.memoize(computeDateVars); _this.eventStoreToSegs = core.memoize(_this._eventStoreToSegs); + _this.renderSkeleton = core.memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton); var eventRenderer = _this.eventRenderer = new ListEventRenderer(_this); - _this.renderContent = core.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 + _this.renderContent = core.memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [_this.renderSkeleton]); + return _this; + } + ListView.prototype.firstContext = function (context) { + context.calendar.registerInteractiveComponent(this, { + el: this.el + // TODO: make aware that it doesn't do Hits + }); + }; + ListView.prototype.render = function (props, context) { + _super.prototype.render.call(this, props, context); + var _a = this.computeDateVars(props.dateProfile), dayDates = _a.dayDates, dayRanges = _a.dayRanges; + this.dayDates = dayDates; + this.renderSkeleton(context); + this.renderContent(context, this.eventStoreToSegs(props.eventStore, props.eventUiBases, dayRanges)); + }; + ListView.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.renderSkeleton.unrender(); + this.renderContent.unrender(); + this.context.calendar.unregisterInteractiveComponent(this); + }; + ListView.prototype._renderSkeleton = function (context) { + var theme = context.theme; + this.el.classList.add('fc-list-view'); + var listViewClassNames = (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.el.classList.add(listViewClassName); } } - _this.scroller = new core.ScrollComponent('hidden', // overflow x + this.scroller = new core.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)); + this.el.appendChild(this.scroller.el); + this.contentEl = this.scroller.el; // shortcut }; - ListView.prototype.destroy = function () { - _super.prototype.destroy.call(this); + ListView.prototype._unrenderSkeleton = function () { + // TODO: remove classNames 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); @@ -174,7 +188,7 @@ Docs & License: https://fullcalendar.io/ core.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller }; ListView.prototype._eventStoreToSegs = function (eventStore, eventUiBases, dayRanges) { - return this.eventRangesToSegs(core.sliceEventStore(eventStore, eventUiBases, this.props.dateProfile.activeRange, this.nextDayThreshold).fg, dayRanges); + return this.eventRangesToSegs(core.sliceEventStore(eventStore, eventUiBases, this.props.dateProfile.activeRange, this.context.nextDayThreshold).fg, dayRanges); }; ListView.prototype.eventRangesToSegs = function (eventRanges, dayRanges) { var segs = []; @@ -185,7 +199,7 @@ Docs & License: https://fullcalendar.io/ return segs; }; ListView.prototype.eventRangeToSegs = function (eventRange, dayRanges) { - var _a = this, dateEnv = _a.dateEnv, nextDayThreshold = _a.nextDayThreshold; + var _a = this.context, dateEnv = _a.dateEnv, nextDayThreshold = _a.nextDayThreshold; var range = eventRange.range; var allDay = eventRange.def.allDay; var dayIndex; @@ -224,18 +238,19 @@ Docs & License: https://fullcalendar.io/ '<div class="fc-list-empty-wrap2">' + // TODO: try less wraps '<div class="fc-list-empty-wrap1">' + '<div class="fc-list-empty">' + - core.htmlEscape(this.opt('noEventsMessage')) + + core.htmlEscape(this.context.options.noEventsMessage) + '</div>' + '</div>' + '</div>'; }; // called by ListEventRenderer ListView.prototype.renderSegList = function (allSegs) { + var theme = this.context.theme; var segsByDay = this.groupSegsByDay(allSegs); // sparse array var dayIndex; var daySegs; var i; - var tableEl = core.htmlToElement('<table class="fc-list-table ' + this.calendar.theme.getClass('tableList') + '"><tbody></tbody></table>'); + var tableEl = core.htmlToElement('<table class="fc-list-table ' + theme.getClass('tableList') + '"><tbody></tbody></table>'); var tbodyEl = tableEl.querySelector('tbody'); for (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) { daySegs = segsByDay[dayIndex]; @@ -265,20 +280,20 @@ Docs & License: https://fullcalendar.io/ }; // generates the HTML for the day headers that live amongst the event rows ListView.prototype.buildDayHeaderRow = function (dayDate) { - var dateEnv = this.dateEnv; - var mainFormat = core.createFormatter(this.opt('listDayFormat')); // TODO: cache - var altFormat = core.createFormatter(this.opt('listDayAltFormat')); // TODO: cache + var _a = this.context, theme = _a.theme, dateEnv = _a.dateEnv, options = _a.options; + var mainFormat = core.createFormatter(options.listDayFormat); // TODO: cache + var altFormat = core.createFormatter(options.listDayAltFormat); // TODO: cache return core.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">' + + }, '<td class="' + (theme.getClass('tableListHeading') || + theme.getClass('widgetHeader')) + '" colspan="3">' + (mainFormat ? - core.buildGotoAnchorHtml(this, dayDate, { 'class': 'fc-list-heading-main' }, core.htmlEscape(dateEnv.format(dayDate, mainFormat)) // inner HTML + core.buildGotoAnchorHtml(options, dateEnv, dayDate, { 'class': 'fc-list-heading-main' }, core.htmlEscape(dateEnv.format(dayDate, mainFormat)) // inner HTML ) : '') + (altFormat ? - core.buildGotoAnchorHtml(this, dayDate, { 'class': 'fc-list-heading-alt' }, core.htmlEscape(dateEnv.format(dayDate, altFormat)) // inner HTML + core.buildGotoAnchorHtml(options, dateEnv, dayDate, { 'class': 'fc-list-heading-alt' }, core.htmlEscape(dateEnv.format(dayDate, altFormat)) // inner HTML ) : '') + '</td>'); diff --git a/library/fullcalendar/packages/list/main.min.css b/library/fullcalendar/packages/list/main.min.css index 6a9c9101d..18446f442 100644 --- a/library/fullcalendar/packages/list/main.min.css +++ b/library/fullcalendar/packages/list/main.min.css @@ -1,5 +1 @@ -/*! -FullCalendar List View Plugin v4.0.2 -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}
\ No newline at end of file +.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}
\ No newline at end of file diff --git a/library/fullcalendar/packages/list/main.min.js b/library/fullcalendar/packages/list/main.min.js index 3310229fa..a765dd139 100644 --- a/library/fullcalendar/packages/list/main.min.js +++ b/library/fullcalendar/packages/list/main.min.js @@ -1,20 +1,6 @@ /*! -FullCalendar List View Plugin v4.0.2 +FullCalendar List View Plugin v4.4.2 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})});
\ No newline at end of file +!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)||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.theme,o=r.options,i=e.eventRange,a=i.def,l=i.instance,d=i.ui,c=a.url,p=["fc-list-item"].concat(d.classNames),h=d.backgroundColor;return n=a.allDay?t.getAllDayHtml(o):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(o):t.htmlEscape(this.getTimeText(i)),c&&p.push("fc-has-url"),'<tr class="'+p.join(" ")+'">'+(this.displayEventTime?'<td class="fc-list-item-time '+s.getClass("widgetContent")+'">'+(n||"")+"</td>":"")+'<td class="fc-list-item-marker '+s.getClass("widgetContent")+'"><span class="fc-event-dot"'+(h?' style="background-color:'+h+'"':"")+'></span></td><td class="fc-list-item-title '+s.getClass("widgetContent")+'"><a'+(c?' href="'+t.htmlEscape(c)+'"':"")+">"+t.htmlEscape(a.title||"")+"</a></td></tr>"},n.prototype.computeEventTimeFormat=function(){return{hour:"numeric",minute:"2-digit",meridiem:"short"}},n}(t.FgEventRenderer),o=function(e){function n(n,r){var o=e.call(this,n,r)||this;o.computeDateVars=t.memoize(i),o.eventStoreToSegs=t.memoize(o._eventStoreToSegs),o.renderSkeleton=t.memoizeRendering(o._renderSkeleton,o._unrenderSkeleton);var a=o.eventRenderer=new s(o);return o.renderContent=t.memoizeRendering(a.renderSegs.bind(a),a.unrender.bind(a),[o.renderSkeleton]),o}return r(n,e),n.prototype.firstContext=function(e){e.calendar.registerInteractiveComponent(this,{el:this.el})},n.prototype.render=function(t,n){e.prototype.render.call(this,t,n);var r=this.computeDateVars(t.dateProfile),s=r.dayDates,o=r.dayRanges;this.dayDates=s,this.renderSkeleton(n),this.renderContent(n,this.eventStoreToSegs(t.eventStore,t.eventUiBases,o))},n.prototype.destroy=function(){e.prototype.destroy.call(this),this.renderSkeleton.unrender(),this.renderContent.unrender(),this.context.calendar.unregisterInteractiveComponent(this)},n.prototype._renderSkeleton=function(e){var n=e.theme;this.el.classList.add("fc-list-view");for(var r=0,s=(n.getClass("listView")||"").split(" ");r<s.length;r++){var o=s[r];o&&this.el.classList.add(o)}this.scroller=new t.ScrollComponent("hidden","auto"),this.el.appendChild(this.scroller.el),this.contentEl=this.scroller.el},n.prototype._unrenderSkeleton=function(){this.scroller.destroy()},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.context.nextDayThreshold).fg,r)},n.prototype.eventRangesToSegs=function(e,t){for(var n=[],r=0,s=e;r<s.length;r++){var o=s[r];n.push.apply(n,this.eventRangeToSegs(o,t))}return n},n.prototype.eventRangeToSegs=function(e,n){var r,s,o,i=this.context,a=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]))&&(o={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(o),!o.isEnd&&!c&&r+1<n.length&&d.end<a.add(n[r+1].start,l))){o.end=d.end,o.isEnd=!0;break}return p},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.context.options.noEventsMessage)+"</div></div></div>"},n.prototype.renderSegList=function(e){var n,r,s,o=this.context.theme,i=this.groupSegsByDay(e),a=t.htmlToElement('<table class="fc-list-table '+o.getClass("tableList")+'"><tbody></tbody></table>'),l=a.querySelector("tbody");for(n=0;n<i.length;n++)if(r=i[n])for(l.appendChild(this.buildDayHeaderRow(this.dayDates[n])),r=this.eventRenderer.sortEventSegs(r),s=0;s<r.length;s++)l.appendChild(r[s].el);this.contentEl.innerHTML="",this.contentEl.appendChild(a)},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.context,r=n.theme,s=n.dateEnv,o=n.options,i=t.createFormatter(o.listDayFormat),a=t.createFormatter(o.listDayAltFormat);return t.createElement("tr",{className:"fc-list-heading","data-date":s.formatIso(e,{omitTime:!0})},'<td class="'+(r.getClass("tableListHeading")||r.getClass("widgetHeader"))+'" colspan="3">'+(i?t.buildGotoAnchorHtml(o,s,e,{class:"fc-list-heading-main"},t.htmlEscape(s.format(e,i))):"")+(a?t.buildGotoAnchorHtml(o,s,e,{class:"fc-list-heading-alt"},t.htmlEscape(s.format(e,a))):"")+"</td>")},n}(t.View);function i(e){for(var n=t.startOfDay(e.renderRange.start),r=e.renderRange.end,s=[],o=[];n<r;)s.push(n),o.push({start:n,end:t.addDays(n,1)}),n=t.addDays(n,1);return{dayDates:s,dayRanges:o}}o.prototype.fgSegSelector=".fc-list-item";var a=t.createPlugin({views:{list:{class:o,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=o,e.default=a,Object.defineProperty(e,"__esModule",{value:!0})}));
\ No newline at end of file diff --git a/library/fullcalendar/packages/list/package.json b/library/fullcalendar/packages/list/package.json new file mode 100644 index 000000000..90b0dcde1 --- /dev/null +++ b/library/fullcalendar/packages/list/package.json @@ -0,0 +1,33 @@ +{ + "name": "@fullcalendar/list", + "version": "4.4.2", + "title": "FullCalendar List View Plugin", + "description": "View your events as a bulleted list", + "keywords": [ + "calendar", + "event", + "full-sized" + ], + "homepage": "https://fullcalendar.io/", + "docs": "https://fullcalendar.io/docs/list-view", + "bugs": "https://fullcalendar.io/reporting-bugs", + "repository": { + "type": "git", + "url": "https://github.com/fullcalendar/fullcalendar.git", + "homepage": "https://github.com/fullcalendar/fullcalendar" + }, + "license": "MIT", + "author": { + "name": "Adam Shaw", + "email": "arshaw@arshaw.com", + "url": "http://arshaw.com/" + }, + "copyright": "2019 Adam Shaw", + "peerDependencies": { + "@fullcalendar/core": "~4.4.0" + }, + "main": "main.js", + "module": "main.esm.js", + "unpkg": "main.min.js", + "types": "main.d.ts" +} |