diff --git a/controllers/total/templates/calendar.pug b/controllers/total/templates/calendar.pug new file mode 100644 index 0000000..18ab27a --- /dev/null +++ b/controllers/total/templates/calendar.pug @@ -0,0 +1,17 @@ +extends ./total.pug + +append css + link(rel='stylesheet', href=getStatic('fullcalendar/fullcalendar.css')) + +block mistake + p. + If you think there is a mistake in this calendar, feel free to send me a mail exaplaining what + are the problems so I can fix it. Thanks! + +block extrajs + script. + window.CALENDAR_URL = "#{calendarUrl}"; + script(src="/static/fullcalendar/fullcalendar.min.js") + script(src="/static/fullcalendar/locales-all.js") + script(src="/static/js/calendar.js") diff --git a/controllers/total/urls.js b/controllers/total/urls.js index 2d8b783..f014601 100644 --- a/controllers/total/urls.js +++ b/controllers/total/urls.js @@ -7,4 +7,6 @@ module.exports = [ url('/total-table-by-course', 'totalTableByCourse', 'totalTableByCourse'), url('/histogram', 'histogram', 'histogram'), url('/histogram-data', 'histogramData', 'histogramData'), + url('/calendar', 'calendar', 'calendar'), + url('/calendar-data', 'calendarData', 'calendarData'), ] diff --git a/controllers/total/views.js b/controllers/total/views.js index 70177d9..f026985 100644 --- a/controllers/total/views.js +++ b/controllers/total/views.js @@ -3,6 +3,16 @@ const cal = require('calendar'); const redirectIfNotLogged = require('auth/views').redirectIfNotLogged; const getUrl = require('create-url').getUrl; +function stdTimezoneOffset(date) { + var jan = new Date(date.getFullYear(), 0, 1); + var jul = new Date(date.getFullYear(), 6, 1); + return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset()); +} + +function isDstObserved(date) { + return date.getTimezoneOffset() < stdTimezoneOffset(date); +} + function compareStrings(a, b) { if (a < b) return -1; @@ -193,3 +203,48 @@ module.exports.histogramData = function(req, res, render, next) { }); } + +module.exports.calendar = redirectIfNotLogged('/calendar', function(req, res, render) { + res.locals.calendarUrl = getUrl('calendarData'); + render('calendar.pug'); +}); + +module.exports.calendarData = function(req, res, render) { + + if (req.session.user === undefined) { + res.status(404); + + res.setHeader('Content-Type', 'text/html'); + + res.render(config.BASE_DIR + '/templates/404.pug', res.locals, function(err, result) { + if (err) + console.log(err); + res.send(result); + }); + return; + } + + cal.getCalendar(req.session.user, new Date(2000, 1, 1), new Date(3000, 1, 1), (calendar) => { + let events = []; + + for (let event of calendar.events) { + if (isDstObserved(event.startTime)) { + event.startTime.setTime(event.startTime.getTime() + (60 * 60 * 1000)); + } + + if (isDstObserved(event.finishTime)) { + event.finishTime.setTime(event.finishTime.getTime() + (60 * 60 * 1000)); + } + + events.push({ + title: event.name, + start: event.startTime, + end: event.finishTime, + }); + } + + res.send(JSON.stringify(events)); + }); + + +} diff --git a/static/fullcalendar-4.0.0-alpha.2.zip b/static/fullcalendar-4.0.0-alpha.2.zip new file mode 100644 index 0000000..d74b01f Binary files /dev/null and b/static/fullcalendar-4.0.0-alpha.2.zip differ diff --git a/static/fullcalendar/fullcalendar.css b/static/fullcalendar/fullcalendar.css new file mode 100644 index 0000000..cbdd981 --- /dev/null +++ b/static/fullcalendar/fullcalendar.css @@ -0,0 +1,1436 @@ +/*! + * FullCalendar v4.0.0-alpha.2 + * Docs & License: https://fullcalendar.io/ + * (c) 2018 Adam Shaw + */ +.fc { + direction: ltr; + text-align: left; } + +.fc-rtl { + text-align: right; } + +body .fc { + /* extra precedence to overcome jqui */ + font-size: 1em; } + +/* Colors +--------------------------------------------------------------------------------------------------*/ +.fc-highlight { + /* when user is selecting cells */ + background: #bce8f1; + opacity: .3; } + +.fc-bgevent { + /* default look for background events */ + background: #8fdf82; + opacity: .3; } + +.fc-nonbusiness { + /* default look for non-business-hours areas */ + /* will inherit .fc-bgevent's styles */ + background: #d7d7d7; } + +/* Buttons (styled tags, normalized to work cross-browser) +--------------------------------------------------------------------------------------------------*/ +.fc button { + /* force height to include the border and padding */ + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + /* dimensions */ + margin: 0; + height: 2.1em; + padding: 0 .6em; + /* text & cursor */ + font-size: 1em; + /* normalize */ + white-space: nowrap; + cursor: pointer; } + +/* Firefox has an annoying inner border */ +.fc button::-moz-focus-inner { + margin: 0; + padding: 0; } + +.fc-state-default { + /* non-theme */ + border: 1px solid; } + +.fc-state-default.fc-corner-left { + /* non-theme */ + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } + +.fc-state-default.fc-corner-right { + /* non-theme */ + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; } + +/* icons in buttons */ +.fc button .fc-icon { + /* non-theme */ + position: relative; + top: -0.05em; + /* seems to be a good adjustment across browsers */ + margin: 0 .2em; + vertical-align: middle; } + +/* + button states + borrowed from twitter bootstrap (http://twitter.github.com/bootstrap/) +*/ +.fc-state-default { + background-color: #f5f5f5; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); + background-repeat: repeat-x; + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + color: #333; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); } + +.fc-state-hover, +.fc-state-down, +.fc-state-active, +.fc-state-disabled { + color: #333333; + background-color: #e6e6e6; } + +.fc-state-hover { + color: #333333; + text-decoration: none; + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; } + +.fc-state-down, +.fc-state-active { + background-color: #cccccc; + background-image: none; + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); } + +.fc-state-disabled { + cursor: default; + background-image: none; + opacity: 0.65; + box-shadow: none; } + +/* Buttons Groups +--------------------------------------------------------------------------------------------------*/ +.fc-button-group { + display: inline-block; } + +/* +every button that is not first in a button group should scootch over one pixel and cover the +previous button's border... +*/ +.fc .fc-button-group > * { + /* extra precedence b/c buttons have margin set to zero */ + float: left; + margin: 0 0 0 -1px; } + +.fc .fc-button-group > :first-child { + /* same */ + margin-left: 0; } + +/* Popover +--------------------------------------------------------------------------------------------------*/ +.fc-popover { + position: absolute; + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15); } + +.fc-popover .fc-header { + /* TODO: be more consistent with fc-head/fc-body */ + padding: 2px 4px; } + +.fc-popover .fc-header .fc-title { + margin: 0 2px; } + +.fc-popover .fc-header .fc-close { + cursor: pointer; } + +.fc-ltr .fc-popover .fc-header .fc-title, +.fc-rtl .fc-popover .fc-header .fc-close { + float: left; } + +.fc-rtl .fc-popover .fc-header .fc-title, +.fc-ltr .fc-popover .fc-header .fc-close { + float: right; } + +/* Misc Reusable Components +--------------------------------------------------------------------------------------------------*/ +.fc-divider { + border-style: solid; + border-width: 1px; } + +hr.fc-divider { + height: 0; + margin: 0; + padding: 0 0 2px; + /* height is unreliable across browsers, so use padding */ + border-width: 1px 0; } + +.fc-clear { + clear: both; } + +.fc-bg, +.fc-bgevent-skeleton, +.fc-highlight-skeleton, +.fc-mirror-skeleton { + /* these element should always cling to top-left/right corners */ + position: absolute; + top: 0; + left: 0; + right: 0; } + +.fc-bg { + bottom: 0; + /* strech bg to bottom edge */ } + +.fc-bg table { + height: 100%; + /* strech bg to bottom edge */ } + +/* Tables +--------------------------------------------------------------------------------------------------*/ +.fc table { + width: 100%; + box-sizing: border-box; + /* fix scrollbar issue in firefox */ + table-layout: fixed; + border-collapse: collapse; + border-spacing: 0; + font-size: 1em; + /* normalize cross-browser */ } + +.fc th { + text-align: center; } + +.fc th, +.fc td { + border-style: solid; + border-width: 1px; + padding: 0; + vertical-align: top; } + +.fc td.fc-today { + border-style: double; + /* overcome neighboring borders */ } + +/* Internal Nav Links +--------------------------------------------------------------------------------------------------*/ +a[data-goto] { + cursor: pointer; } + +a[data-goto]:hover { + text-decoration: underline; } + +/* Fake Table Rows +--------------------------------------------------------------------------------------------------*/ +.fc .fc-row { + /* extra precedence to overcome themes w/ .ui-widget-content forcing a 1px border */ + /* no visible border by default. but make available if need be (scrollbar width compensation) */ + border-style: solid; + border-width: 0; } + +.fc-row table { + /* don't put left/right border on anything within a fake row. + the outer tbody will worry about this */ + border-left: 0 hidden transparent; + border-right: 0 hidden transparent; + /* no bottom borders on rows */ + border-bottom: 0 hidden transparent; } + +.fc-row:first-child table { + border-top: 0 hidden transparent; + /* no top border on first row */ } + +/* Day Row (used within the header and the DayGrid) +--------------------------------------------------------------------------------------------------*/ +.fc-row { + position: relative; } + +.fc-row .fc-bg { + z-index: 1; } + +/* highlighting cells & background event skeleton */ +.fc-row .fc-bgevent-skeleton, +.fc-row .fc-highlight-skeleton { + bottom: 0; + /* stretch skeleton to bottom of row */ } + +.fc-row .fc-bgevent-skeleton table, +.fc-row .fc-highlight-skeleton table { + height: 100%; + /* stretch skeleton to bottom of row */ } + +.fc-row .fc-highlight-skeleton td, +.fc-row .fc-bgevent-skeleton td { + border-color: transparent; } + +.fc-row .fc-bgevent-skeleton { + z-index: 2; } + +.fc-row .fc-highlight-skeleton { + z-index: 3; } + +/* +row content (which contains day/week numbers and events) as well as "mirror" (which contains +temporary rendered events). +*/ +.fc-row .fc-content-skeleton { + position: relative; + z-index: 4; + padding-bottom: 2px; + /* matches the space above the events */ } + +.fc-row .fc-mirror-skeleton { + z-index: 5; } + +.fc .fc-row .fc-content-skeleton table, +.fc .fc-row .fc-content-skeleton td, +.fc .fc-row .fc-mirror-skeleton td { + /* see-through to the background below */ + /* extra precedence to prevent theme-provided backgrounds */ + background: none; + /* in case s are globally styled */ + border-color: transparent; } + +.fc-row .fc-content-skeleton td, +.fc-row .fc-mirror-skeleton td { + /* don't put a border between events and/or the day number */ + border-bottom: 0; } + +.fc-row .fc-content-skeleton tbody td, +.fc-row .fc-mirror-skeleton tbody td { + /* don't put a border between event cells */ + border-top: 0; } + +/* Scrolling Container +--------------------------------------------------------------------------------------------------*/ +.fc-scroller { + -webkit-overflow-scrolling: touch; } + +/* TODO: move to agenda/basic */ +.fc-scroller > .fc-day-grid, +.fc-scroller > .fc-time-grid { + position: relative; + /* re-scope all positions */ + width: 100%; + /* hack to force re-sizing this inner element when scrollbars appear/disappear */ } + +/* Global Event Styles +--------------------------------------------------------------------------------------------------*/ +.fc-event { + position: relative; + /* for resize handle and other inner positioning */ + display: block; + /* make the tag block */ + font-size: .85em; + line-height: 1.3; + border-radius: 3px; + border: 1px solid #3a87ad; + /* default BORDER color */ } + +.fc-event, +.fc-event-dot { + background-color: #3a87ad; + /* default BACKGROUND color */ } + +.fc-event, +.fc-event:hover { + color: #fff; + /* default TEXT color */ + text-decoration: none; + /* if has an href */ } + +.fc-event[href], +.fc-event.fc-draggable { + cursor: pointer; + /* give events with links and draggable events a hand mouse pointer */ } + +.fc-not-allowed, +.fc-not-allowed .fc-event { + /* to override an event's custom cursor */ + cursor: not-allowed; } + +.fc-event .fc-bg { + /* the generic .fc-bg already does position */ + z-index: 1; + background: #fff; + opacity: .25; } + +.fc-event .fc-content { + position: relative; + z-index: 2; } + +/* resizer (cursor AND touch devices) */ +.fc-event .fc-resizer { + position: absolute; + z-index: 4; } + +/* resizer (touch devices) */ +.fc-event .fc-resizer { + display: none; } + +.fc-event.fc-allow-mouse-resize .fc-resizer, +.fc-event.fc-selected .fc-resizer { + /* only show when hovering or selected (with touch) */ + display: block; } + +/* hit area */ +.fc-event.fc-selected .fc-resizer:before { + /* 40x40 touch area */ + content: ""; + position: absolute; + z-index: 9999; + /* user of this util can scope within a lower z-index */ + top: 50%; + left: 50%; + width: 40px; + height: 40px; + margin-left: -20px; + margin-top: -20px; } + +/* Event Selection (only for touch devices) +--------------------------------------------------------------------------------------------------*/ +.fc-event.fc-selected { + z-index: 9999 !important; + /* overcomes inline z-index */ + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); } + +/* Event Dragging +--------------------------------------------------------------------------------------------------*/ +.fc-event.fc-dragging.fc-selected { + box-shadow: 0 2px 7px rgba(0, 0, 0, 0.3); } + +.fc-event.fc-dragging:not(.fc-selected) { + opacity: .75; } + +/* Horizontal Events +--------------------------------------------------------------------------------------------------*/ +/* bigger touch area when selected */ +.fc-h-event.fc-selected:before { + content: ""; + position: absolute; + z-index: 3; + /* below resizers */ + top: -10px; + bottom: -10px; + left: 0; + right: 0; } + +/* events that are continuing to/from another week. kill rounded corners and butt up against edge */ +.fc-ltr .fc-h-event.fc-not-start, +.fc-rtl .fc-h-event.fc-not-end { + margin-left: 0; + border-left-width: 0; + padding-left: 1px; + /* replace the border with padding */ + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + +.fc-ltr .fc-h-event.fc-not-end, +.fc-rtl .fc-h-event.fc-not-start { + margin-right: 0; + border-right-width: 0; + padding-right: 1px; + /* replace the border with padding */ + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + +/* resizer (cursor AND touch devices) */ +/* left resizer */ +.fc-ltr .fc-h-event .fc-start-resizer, +.fc-rtl .fc-h-event .fc-end-resizer { + cursor: w-resize; + left: -1px; + /* overcome border */ } + +/* right resizer */ +.fc-ltr .fc-h-event .fc-end-resizer, +.fc-rtl .fc-h-event .fc-start-resizer { + cursor: e-resize; + right: -1px; + /* overcome border */ } + +/* resizer (mouse devices) */ +.fc-h-event.fc-allow-mouse-resize .fc-resizer { + width: 7px; + top: -1px; + /* overcome top border */ + bottom: -1px; + /* overcome bottom border */ } + +/* resizer (touch devices) */ +.fc-h-event.fc-selected .fc-resizer { + /* 8x8 little dot */ + border-radius: 4px; + border-width: 1px; + width: 6px; + height: 6px; + border-style: solid; + border-color: inherit; + background: #fff; + /* vertically center */ + top: 50%; + margin-top: -4px; } + +/* left resizer */ +.fc-ltr .fc-h-event.fc-selected .fc-start-resizer, +.fc-rtl .fc-h-event.fc-selected .fc-end-resizer { + margin-left: -4px; + /* centers the 8x8 dot on the left edge */ } + +/* right resizer */ +.fc-ltr .fc-h-event.fc-selected .fc-end-resizer, +.fc-rtl .fc-h-event.fc-selected .fc-start-resizer { + margin-right: -4px; + /* centers the 8x8 dot on the right edge */ } + +/* DayGrid events +---------------------------------------------------------------------------------------------------- +We use the full "fc-day-grid-event" class instead of using descendants because the event won't +be a descendant of the grid when it is being dragged. +*/ +.fc-day-grid-event { + margin: 1px 2px 0; + /* spacing between events and edges */ + padding: 0 1px; } + +tr:first-child > td > .fc-day-grid-event { + margin-top: 2px; + /* a little bit more space before the first event */ } + +.fc-mirror-skeleton tr:first-child > td > .fc-day-grid-event { + margin-top: 0; + /* except for mirror skeleton */ } + +.fc-day-grid-event.fc-selected:after { + content: ""; + position: absolute; + z-index: 1; + /* same z-index as fc-bg, behind text */ + /* overcome the borders */ + top: -1px; + right: -1px; + bottom: -1px; + left: -1px; + /* darkening effect */ + background: #000; + opacity: .25; } + +.fc-day-grid-event .fc-content { + /* force events to be one-line tall */ + white-space: nowrap; + overflow: hidden; } + +.fc-day-grid-event .fc-time { + font-weight: bold; } + +/* resizer (cursor devices) */ +/* left resizer */ +.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer, +.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer { + margin-left: -2px; + /* to the day cell's edge */ } + +/* right resizer */ +.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer, +.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer { + margin-right: -2px; + /* to the day cell's edge */ } + +/* Event Limiting +--------------------------------------------------------------------------------------------------*/ +/* "more" link that represents hidden events */ +a.fc-more { + margin: 1px 3px; + font-size: .85em; + cursor: pointer; + text-decoration: none; } + +a.fc-more:hover { + text-decoration: underline; } + +.fc-limited { + /* rows and cells that are hidden because of a "more" link */ + display: none; } + +/* popover that appears when "more" link is clicked */ +.fc-day-grid .fc-row { + z-index: 1; + /* make the "more" popover one higher than this */ } + +.fc-more-popover { + z-index: 2; + width: 220px; } + +.fc-more-popover .fc-event-container { + padding: 10px; } + +/* Now Indicator +--------------------------------------------------------------------------------------------------*/ +.fc-now-indicator { + position: absolute; + border: 0 solid red; } + +/* Utilities +--------------------------------------------------------------------------------------------------*/ +.fc-unselectable { + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-touch-callout: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } + +/* +TODO: more distinction between this file and common.css +*/ +/* Colors +--------------------------------------------------------------------------------------------------*/ +.fc-unthemed th, +.fc-unthemed td, +.fc-unthemed thead, +.fc-unthemed tbody, +.fc-unthemed .fc-divider, +.fc-unthemed .fc-row, +.fc-unthemed .fc-content, +.fc-unthemed .fc-popover, +.fc-unthemed .fc-list-view, +.fc-unthemed .fc-list-heading td { + border-color: #ddd; } + +.fc-unthemed .fc-popover { + background-color: #fff; } + +.fc-unthemed .fc-divider, +.fc-unthemed .fc-popover .fc-header, +.fc-unthemed .fc-list-heading td { + background: #eee; } + +.fc-unthemed .fc-popover .fc-header .fc-close { + color: #666; } + +.fc-unthemed td.fc-today { + background: #fcf8e3; } + +.fc-unthemed .fc-disabled-day { + background: #d7d7d7; + opacity: .3; } + +/* Icons (inline elements with styled text that mock arrow icons) +--------------------------------------------------------------------------------------------------*/ +.fc-icon { + display: inline-block; + height: 1em; + line-height: 1em; + font-size: 1em; + text-align: center; + overflow: hidden; + font-family: "Courier New", Courier, monospace; + /* don't allow browser text-selection */ + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +/* +Acceptable font-family overrides for individual icons: + "Arial", sans-serif + "Times New Roman", serif + +NOTE: use percentage font sizes or else old IE chokes +*/ +.fc-icon:after { + position: relative; } + +.fc-icon-left-single-arrow:after { + content: "\2039"; + font-weight: bold; + font-size: 200%; + top: -7%; } + +.fc-icon-right-single-arrow:after { + content: "\203A"; + font-weight: bold; + font-size: 200%; + top: -7%; } + +.fc-icon-left-double-arrow:after { + content: "\AB"; + font-size: 160%; + top: -7%; } + +.fc-icon-right-double-arrow:after { + content: "\BB"; + font-size: 160%; + top: -7%; } + +.fc-icon-left-triangle:after { + content: "\25C4"; + font-size: 125%; + top: 3%; } + +.fc-icon-right-triangle:after { + content: "\25BA"; + font-size: 125%; + top: 3%; } + +.fc-icon-down-triangle:after { + content: "\25BC"; + font-size: 125%; + top: 2%; } + +.fc-icon-x:after { + content: "\D7"; + font-size: 200%; + top: 6%; } + +/* Popover +--------------------------------------------------------------------------------------------------*/ +.fc-unthemed .fc-popover { + border-width: 1px; + border-style: solid; } + +.fc-unthemed .fc-popover .fc-header .fc-close { + font-size: .9em; + margin-top: 2px; } + +/* List View +--------------------------------------------------------------------------------------------------*/ +.fc-unthemed .fc-list-item:hover td { + background-color: #f5f5f5; } + +/* Colors +--------------------------------------------------------------------------------------------------*/ +.ui-widget .fc-disabled-day { + background-image: none; } + +/* Popover +--------------------------------------------------------------------------------------------------*/ +.fc-popover > .ui-widget-header + .ui-widget-content { + border-top: 0; + /* where they meet, let the header have the border */ } + +/* Global Event Styles +--------------------------------------------------------------------------------------------------*/ +.ui-widget .fc-event { + /* overpower jqui's styles on tags. TODO: more DRY */ + color: #fff; + /* default TEXT color */ + text-decoration: none; + /* if has an href */ + /* undo ui-widget-header bold */ + font-weight: normal; } + +/* TimeGrid axis running down the side (for both the all-day area and the slot area) +--------------------------------------------------------------------------------------------------*/ +.ui-widget td.fc-axis { + font-weight: normal; + /* overcome bold */ } + +/* TimeGrid Slats (lines that run horizontally) +--------------------------------------------------------------------------------------------------*/ +.fc-time-grid .fc-slats .ui-widget-content { + background: none; + /* see through to fc-bg */ } + +.fc.fc-bootstrap3 a { + text-decoration: none; } + +.fc.fc-bootstrap3 a[data-goto]:hover { + text-decoration: underline; } + +.fc-bootstrap3 hr.fc-divider { + border-color: inherit; } + +.fc-bootstrap3 .fc-today.alert { + border-radius: 0; } + +/* Popover +--------------------------------------------------------------------------------------------------*/ +.fc-bootstrap3 .fc-popover .panel-body { + padding: 0; } + +/* TimeGrid Slats (lines that run horizontally) +--------------------------------------------------------------------------------------------------*/ +.fc-bootstrap3 .fc-time-grid .fc-slats table { + /* some themes have background color. see through to slats */ + background: none; } + +.fc.fc-bootstrap4 a { + text-decoration: none; } + +.fc.fc-bootstrap4 a[data-goto]:hover { + text-decoration: underline; } + +.fc-bootstrap4 hr.fc-divider { + border-color: inherit; } + +.fc-bootstrap4 .fc-today.alert { + border-radius: 0; } + +.fc-bootstrap4 a.fc-event:not([href]):not([tabindex]) { + color: #fff; } + +.fc-bootstrap4 .fc-popover.card { + position: absolute; } + +/* Popover +--------------------------------------------------------------------------------------------------*/ +.fc-bootstrap4 .fc-popover .card-body { + padding: 0; } + +/* TimeGrid Slats (lines that run horizontally) +--------------------------------------------------------------------------------------------------*/ +.fc-bootstrap4 .fc-time-grid .fc-slats table { + /* some themes have background color. see through to slats */ + background: none; } + +/* Toolbar +--------------------------------------------------------------------------------------------------*/ +.fc-toolbar { + text-align: center; } + +.fc-toolbar.fc-header-toolbar { + margin-bottom: 1em; } + +.fc-toolbar.fc-footer-toolbar { + margin-top: 1em; } + +.fc-toolbar .fc-left { + float: left; } + +.fc-toolbar .fc-right { + float: right; } + +.fc-toolbar .fc-center { + display: inline-block; } + +/* the things within each left/right/center section */ +.fc .fc-toolbar > * > * { + /* extra precedence to override button border margins */ + float: left; + margin-left: .75em; } + +/* the first thing within each left/center/right section */ +.fc .fc-toolbar > * > :first-child { + /* extra precedence to override button border margins */ + margin-left: 0; } + +/* title text */ +.fc-toolbar h2 { + margin: 0; } + +/* button layering (for border precedence) */ +.fc-toolbar button { + position: relative; } + +.fc-toolbar .fc-state-hover, +.fc-toolbar .ui-state-hover { + z-index: 2; } + +.fc-toolbar .fc-state-down { + z-index: 3; } + +.fc-toolbar .fc-state-active, +.fc-toolbar .ui-state-active { + z-index: 4; } + +.fc-toolbar button:focus { + z-index: 5; } + +/* View Structure +--------------------------------------------------------------------------------------------------*/ +/* undo twitter bootstrap's box-sizing rules. normalizes positioning techniques */ +/* don't do this for the toolbar because we'll want bootstrap to style those buttons as some pt */ +.fc-view-container *, +.fc-view-container *:before, +.fc-view-container *:after { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; } + +.fc-view, +.fc-view > table { + /* so dragged elements can be above the view's main element */ + position: relative; + z-index: 1; } + +/* BasicView +--------------------------------------------------------------------------------------------------*/ +/* day row structure */ +.fc-basicWeek-view .fc-content-skeleton, +.fc-basicDay-view .fc-content-skeleton { + /* there may be week numbers in these views, so no padding-top */ + padding-bottom: 1em; + /* ensure a space at bottom of cell for user selecting/clicking */ } + +.fc-basic-view .fc-body .fc-row { + min-height: 4em; + /* ensure that all rows are at least this tall */ } + +/* a "rigid" row will take up a constant amount of height because content-skeleton is absolute */ +.fc-row.fc-rigid { + overflow: hidden; } + +.fc-row.fc-rigid .fc-content-skeleton { + position: absolute; + top: 0; + left: 0; + right: 0; } + +/* week and day number styling */ +.fc-day-top.fc-other-month { + opacity: 0.3; } + +.fc-basic-view .fc-week-number, +.fc-basic-view .fc-day-number { + padding: 2px; } + +.fc-basic-view th.fc-week-number, +.fc-basic-view th.fc-day-number { + padding: 0 2px; + /* column headers can't have as much v space */ } + +.fc-ltr .fc-basic-view .fc-day-top .fc-day-number { + float: right; } + +.fc-rtl .fc-basic-view .fc-day-top .fc-day-number { + float: left; } + +.fc-ltr .fc-basic-view .fc-day-top .fc-week-number { + float: left; + border-radius: 0 0 3px 0; } + +.fc-rtl .fc-basic-view .fc-day-top .fc-week-number { + float: right; + border-radius: 0 0 0 3px; } + +.fc-basic-view .fc-day-top .fc-week-number { + min-width: 1.5em; + text-align: center; + background-color: #f2f2f2; + color: #808080; } + +/* when week/day number have own column */ +.fc-basic-view td.fc-week-number { + text-align: center; } + +.fc-basic-view td.fc-week-number > * { + /* work around the way we do column resizing and ensure a minimum width */ + display: inline-block; + min-width: 1.25em; } + +/* AgendaView all-day area +--------------------------------------------------------------------------------------------------*/ +.fc-agenda-view .fc-day-grid { + position: relative; + z-index: 2; + /* so the "more.." popover will be over the time grid */ } + +.fc-agenda-view .fc-day-grid .fc-row { + min-height: 3em; + /* all-day section will never get shorter than this */ } + +.fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton { + padding-bottom: 1em; + /* give space underneath events for clicking/selecting days */ } + +/* TimeGrid axis running down the side (for both the all-day area and the slot area) +--------------------------------------------------------------------------------------------------*/ +.fc .fc-axis { + /* .fc to overcome default cell styles */ + vertical-align: middle; + padding: 0 4px; + white-space: nowrap; } + +.fc-ltr .fc-axis { + text-align: right; } + +.fc-rtl .fc-axis { + text-align: left; } + +/* TimeGrid Structure +--------------------------------------------------------------------------------------------------*/ +.fc-time-grid-container, +.fc-time-grid { + /* so slats/bg/content/etc positions get scoped within here */ + position: relative; + z-index: 1; } + +.fc-time-grid { + min-height: 100%; + /* so if height setting is 'auto', .fc-bg stretches to fill height */ } + +.fc-time-grid table { + /* don't put outer borders on slats/bg/content/etc */ + border: 0 hidden transparent; } + +.fc-time-grid > .fc-bg { + z-index: 1; } + +.fc-time-grid .fc-slats, +.fc-time-grid > hr { + /* the AgendaView injects when grid is shorter than scroller */ + position: relative; + z-index: 2; } + +.fc-time-grid .fc-content-col { + position: relative; + /* because now-indicator lives directly inside */ } + +.fc-time-grid .fc-content-skeleton { + position: absolute; + z-index: 3; + top: 0; + left: 0; + right: 0; } + +/* divs within a cell within the fc-content-skeleton */ +.fc-time-grid .fc-business-container { + position: relative; + z-index: 1; } + +.fc-time-grid .fc-bgevent-container { + position: relative; + z-index: 2; } + +.fc-time-grid .fc-highlight-container { + position: relative; + z-index: 3; } + +.fc-time-grid .fc-event-container { + position: relative; + z-index: 4; } + +.fc-time-grid .fc-now-indicator-line { + z-index: 5; } + +.fc-time-grid .fc-mirror-container { + /* also is fc-event-container */ + position: relative; + z-index: 6; } + +/* TimeGrid Slats (lines that run horizontally) +--------------------------------------------------------------------------------------------------*/ +.fc-time-grid .fc-slats td { + height: 1.5em; + border-bottom: 0; + /* each cell is responsible for its top border */ } + +.fc-time-grid .fc-slats .fc-minor td { + border-top-style: dotted; } + +/* TimeGrid Highlighting Slots +--------------------------------------------------------------------------------------------------*/ +.fc-time-grid .fc-highlight-container { + /* a div within a cell within the fc-highlight-skeleton */ + position: relative; + /* scopes the left/right of the fc-highlight to be in the column */ } + +.fc-time-grid .fc-highlight { + position: absolute; + left: 0; + right: 0; + /* top and bottom will be in by JS */ } + +/* TimeGrid Event Containment +--------------------------------------------------------------------------------------------------*/ +.fc-ltr .fc-time-grid .fc-event-container { + /* space on the sides of events for LTR (default) */ + margin: 0 2.5% 0 2px; } + +.fc-rtl .fc-time-grid .fc-event-container { + /* space on the sides of events for RTL */ + margin: 0 2px 0 2.5%; } + +.fc-time-grid .fc-event, +.fc-time-grid .fc-bgevent { + position: absolute; + z-index: 1; + /* scope inner z-index's */ } + +.fc-time-grid .fc-bgevent { + /* background events always span full width */ + left: 0; + right: 0; } + +/* Generic Vertical Event +--------------------------------------------------------------------------------------------------*/ +.fc-v-event.fc-not-start { + /* events that are continuing from another day */ + /* replace space made by the top border with padding */ + border-top-width: 0; + padding-top: 1px; + /* remove top rounded corners */ + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.fc-v-event.fc-not-end { + /* replace space made by the top border with padding */ + border-bottom-width: 0; + padding-bottom: 1px; + /* remove bottom rounded corners */ + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +/* TimeGrid Event Styling +---------------------------------------------------------------------------------------------------- +We use the full "fc-time-grid-event" class instead of using descendants because the event won't +be a descendant of the grid when it is being dragged. +*/ +.fc-time-grid-event { + overflow: hidden; + /* don't let the bg flow over rounded corners */ } + +.fc-time-grid-event.fc-selected { + /* need to allow touch resizers to extend outside event's bounding box */ + /* common fc-selected styles hide the fc-bg, so don't need this anyway */ + overflow: visible; } + +.fc-time-grid-event.fc-selected .fc-bg { + display: none; + /* hide semi-white background, to appear darker */ } + +.fc-time-grid-event .fc-content { + overflow: hidden; + /* for when .fc-selected */ } + +.fc-time-grid-event .fc-time, +.fc-time-grid-event .fc-title { + padding: 0 1px; } + +.fc-time-grid-event .fc-time { + font-size: .85em; + white-space: nowrap; } + +/* short mode, where time and title are on the same line */ +.fc-time-grid-event.fc-short .fc-content { + /* don't wrap to second line (now that contents will be inline) */ + white-space: nowrap; } + +.fc-time-grid-event.fc-short .fc-time, +.fc-time-grid-event.fc-short .fc-title { + /* put the time and title on the same line */ + display: inline-block; + vertical-align: top; } + +.fc-time-grid-event.fc-short .fc-time span { + display: none; + /* don't display the full time text... */ } + +.fc-time-grid-event.fc-short .fc-time:before { + content: attr(data-start); + /* ...instead, display only the start time */ } + +.fc-time-grid-event.fc-short .fc-time:after { + content: "\A0-\A0"; + /* seperate with a dash, wrapped in nbsp's */ } + +.fc-time-grid-event.fc-short .fc-title { + font-size: .85em; + /* make the title text the same size as the time */ + padding: 0; + /* undo padding from above */ } + +/* resizer (cursor device) */ +.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer { + left: 0; + right: 0; + bottom: 0; + height: 8px; + overflow: hidden; + line-height: 8px; + font-size: 11px; + font-family: monospace; + text-align: center; + cursor: s-resize; } + +.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after { + content: "="; } + +/* resizer (touch device) */ +.fc-time-grid-event.fc-selected .fc-resizer { + /* 10x10 dot */ + border-radius: 5px; + border-width: 1px; + width: 8px; + height: 8px; + border-style: solid; + border-color: inherit; + background: #fff; + /* horizontally center */ + left: 50%; + margin-left: -5px; + /* center on the bottom edge */ + bottom: -5px; } + +/* Now Indicator +--------------------------------------------------------------------------------------------------*/ +.fc-time-grid .fc-now-indicator-line { + border-top-width: 1px; + left: 0; + right: 0; } + +/* arrow on axis */ +.fc-time-grid .fc-now-indicator-arrow { + margin-top: -5px; + /* vertically center on top coordinate */ } + +.fc-ltr .fc-time-grid .fc-now-indicator-arrow { + left: 0; + /* triangle pointing right... */ + border-width: 5px 0 5px 6px; + border-top-color: transparent; + border-bottom-color: transparent; } + +.fc-rtl .fc-time-grid .fc-now-indicator-arrow { + right: 0; + /* triangle pointing left... */ + border-width: 5px 6px 5px 0; + border-top-color: transparent; + border-bottom-color: transparent; } + +/* List View +--------------------------------------------------------------------------------------------------*/ +/* possibly reusable */ +.fc-event-dot { + display: inline-block; + width: 10px; + height: 10px; + border-radius: 5px; } + +/* view wrapper */ +.fc-rtl .fc-list-view { + direction: rtl; + /* unlike core views, leverage browser RTL */ } + +.fc-list-view { + border-width: 1px; + border-style: solid; } + +/* table resets */ +.fc .fc-list-table { + table-layout: auto; + /* for shrinkwrapping cell content */ } + +.fc-list-table td { + border-width: 1px 0 0; + padding: 8px 14px; } + +.fc-list-table tr:first-child td { + border-top-width: 0; } + +/* day headings with the list */ +.fc-list-heading { + border-bottom-width: 1px; } + +.fc-list-heading td { + font-weight: bold; } + +.fc-ltr .fc-list-heading-main { + float: left; } + +.fc-ltr .fc-list-heading-alt { + float: right; } + +.fc-rtl .fc-list-heading-main { + float: right; } + +.fc-rtl .fc-list-heading-alt { + float: left; } + +/* event list items */ +.fc-list-item.fc-has-url { + cursor: pointer; + /* whole row will be clickable */ } + +.fc-list-item-marker, +.fc-list-item-time { + white-space: nowrap; + width: 1px; } + +/* make the dot closer to the event title */ +.fc-ltr .fc-list-item-marker { + padding-right: 0; } + +.fc-rtl .fc-list-item-marker { + padding-left: 0; } + +.fc-list-item-title a { + /* every event title cell has an tag */ + text-decoration: none; + color: inherit; } + +.fc-list-item-title a[href]:hover { + /* hover effect only on titles with hrefs */ + text-decoration: underline; } + +/* message when no events */ +.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 { + /* theme will provide own background */ + background-color: #eee; } + +@media print { + .fc { + max-width: 100% !important; } + /* Global Event Restyling +--------------------------------------------------------------------------------------------------*/ + .fc-event { + background: #fff !important; + color: #000 !important; + page-break-inside: avoid; } + .fc-event .fc-resizer { + display: none; } + /* Table & Day-Row Restyling +--------------------------------------------------------------------------------------------------*/ + .fc th, + .fc td, + .fc hr, + .fc thead, + .fc tbody, + .fc-row { + border-color: #ccc !important; + background: #fff !important; } + /* kill the overlaid, absolutely-positioned components */ + /* common... */ + .fc-bg, + .fc-bgevent-skeleton, + .fc-highlight-skeleton, + .fc-mirror-skeleton, + .fc-bgevent-container, + .fc-business-container, + .fc-highlight-container, + .fc-mirror-container { + display: none; } + /* don't force a min-height on rows (for DayGrid) */ + .fc tbody .fc-row { + height: auto !important; + /* undo height that JS set in distributeHeight */ + min-height: 0 !important; + /* undo the min-height from each view's specific stylesheet */ } + .fc tbody .fc-row .fc-content-skeleton { + position: static; + /* undo .fc-rigid */ + padding-bottom: 0 !important; + /* use a more border-friendly method for this... */ } + .fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td { + /* only works in newer browsers */ + padding-bottom: 1em; + /* ...gives space within the skeleton. also ensures min height in a way */ } + .fc tbody .fc-row .fc-content-skeleton table { + /* provides a min-height for the row, but only effective for IE, which exaggerates this value, + making it look more like 3em. for other browers, it will already be this tall */ + height: 1em; } + /* Undo month-view event limiting. Display all events and hide the "more" links +--------------------------------------------------------------------------------------------------*/ + .fc-more-cell, + .fc-more { + display: none !important; } + .fc tr.fc-limited { + display: table-row !important; } + .fc td.fc-limited { + display: table-cell !important; } + .fc-popover { + display: none; + /* never display the "more.." popover in print mode */ } + /* TimeGrid Restyling +--------------------------------------------------------------------------------------------------*/ + /* undo the min-height 100% trick used to fill the container's height */ + .fc-time-grid { + min-height: 0 !important; } + /* don't display the side axis at all ("all-day" and time cells) */ + .fc-agenda-view .fc-axis { + display: none; } + /* don't display the horizontal lines */ + .fc-slats, + .fc-time-grid hr { + /* this hr is used when height is underused and needs to be filled */ + display: none !important; + /* important overrides inline declaration */ } + /* let the container that holds the events be naturally positioned and create real height */ + .fc-time-grid .fc-content-skeleton { + position: static; } + /* in case there are no events, we still want some height */ + .fc-time-grid .fc-content-skeleton table { + height: 4em; } + /* kill the horizontal spacing made by the event container. event margins will be done below */ + .fc-time-grid .fc-event-container { + margin: 0 !important; } + /* TimeGrid *Event* Restyling +--------------------------------------------------------------------------------------------------*/ + /* naturally position events, vertically stacking them */ + .fc-time-grid .fc-event { + position: static !important; + margin: 3px 2px !important; } + /* for events that continue to a future day, give the bottom border back */ + .fc-time-grid .fc-event.fc-not-end { + border-bottom-width: 1px !important; } + /* indicate the event continues via "..." text */ + .fc-time-grid .fc-event.fc-not-end:after { + content: "..."; } + /* for events that are continuations from previous days, give the top border back */ + .fc-time-grid .fc-event.fc-not-start { + border-top-width: 1px !important; } + /* indicate the event is a continuation via "..." text */ + .fc-time-grid .fc-event.fc-not-start:before { + content: "..."; } + /* time */ + /* undo a previous declaration and let the time text span to a second line */ + .fc-time-grid .fc-event .fc-time { + white-space: normal !important; } + /* hide the the time that is normally displayed... */ + .fc-time-grid .fc-event .fc-time span { + display: none; } + /* ...replace it with a more verbose version (includes AM/PM) stored in an html attribute */ + .fc-time-grid .fc-event .fc-time:after { + content: attr(data-full); } + /* Vertical Scroller & Containers +--------------------------------------------------------------------------------------------------*/ + /* kill the scrollbars and allow natural height */ + .fc-scroller, + .fc-day-grid-container, + .fc-time-grid-container { + /* */ + overflow: visible !important; + height: auto !important; } + /* kill the horizontal border/padding used to compensate for scrollbars */ + .fc-row { + border: 0 !important; + margin: 0 !important; } + /* Button Controls +--------------------------------------------------------------------------------------------------*/ + .fc-button-group, + .fc button { + display: none; + /* don't display any button-related controls */ } } diff --git a/static/fullcalendar/fullcalendar.min.js b/static/fullcalendar/fullcalendar.min.js new file mode 100644 index 0000000..223bfb8 --- /dev/null +++ b/static/fullcalendar/fullcalendar.min.js @@ -0,0 +1,13 @@ +/*! + * FullCalendar v4.0.0-alpha.2 + * Docs & License: https://fullcalendar.io/ + * (c) 2018 Adam Shaw + */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("superagent")):"function"==typeof define&&define.amd?define(["superagent"],t):"object"==typeof exports?exports.FullCalendar=t(require("superagent")):e.FullCalendar=t(e.superagent)}("undefined"!=typeof self?self:this,function(e){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=164)}([,function(e,t){var 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])};t.__extends=function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}},function(e,t,n){function r(e,t){t.left&&k.applyStyle(e,{borderLeftWidth:1,marginLeft:t.left-1}),t.right&&k.applyStyle(e,{borderRightWidth:1,marginRight:t.right-1})}function i(e){k.applyStyle(e,{marginLeft:"",marginRight:"",borderLeftWidth:"",borderRightWidth:""})}function o(){document.body.classList.add("fc-not-allowed")}function a(){document.body.classList.remove("fc-not-allowed")}function s(e,t,n){var r=Math.floor(t/e.length),i=Math.floor(t-r*(e.length-1)),o=[],a=[],s=[],u=0;l(e),e.forEach(function(t,n){var l=n===e.length-1?i:r,d=x.computeHeightAndMargins(t);dt&&(t=r)}}),t++,e.forEach(function(e){e.style.width=t+"px"}),t}function d(e,t){var n={position:"relative",left:-1};k.applyStyle(e,n),k.applyStyle(t,n);var r=e.offsetHeight-t.offsetHeight,i={position:"",left:""};return k.applyStyle(e,i),k.applyStyle(t,i),r}function c(e){e.classList.add("fc-unselectable"),e.addEventListener("selectstart",N.preventDefault)}function f(e){e.classList.remove("fc-unselectable"),e.removeEventListener("selectstart",N.preventDefault)}function p(e){e.addEventListener("contextmenu",N.preventDefault)}function h(e){e.removeEventListener("contextmenu",N.preventDefault)}function g(e){var t,n,r=[],i=[];for("string"==typeof e?i=e.split(/\s*,\s*/):"function"==typeof e?i=[e]:Array.isArray(e)&&(i=e),t=0;t=V.asRoughMs(t)&&(i=L.addDays(i,1)),i<=n&&(i=L.addDays(n,1)),{start:n,end:i}}function O(e){var t=_(e,V.createDuration(0));return L.diffDays(t.start,t.end)>1}function P(e,t,n,r){return"year"===r?V.createDuration(n.diffWholeYears(e,t),"year"):"month"===r?V.createDuration(n.diffWholeMonths(e,t),"month"):L.diffDayAndTime(e,t)}Object.defineProperty(t,"__esModule",{value:!0});var k=n(3),x=n(13),N=n(19),L=n(6),V=n(10);t.compensateScroll=r,t.uncompensateScroll=i,t.disableCursor=o,t.enableCursor=a,t.distributeHeight=s,t.undistributeHeight=l,t.matchCellWidths=u,t.subtractInnerElHeight=d,t.preventSelection=c,t.allowSelection=f,t.preventContextMenu=p,t.allowContextMenu=h,t.parseFieldSpecs=g,t.compareByFieldSpecs=v,t.compareByFieldSpec=y,t.flexibleCompare=m,t.log=E,t.warn=S,t.capitaliseFirstLetter=b,t.padStart=D,t.compareNumbers=w,t.isInt=T,t.applyAll=C,t.firstDefined=R,t.debounce=M,t.refineProps=H,t.computeAlignedDayRange=I,t.computeVisibleDayRange=_,t.isMultiDayRange=O,t.diffDates=P},function(e,t){function n(e,t,n){var r=document.createElement(e);if(t)for(var i in t)"style"===i?y(r,t[i]):E[i]?r[i]=t[i]:r.setAttribute(i,t[i]);return"string"==typeof n?r.innerHTML=n:null!=n&&s(r,n),r}function r(e){e=e.trim();var t=document.createElement(a(e));return t.innerHTML=e,t.firstChild}function i(e){return Array.prototype.slice.call(o(e))}function o(e){e=e.trim();var t=document.createElement(a(e));return t.innerHTML=e,t.childNodes}function a(e){return S[e.substr(0,3)]||"div"}function s(e,t){for(var n=d(t),r=0;r=0;a--)if("object"==typeof(s=e[a][r])&&s)i.unshift(s);else if(void 0!==s){u[r]=s;break}i.length&&(u[r]=o(i))}for(n=e.length-1;n>=0;n--){l=e[n];for(r in l)r in u||(u[r]=l[r])}return u}function a(e,t){var n={};for(var r in e)t(e[r],r)&&(n[r]=e[r]);return n}function s(e,t){var n={};for(var r in e)n[r]=t(e[r],r);return n}function l(e){for(var t={},n=0,r=e;n=1?Math.min(i,o):i}function m(e,t,n,r){var i=w([t,0,1+E(t,n,r)]),o=p(e),s=Math.round(a(i,o));return Math.floor(s/7)+1}function E(e,t,n){var r=7+t-n;return-(7+w([e,0,r]).getUTCDay()-t)%7+r-1}function S(e){return[e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()]}function b(e){return new Date(e[0],e[1]||0,null==e[2]?1:e[2],e[3]||0,e[4]||0,e[5]||0)}function D(e){return[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()]}function w(e){return new Date(Date.UTC.apply(Date,e))}function T(e){return 1e3*e.getUTCHours()*60*60+1e3*e.getUTCMinutes()*60+1e3*e.getUTCSeconds()+e.getUTCMilliseconds()}Object.defineProperty(t,"__esModule",{value:!0}),t.DAY_IDS=["sun","mon","tue","wed","thu","fri","sat"],t.addWeeks=n,t.addDays=r,t.addMs=i,t.diffWeeks=o,t.diffDays=a,t.diffHours=s,t.diffMinutes=l,t.diffSeconds=u,t.diffDayAndTime=d,t.diffWholeWeeks=c,t.diffWholeDays=f,t.startOfDay=p,t.startOfHour=h,t.startOfMinute=g,t.startOfSecond=v,t.weekOfYear=y,t.dateToLocalArray=S,t.arrayToLocalDate=b,t.dateToUtcArray=D,t.arrayToUtcDate=w,t.timeAsMs=T},,function(e,t,n){function r(e,t){return"object"==typeof e&&e?("string"==typeof t&&(e=p.assignTo({separator:t},e)),new d.NativeFormatter(e)):"string"==typeof e?new c.CmdFormatter(e,t):"function"==typeof e?new f.FuncFormatter(e):void 0}function i(e,t,n){void 0===n&&(n=!1);var r=e.toISOString();return r=r.replace(".000",""),n&&(r=r.replace("T00:00:00Z","")),r.length>10&&(null==t?r=r.replace("Z",""):0!==t&&(r=r.replace("Z",a(t,!0)))),r}function o(e){return u.padStart(e.getUTCHours(),2)+":"+u.padStart(e.getUTCMinutes(),2)+":"+u.padStart(e.getUTCSeconds(),2)}function a(e,t){void 0===t&&(t=!1);var n=e<0?"-":"+",r=Math.abs(e),i=Math.floor(r/60),o=Math.round(r%60);return t?n+u.padStart(i,2)+":"+u.padStart(o,2):"GMT"+n+i+(o?":"+u.padStart(o,2):"")}function s(e,t,n,r){var i=l(e,n.calendarSystem);return{date:i,start:i,end:t?l(t,n.calendarSystem):null,timeZone:n.timeZone,localeCodes:n.locale.codes,separator:r}}function l(e,t){var n=t.markerToArray(e.marker);return{marker:e.marker,timeZoneOffset:e.timeZoneOffset,array:n,year:n[0],month:n[1],day:n[2],hour:n[3],minute:n[4],second:n[5],millisecond:n[6]}}Object.defineProperty(t,"__esModule",{value:!0});var u=n(2),d=n(166),c=n(52),f=n(167),p=n(4);t.createFormatter=r,t.buildIsoString=i,t.formatIsoTimeString=o,t.formatTimeZoneOffset=a,t.createVerboseFormattingArg=s},function(e,t){function n(e){return(e+"").replace(/&/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""").replace(/\n/g,"")}function r(e){var t=[];for(var n in e){var r=e[n];null!=r&&t.push(n+":"+r)}return t.join(";")}function i(e){var t=[];for(var r in e){var i=e[r];null!=i&&t.push(r+'="'+n(i)+'"')}return t.join(" ")}function o(e){return Array.isArray(e)?e:"string"==typeof e?e.split(/\s+/):[]}Object.defineProperty(t,"__esModule",{value:!0}),t.htmlEscape=n,t.cssToStr=r,t.attrsToStr=i,t.parseClassName=o},function(e,t,n){function r(e,t){var n;return"string"==typeof e?i(e):"object"==typeof e&&e?o(e):"number"==typeof e?o((n={},n[t||"milliseconds"]=e,n)):null}function i(e){var t=w.exec(e);if(t){var n=t[1]?-1:1;return{years:0,months:0,days:n*(t[2]?parseInt(t[2],10):0),milliseconds:n*(60*(t[3]?parseInt(t[3],10):0)*60*1e3+60*(t[4]?parseInt(t[4],10):0)*1e3+1e3*(t[5]?parseInt(t[5],10):0)+(t[6]?parseInt(t[6],10):0))}}return null}function o(e){return{years:e.years||e.year||0,months:e.months||e.month||0,days:(e.days||e.day||0)+7*a(e),milliseconds:60*(e.hours||e.hour||0)*60*1e3+60*(e.minutes||e.minute||0)*1e3+1e3*(e.seconds||e.second||0)+(e.milliseconds||e.millisecond||e.ms||0)}}function a(e){return e.weeks||e.week||0}function s(e,t){return e.years===t.years&&e.months===t.months&&e.days===t.days&&e.milliseconds===t.milliseconds}function l(e){return 0===e.years&&0===e.months&&1===e.days&&0===e.milliseconds}function u(e,t){return{years:e.years+t.years,months:e.months+t.months,days:e.days+t.days,milliseconds:e.milliseconds+t.milliseconds}}function d(e,t){return{years:e.years-t.years,months:e.months-t.months,days:e.days-t.days,milliseconds:e.milliseconds-t.milliseconds}}function c(e,t){return{years:e.years*t,months:e.months*t,days:e.days*t,milliseconds:e.milliseconds*t}}function f(e){return h(e)/365}function p(e){return h(e)/30}function h(e){return m(e)/864e5}function g(e){return m(e)/36e5}function v(e){return m(e)/6e4}function y(e){return m(e)/1e3}function m(e){return 31536e6*e.years+2592e6*e.months+864e5*e.days+e.milliseconds}function E(e,t){for(var n=null,r=0;ra&&o.push({start:a,end:r.start}),r.end>a&&(a=r.end);return at.start)&&(null===e.start||null===t.end||e.start=e.start)&&(null===e.end||null!==t.end&&t.end<=e.end)}function u(e,t){return(null===e.start||t>=e.start)&&(null===e.end||t=t.end?new Date(t.end.valueOf()-1):e}Object.defineProperty(t,"__esModule",{value:!0}),t.parseRange=n,t.invertRanges=r,t.intersectRanges=o,t.rangesEqual=a,t.rangesIntersect=s,t.rangeContainsRange=l,t.rangeContainsMarker=u,t.constrainMarkerToRange=d},,function(e,t,n){function r(e,t){void 0===t&&(t=!1);var n=window.getComputedStyle(e),r=parseInt(n.borderLeftWidth,10)||0,i=parseInt(n.borderRightWidth,10)||0,o=parseInt(n.borderTopWidth,10)||0,a=parseInt(n.borderBottomWidth,10)||0,s=c.sanitizeScrollbarWidth(e.offsetWidth-e.clientWidth-r-i),l=c.sanitizeScrollbarWidth(e.offsetHeight-e.clientHeight-o-a),u={borderLeft:r,borderRight:i,borderTop:o,borderBottom:a,scrollbarBottom:l,scrollbarLeft:0,scrollbarRight:0};return c.getIsRtlScrollbarOnLeft()&&"rtl"===n.direction?u.scrollbarLeft=s:u.scrollbarRight=s,t&&(u.paddingLeft=parseInt(n.paddingLeft,10)||0,u.paddingRight=parseInt(n.paddingRight,10)||0,u.paddingTop=parseInt(n.paddingTop,10)||0,u.paddingBottom=parseInt(n.paddingBottom,10)||0),u}function i(e,t){void 0===t&&(t=!1);var n=o(e),i=r(e,t),a={left:n.left+i.borderLeft+i.scrollbarLeft,right:n.right-i.borderRight-i.scrollbarRight,top:n.top+i.borderTop,bottom:n.bottom-i.borderBottom-i.scrollbarBottom};return t&&(a.left+=i.paddingLeft,a.right-=i.paddingRight,a.top+=i.paddingTop,a.bottom-=i.paddingBottom),a}function o(e){var t=e.getBoundingClientRect();return{left:t.left+window.pageXOffset,top:t.top+window.pageYOffset,right:t.right+window.pageXOffset,bottom:t.bottom+window.pageYOffset}}function a(){return{left:window.pageXOffset,right:window.pageXOffset+document.documentElement.clientWidth,top:window.pageYOffset,bottom:window.pageYOffset+document.documentElement.clientHeight}}function s(e){var t=window.getComputedStyle(e);return e.offsetHeight+parseInt(t.marginTop,10)+parseInt(t.marginBottom,10)}function l(e){for(var t=[];e instanceof HTMLElement;){var n=window.getComputedStyle(e);if("fixed"===n.position)break;/(auto|scroll)/.test(n.overflow+n.overflowY+n.overflowX)&&t.push(e),e=e.parentNode}return t}function u(e){return l(e).map(function(e){return i(e)}).concat(a()).reduce(function(e,t){return d.intersectRects(e,t)||t})}Object.defineProperty(t,"__esModule",{value:!0});var d=n(26),c=n(165);t.computeEdges=r,t.computeInnerRect=i,t.computeRect=o,t.computeHeightAndMargins=s,t.getClippingParents=l,t.computeClippingRect=u},function(e,t,n){function r(e,t,n){for(var r=d(),o=0,a=e;o *",r.bgSegSelector=".fc-bgevent",r.slicingType=null,r.isRtl=!1,r.emitter=new v.default,r.renderedFlags={},r.dirtySizeFlags={},r.needHitsDepth=0,r.dateProfile=null,r.businessHours=null,r.eventStore=null,r.eventUis=null,r.dateSelection=null,r.eventSelection="",r.eventDrag=null,r.eventResize=null,r.view=t||r,n&&(r.options=n),r.uid=String(m++),r.childrenByUid={},r.nextDayThreshold=l.createDuration(r.opt("nextDayThreshold")),r.isRtl="rtl"===r.opt("dir"),r.fillRendererClass&&(r.fillRenderer=new r.fillRendererClass(r)),r.eventRendererClass&&(r.eventRenderer=new r.eventRendererClass(r,r.fillRenderer)),r.mirrorRendererClass&&r.eventRenderer&&(r.mirrorRenderer=new r.mirrorRendererClass(r,r.eventRenderer)),r}return r.__extends(t,e),t.prototype.addChild=function(e){return!this.childrenByUid[e.uid]&&(this.childrenByUid[e.uid]=e,!0)},t.prototype.removeChild=function(e){return!!this.childrenByUid[e.uid]&&(delete this.childrenByUid[e.uid],!0)},t.prototype.updateSize=function(e,t,n){var r=this.dirtySizeFlags;(n||r.skeleton||r.dates||r.events)&&(this.updateBaseSize(e,t),this.buildPositionCaches()),(n||r.businessHours)&&this.computeBusinessHoursSize(),(n||r.dateSelection||r.eventDrag||r.eventResize)&&(this.computeHighlightSize(),this.computeMirrorSize()),(n||r.events)&&this.computeEventsSize(),(n||r.businessHours)&&this.assignBusinessHoursSize(),(n||r.dateSelection||r.eventDrag||r.eventResize)&&(this.assignHighlightSize(),this.assignMirrorSize()),(n||r.events)&&this.assignEventsSize(),this.dirtySizeFlags={},this.callChildren("updateSize",arguments)},t.prototype.updateBaseSize=function(e,t){},t.prototype.buildPositionCaches=function(){},t.prototype.requestPrepareHits=function(){this.needHitsDepth++||this.prepareHits()},t.prototype.requestReleaseHits=function(){--this.needHitsDepth||this.releaseHits()},t.prototype.prepareHits=function(){},t.prototype.releaseHits=function(){},t.prototype.queryHit=function(e,t){return null},t.prototype.bindGlobalHandlers=function(){this.isInteractable&&f.default.registerComponent(this)},t.prototype.unbindGlobalHandlers=function(){this.isInteractable&&f.default.unregisterComponent(this)},t.prototype.opt=function(e){return this.view.options[e]},t.prototype.publiclyTrigger=function(e,t){return this.getCalendar().publiclyTrigger(e,t)},t.prototype.publiclyTriggerAfterSizing=function(e,t){return this.getCalendar().publiclyTriggerAfterSizing(e,t)},t.prototype.hasPublicHandlers=function(e){return this.getCalendar().hasPublicHandlers(e)},t.prototype.triggerRenderedSegs=function(e,t){if(void 0===t&&(t=!1),this.hasPublicHandlers("eventPositioned"))for(var n=this.getCalendar(),r=0,i=e;r'+n+"":""+n+""},t.prototype.getAllDayHtml=function(){return this.opt("allDayHtml")||i.htmlEscape(this.opt("allDayText"))},t.prototype.getDayClasses=function(e,t){var n,r,i=this.view,o=[];return p.rangeContainsMarker(this.dateProfile.activeRange,e)?(o.push("fc-"+s.DAY_IDS[e.getUTCDay()]),i.isDateInOtherMonth(e,this.dateProfile)&&o.push("fc-other-month"),n=s.startOfDay(i.calendar.getNow()),r=s.addDays(n,1),e=r?o.push("fc-future"):(o.push("fc-today"),!0!==t&&o.push(i.calendar.theme.getClass("today")))):o.push("fc-disabled-day"),o},t.prototype.currentRangeAs=function(e){var t=this.getDateEnv(),n=this.dateProfile.currentRange,r=null;return"years"===e?r=t.diffWholeYears(n.start,n.end):"months"===e?r=t.diffWholeMonths(n.start,n.end):"weeks"===e?r=t.diffWholeMonths(n.start,n.end):"days"===e&&(r=s.diffWholeDays(n.start,n.end)),r||0},t.prototype.isValidSegDownEl=function(e){return!(this.eventDrag||this.eventResize||o.elementClosest(e,".fc-mirror")||this.isInPopover(e))},t.prototype.isValidDateDownEl=function(e){var t=o.elementClosest(e,this.fgSegSelector);return(!t||t.classList.contains("fc-mirror"))&&!o.elementClosest(e,".fc-more")&&!o.elementClosest(e,"a[data-goto]")&&!this.isInPopover(e)},t.prototype.isInPopover=function(e){var t=o.elementClosest(e,".fc-popover");return t&&t!==this.el},t.prototype.isEventsValid=function(e){var t=this.dateProfile,n=e.instances;if(t)for(var r in n)if(!p.rangeContainsRange(t.validRange,n[r].range))return!1;return y.isEventsValid(e,this.getCalendar())},t.prototype.isSelectionValid=function(e){var t=this.dateProfile;return!(t&&!p.rangeContainsRange(t.validRange,e.range))&&y.isSelectionValid(e,this.getCalendar())},t}(a.default);t.default=E},function(e,t,n){function r(e){f.push(e)}function i(e){return f[e]}function o(e){return!f[e.sourceDefId].ignoreRange}function a(e,t){for(var n=f.length-1;n>=0;n--){var r=f[n],i=r.parseMeta(e);if(i)return s("object"==typeof e?e:{},i,n,t)}return null}function s(e,t,n,r){var i=u.refineProps(e,c);return i.isFetching=!1,i.latestFetchId="",i.fetchRange=null,i.publicId=String(e.id||""),i.sourceId=String(p++),i.sourceDefId=n,i.meta=t,i.constraint&&(i.constraint=d.normalizeConstraint(i.constraint,r)),null==i.startEditable&&(i.startEditable=i.editable),null==i.durationEditable&&(i.durationEditable=i.editable),i.backgroundColor||(i.backgroundColor=i.color),i.borderColor||(i.borderColor=i.color),delete i.editable,delete i.color,i}Object.defineProperty(t,"__esModule",{value:!0});var l=n(9),u=n(2),d=n(39),c={id:String,allDayDefault:Boolean,eventDataTransform:Function,editable:Boolean,startEditable:Boolean,durationEditable:Boolean,constraint:null,overlap:Boolean,allow:null,rendering:String,className:l.parseClassName,color:String,backgroundColor:String,borderColor:String,textColor:String,success:Function,failure:Function},f=[],p=0;t.registerEventSourceDef=r,t.getEventSourceDef=i,t.doesSourceNeedRange=o,t.parseEventSource=a},,,function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.version="4.0.0-alpha.2",t.internalApiVersion=12;var r=n(2);t.applyAll=r.applyAll,t.debounce=r.debounce,t.padStart=r.padStart,t.isInt=r.isInt,t.capitaliseFirstLetter=r.capitaliseFirstLetter,t.parseFieldSpecs=r.parseFieldSpecs,t.compareByFieldSpecs=r.compareByFieldSpecs,t.compareByFieldSpec=r.compareByFieldSpec,t.flexibleCompare=r.flexibleCompare,t.log=r.log,t.warn=r.warn;var i=n(9);t.htmlEscape=i.htmlEscape,t.cssToStr=i.cssToStr;var o=n(136);t.removeExact=o.removeExact;var a=n(26);t.intersectRects=a.intersectRects;var s=n(4);t.assignTo=s.assignTo;var l=n(3);t.findElements=l.findElements,t.findChildren=l.findChildren,t.htmlToElement=l.htmlToElement,t.createElement=l.createElement,t.insertAfterElement=l.insertAfterElement,t.prependToElement=l.prependToElement,t.removeElement=l.removeElement,t.appendToElement=l.appendToElement,t.applyStyle=l.applyStyle,t.applyStyleProp=l.applyStyleProp,t.elementMatches=l.elementMatches,t.forceClassName=l.forceClassName;var u=n(19);t.preventDefault=u.preventDefault,t.listenBySelector=u.listenBySelector,t.whenTransitionDone=u.whenTransitionDone;var d=n(13);t.computeInnerRect=d.computeInnerRect,t.computeEdges=d.computeEdges,t.computeHeightAndMargins=d.computeHeightAndMargins;var c=n(20);t.EmitterMixin=c.default;var f=n(11);t.rangeContainsMarker=f.rangeContainsMarker,t.intersectRanges=f.intersectRanges;var p=n(48);t.defineThemeSystem=p.defineThemeSystem;var h=n(47);t.Mixin=h.default;var g=n(49);t.PositionCache=g.default;var v=n(37);t.ScrollComponent=v.default;var y=n(27);t.Theme=y.default;var m=n(21);t.DateComponent=m.default;var E=n(175);t.Calendar=E.default;var S=n(42);t.View=S.default;var b=n(43);t.defineView=b.defineView,t.getViewConfig=b.getViewConfig;var D=n(58);t.DayTableMixin=D.default;var w=n(18);t.EventRenderer=w.default;var T=n(59);t.FillRenderer=T.default;var C=n(60);t.MirrorRenderer=C.default;var R=n(146);t.AgendaView=R.default;var M=n(147);t.TimeGrid=M.default;var H=n(62);t.DayGrid=H.default;var I=n(63);t.BasicView=I.default;var _=n(150);t.MonthView=_.default;var O=n(151);t.ListView=O.default;var P=n(6);t.addDays=P.addDays,t.startOfDay=P.startOfDay,t.addMs=P.addMs,t.diffWholeWeeks=P.diffWholeWeeks,t.diffWholeDays=P.diffWholeDays,t.diffDayAndTime=P.diffDayAndTime;var k=n(10);t.createDuration=k.createDuration,t.isSingleDay=k.isSingleDay,t.multiplyDuration=k.multiplyDuration,t.addDurations=k.addDurations,t.asRoughMinutes=k.asRoughMinutes,t.asRoughSeconds=k.asRoughSeconds,t.asRoughMs=k.asRoughMs,t.wholeDivideDurations=k.wholeDivideDurations,t.greatestDurationDenominator=k.greatestDurationDenominator;var x=n(56);t.DateEnv=x.DateEnv;var N=n(41);t.defineLocale=N.defineLocale,t.getLocale=N.getLocale,t.getLocaleCodes=N.getLocaleCodes;var L=n(8);t.createFormatter=L.createFormatter;var V=n(144);t.NamedTimeZoneImpl=V.NamedTimeZoneImpl,t.registerNamedTimeZoneImpl=V.registerNamedTimeZoneImpl;var F=n(52);t.registerCmdFormatter=F.registerCmdFormatter;var j=n(145);t.parseMarker=j.parse;var z=n(22);t.registerEventSourceDef=z.registerEventSourceDef;var A=n(2);t.refineProps=A.refineProps;var U=n(40);t.PointerDragging=U.default;var B=n(54);t.ElementDragging=B.default;var G=n(195);t.Draggable=G.default;var W=n(197);t.ThirdPartyDraggable=W.default;var Y=n(199);t.formatDate=Y.formatDate,t.formatRange=Y.formatRange;var q=n(32);t.globalDefaults=q.globalDefaults;var Z=n(38);t.registerRecurringType=Z.registerRecurringType},function(e,t){function n(e,t){return e.left>=t.left&&e.left=t.top&&e.top=i*i&&n.handleDistanceSurpassed(e)}n.isDragging&&("scroll"!==e.origEvent.type&&(n.mirror.handleMove(e.pageX,e.pageY),n.autoScroller.handleMove(e.pageX,e.pageY)),n.emitter.trigger("dragmove",e))}},n.onPointerUp=function(e){n.isInteracting&&(n.isInteracting=!1,o.allowSelection(document.body),o.allowContextMenu(document.body),n.emitter.trigger("pointerup",e),n.isDragging&&(n.autoScroller.stop(),n.tryStopDrag(e)),n.delayTimeoutId&&(clearTimeout(n.delayTimeoutId),n.delayTimeoutId=null))};var r=n.pointer=new i.default(t);return r.emitter.on("pointerdown",n.onPointerDown),r.emitter.on("pointermove",n.onPointerMove),r.emitter.on("pointerup",n.onPointerUp),n.mirror=new a.default,n.autoScroller=new l.default,n}return r.__extends(t,e),t.prototype.destroy=function(){this.pointer.destroy()},t.prototype.startDelay=function(e){var t=this;"number"==typeof this.delay?this.delayTimeoutId=setTimeout(function(){t.delayTimeoutId=null,t.handleDelayEnd(e)},this.delay):this.handleDelayEnd(e)},t.prototype.handleDelayEnd=function(e){this.isDelayEnded=!0,this.tryStartDrag(e)},t.prototype.handleDistanceSurpassed=function(e){this.isDistanceSurpassed=!0,this.tryStartDrag(e)},t.prototype.tryStartDrag=function(e){this.isDelayEnded&&this.isDistanceSurpassed&&(this.pointer.wasTouchScroll&&!this.touchScrollAllowed||(this.isDragging=!0,this.mirrorNeedsRevert=!1,this.autoScroller.start(e.pageX,e.pageY),this.emitter.trigger("dragstart",e),!1===this.touchScrollAllowed&&this.pointer.cancelTouchScroll()))},t.prototype.tryStopDrag=function(e){this.mirror.stop(this.mirrorNeedsRevert,this.stopDrag.bind(this,e))},t.prototype.stopDrag=function(e){this.isDragging=!1,this.emitter.trigger("dragend",e)},t.prototype.setIgnoreMove=function(e){this.pointer.shouldIgnoreMove=e},t.prototype.setMirrorIsVisible=function(e){this.mirror.setIsVisible(e)},t.prototype.setMirrorNeedsRevert=function(e){this.mirrorNeedsRevert=e},t}(s.default);t.default=u},function(e,t,n){function r(e,t){return!e&&!t||Boolean(e)===Boolean(t)&&a.isDateSpansEqual(e.dateSpan,t.dateSpan)}Object.defineProperty(t,"__esModule",{value:!0});var i=n(20),o=n(21),a=n(50),s=n(13),l=n(26),u=n(11),d=function(){function e(e,t){var n,r=this;this.useSubjectCenter=!1,this.requireInitial=!0,this.initialHit=null,this.movingHit=null,this.finalHit=null,this.handlePointerDown=function(e){var t=r.dragging;r.initialHit=null,r.movingHit=null,r.finalHit=null,r.prepareHits(),r.processFirstCoord(e),r.initialHit||!r.requireInitial?(t.setIgnoreMove(!1),r.emitter.trigger("pointerdown",e)):t.setIgnoreMove(!0)},this.handleDragStart=function(e){r.emitter.trigger("dragstart",e),r.handleMove(e,!0)},this.handleDragMove=function(e){r.emitter.trigger("dragmove",e),r.handleMove(e)},this.handlePointerUp=function(e){r.releaseHits(),r.emitter.trigger("pointerup",e)},this.handleDragEnd=function(e){r.movingHit&&r.emitter.trigger("hitupdate",null,!0,e),r.finalHit=r.movingHit,r.movingHit=null,r.emitter.trigger("dragend",e)},t instanceof o.default?this.droppableHash=(n={},n[t.uid]=t,n):this.droppableHash=t,e.emitter.on("pointerdown",this.handlePointerDown),e.emitter.on("dragstart",this.handleDragStart),e.emitter.on("dragmove",this.handleDragMove),e.emitter.on("pointerup",this.handlePointerUp),e.emitter.on("dragend",this.handleDragEnd),this.dragging=e,this.emitter=new i.default}return e.prototype.processFirstCoord=function(e){var t,n={left:e.pageX,top:e.pageY},r=n,i=e.subjectEl;i!==document&&(t=s.computeRect(i),r=l.constrainPoint(r,t));var o=this.initialHit=this.queryHit(r.left,r.top);if(o){if(this.useSubjectCenter&&t){var a=l.intersectRects(t,o.rect);a&&(r=l.getRectCenter(a))}this.coordAdjust=l.diffPoints(r,n)}else this.coordAdjust={left:0,top:0}},e.prototype.handleMove=function(e,t){var n=this.queryHit(e.pageX+this.coordAdjust.left,e.pageY+this.coordAdjust.top);!t&&r(this.movingHit,n)||(this.movingHit=n,this.emitter.trigger("hitupdate",n,!1,e))},e.prototype.prepareHits=function(){var e=this.droppableHash;for(var t in e)e[t].requestPrepareHits()},e.prototype.releaseHits=function(){var e=this.droppableHash;for(var t in e)e[t].requestReleaseHits()},e.prototype.queryHit=function(e,t){var n=this.droppableHash,r=null;for(var i in n){var o=n[i],a=o.queryHit(e,t);!a||o.dateProfile&&!u.rangeContainsRange(o.dateProfile.activeRange,a.dateSpan.range)||r&&!(a.layer>r.layer)||(r=a)}return r},e}();t.default=d,t.isHitsEqual=r},function(e,t,n){function r(e){return i.mergeProps(e,o)}Object.defineProperty(t,"__esModule",{value:!0});var i=n(4);t.globalDefaults={defaultRangeSeparator:" - ",titleRangeSeparator:" – ",cmdFormatter:null,defaultTimedEventDuration:"01:00:00",defaultAllDayEventDuration:{day:1},forceEventDuration:!1,nextDayThreshold:"00:00:00", +columnHeader:!0,defaultView:"month",aspectRatio:1.35,header:{left:"title",center:"",right:"today prev,next"},weekends:!0,weekNumbers:!1,weekNumberCalculation:"local",editable:!1,scrollTime:"06:00:00",minTime:"00:00:00",maxTime:"24:00:00",showNonCurrentDates:!0,lazyFetching:!0,startParam:"start",endParam:"end",timeZoneParam:"timeZone",timeZone:"local",timeZoneImpl:null,locale:"en",agendaEventMinHeight:0,theme:!1,dragRevertDuration:500,dragScroll:!0,allDayMaintainDuration:!1,unselectAuto:!0,dropAccept:"*",eventOrder:"start,-duration,allDay,title",eventLimit:!1,eventLimitClick:"popover",dayPopoverFormat:{month:"long",day:"numeric",year:"numeric"},handleWindowResize:!0,windowResizeDelay:100,longPressDelay:1e3,eventDragMinDistance:5},t.rtlDefaults={header:{left:"next,prev today",center:"",right:"title"},buttonIcons:{prev:"right-single-arrow",next:"left-single-arrow",prevYear:"right-double-arrow",nextYear:"left-double-arrow"},themeButtonIcons:{prev:"circle-triangle-e",next:"circle-triangle-w",nextYear:"seek-prev",prevYear:"seek-next"}};var o=["header","footer","buttonText","buttonIcons","themeButtonIcons"];t.mergeOptions=r},,,,,function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),i=n(13),o=n(3),a=n(139),s=function(e){function t(t,n){var r=e.call(this,o.createElement("div",{className:"fc-scroller"}))||this;return r.overflowX=t,r.overflowY=n,r}return r.__extends(t,e),t.prototype.clear=function(){this.setHeight("auto"),this.applyOverflow()},t.prototype.removeElement=function(){o.removeElement(this.el)},t.prototype.applyOverflow=function(){o.applyStyle(this.el,{overflowX:this.overflowX,overflowY:this.overflowY})},t.prototype.lockOverflow=function(e){var t=this.overflowX,n=this.overflowY;e=e||this.getScrollbarWidths(),"auto"===t&&(t=e.bottom||this.canScrollHorizontally()?"scroll":"hidden"),"auto"===n&&(n=e.left||e.right||this.canScrollVertically()?"scroll":"hidden"),o.applyStyle(this.el,{overflowX:t,overflowY:n})},t.prototype.setHeight=function(e){o.applyStyleProp(this.el,"height",e)},t.prototype.getScrollbarWidths=function(){var e=i.computeEdges(this.el);return{left:e.scrollbarLeft,right:e.scrollbarRight,bottom:e.scrollbarBottom}},t}(a.ElementScrollController);t.default=s},function(e,t,n){function r(e){s.push(e)}function i(e,t,n){for(var r=0;r0;r--){var i=n.slice(0,r).join("-");if(u[i])return u[i]}return null}function o(e,t){u[e]=t}function a(){return Object.keys(u)}Object.defineProperty(t,"__esModule",{value:!0});var s=n(4),l={week:{dow:0,doy:4},dir:"ltr",buttonText:{prev:"prev",next:"next",prevYear:"prev year",nextYear:"next year",year:"year",today:"today",month:"month",week:"week",day:"day",list:"list"},weekLabel:"W",allDayText:"all-day",eventLimitText:"more",noEventsMessage:"No events to display"},u={};t.getLocale=r,t.defineLocale=o,t.getLocaleCodes=a,o("en",l)},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),i=n(4),o=n(2),a=n(57),s=n(21),l=n(6),u=n(10),d=n(8),c=n(20),f=n(11),p=function(e){function t(t,n){var r=e.call(this,null,n.options)||this;return r.calendar=t,r.viewSpec=n,r.type=n.type,r.initHiddenDays(),r.dateProfileGenerator=new r.dateProfileGeneratorClass(r),r.eventOrderSpecs=o.parseFieldSpecs(r.opt("eventOrder")),r.initialize(),r}return r.__extends(t,e),t.prototype.initialize=function(){},t.prototype.opt=function(e){return this.options[e]},t.prototype.computeTitle=function(e){var t,n=this.getDateEnv();return t=/^(year|month)$/.test(e.currentRangeUnit)?e.currentRange:e.activeRange,n.formatRange(t.start,t.end,d.createFormatter(this.opt("titleFormat")||this.computeTitleFormat(e),this.opt("titleRangeSeparator")),{isEndExclusive:e.isRangeAllDay})},t.prototype.computeTitleFormat=function(e){var t=e.currentRangeUnit;if("year"===t)return{year:"numeric"};if("month"===t)return{year:"numeric",month:"long"};var n=l.diffWholeDays(e.currentRange.start,e.currentRange.end);return null!==n&&n>1?{year:"numeric",month:"short",day:"numeric"}:{year:"numeric",month:"long",day:"numeric"}},t.prototype.computeDateProfile=function(e){var t=this.dateProfileGenerator.build(e,void 0,!0);return this.dateProfile&&f.rangesEqual(this.dateProfile.activeRange,t.activeRange)?this.dateProfile:t},Object.defineProperty(t.prototype,"activeStart",{get:function(){return this.getDateEnv().toDate(this.dateProfile.activeRange.start)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"activeEnd",{get:function(){return this.getDateEnv().toDate(this.dateProfile.activeRange.end)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentStart",{get:function(){return this.getDateEnv().toDate(this.dateProfile.currentRange.start)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentEnd",{get:function(){return this.getDateEnv().toDate(this.dateProfile.currentRange.end)},enumerable:!0,configurable:!0}),t.prototype.afterSkeletonRender=function(){this.publiclyTriggerAfterSizing("viewSkeletonRender",[{view:this,el:this.el}])},t.prototype.beforeSkeletonUnrender=function(){this.publiclyTrigger("viewSkeletonDestroy",[{view:this,el:this.el}])},t.prototype.afterDatesRender=function(){this.title=this.computeTitle(this.dateProfile),this.addScroll({isDateInit:!0}),this.startNowIndicator(),this.publiclyTriggerAfterSizing("datesRender",[{view:this,el:this.el}])},t.prototype.beforeDatesUnrender=function(){this.publiclyTrigger("datesDestroy",[{view:this,el:this.el}]),this.stopNowIndicator()},t.prototype.startNowIndicator=function(){var e,t,n,r=this,i=this.getDateEnv();this.opt("nowIndicator")&&(e=this.getNowIndicatorUnit())&&(t=this.updateNowIndicator.bind(this),this.initialNowDate=this.calendar.getNow(),this.initialNowQueriedMs=(new Date).valueOf(),n=i.add(i.startOf(this.initialNowDate,e),u.createDuration(1,e)).valueOf()-this.initialNowDate.valueOf(),this.nowIndicatorTimeoutID=setTimeout(function(){r.nowIndicatorTimeoutID=null,t(),n="second"===e?1e3:6e4,r.nowIndicatorIntervalID=setInterval(t,n)},n))},t.prototype.updateNowIndicator=function(){this.renderedFlags.dates&&this.initialNowDate&&(this.unrenderNowIndicator(),this.renderNowIndicator(l.addMs(this.initialNowDate,(new Date).valueOf()-this.initialNowQueriedMs)),this.isNowIndicatorRendered=!0)},t.prototype.stopNowIndicator=function(){this.isNowIndicatorRendered&&(this.nowIndicatorTimeoutID&&(clearTimeout(this.nowIndicatorTimeoutID),this.nowIndicatorTimeoutID=null),this.nowIndicatorIntervalID&&(clearInterval(this.nowIndicatorIntervalID),this.nowIndicatorIntervalID=null),this.unrenderNowIndicator(),this.isNowIndicatorRendered=!1)},t.prototype.updateSize=function(t,n,r){e.prototype.updateSize.call(this,t,n,r),this.updateNowIndicator()},t.prototype.addScroll=function(e){var t=this.queuedScroll||(this.queuedScroll={});t.isLocked||i.assignTo(t,e)},t.prototype.popScroll=function(){this.applyQueuedScroll(),this.queuedScroll=null},t.prototype.applyQueuedScroll=function(){this.applyScroll(this.queuedScroll||{})},t.prototype.queryScroll=function(){var e={};return this.renderedFlags.dates&&i.assignTo(e,this.queryDateScroll()),e},t.prototype.applyScroll=function(e){e.isLocked&&delete e.isLocked,e.isDateInit&&(delete e.isDateInit,this.renderedFlags.dates&&i.assignTo(e,this.computeInitialDateScroll())),this.renderedFlags.dates&&this.applyDateScroll(e)},t.prototype.computeInitialDateScroll=function(){return{}},t.prototype.queryDateScroll=function(){return{}},t.prototype.applyDateScroll=function(e){},t.prototype.isDateInOtherMonth=function(e,t){return!1},t.prototype.getRangeOption=function(e){for(var t=[],n=1;n=n[t]&&e=n[t]&&e1&&(s=i.startOfDay(s),s=i.addDays(s,-1),s=r.add(s,n))),{start:a,end:s}},e.prototype.buildRangeFromDuration=function(e,t,n,r){function a(){u=f.startOf(e,p),d=f.add(u,n),c={start:u,end:d}}var s,l,u,d,c,f=this._view.calendar.dateEnv,p=this.opt("dateAlignment");return p||(s=this.opt("dateIncrement"),s?(l=o.createDuration(s),p=o.asRoughMs(l)=t.length?t[t.length-1]+1:t[n]},t.prototype.computeColHeadFormat=function(){return this.rowCnt>1||this.colCnt>10?{weekday:"short"}:this.colCnt>1?{weekday:"short",month:"numeric",day:"numeric",omitCommas:!0}:{weekday:"long"}},t.prototype.sliceRangeByRow=function(e){var t,n,r,i,o,a=this.daysPerRow,l=this.getDateDayIndex(e.start),u=this.getDateDayIndex(s.addDays(e.end,-1)),d=[];for(t=0;t'+this.renderHeadTrHtml()+""},t.prototype.renderHeadIntroHtml=function(){return this.renderIntroHtml()},t.prototype.renderHeadTrHtml=function(){return""+(this.isRtl?"":this.renderHeadIntroHtml())+this.renderHeadDateCellsHtml()+(this.isRtl?this.renderHeadIntroHtml():"")+""},t.prototype.renderHeadDateCellsHtml=function(){var e,t,n=[];for(e=0;e1?' colspan="'+t+'"':"")+(n?" "+n:"")+">"+(c?a.buildGotoAnchorHtml({date:e,forceOff:o.rowCnt>1||1===o.colCnt},r):r)+""},t.prototype.renderBgTrHtml=function(e){return""+(this.isRtl?"":this.renderBgIntroHtml(e))+this.renderBgCellsHtml(e)+(this.isRtl?this.renderBgIntroHtml(e):"")+""},t.prototype.renderBgIntroHtml=function(e){return this.renderIntroHtml()},t.prototype.renderBgCellsHtml=function(e){var t,n,r=[];for(t=0;t"},t.prototype.renderIntroHtml=function(){return""},t.prototype.bookendCells=function(e){var t=this.renderIntroHtml();t&&(this.isRtl?o.appendToElement(e,t):o.prependToElement(e,t))},t}(a.default);t.default=d},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(9),i=n(3),o=function(){function e(e){this.fillSegTag="div",this.component=e,this.containerElsByType={},this.renderedSegsByType={}}return e.prototype.renderSegs=function(e,t,n){var r,i=this.buildSegEls(e,t,n),o=this.attachSegEls(e,i);return o&&(r=this.containerElsByType[e]||(this.containerElsByType[e]=[])).push.apply(r,o),this.renderedSegsByType[e]=i,i},e.prototype.unrender=function(e){var t=this.containerElsByType[e];t&&(t.forEach(i.removeElement),delete this.containerElsByType[e]),delete this.renderedSegsByType[e]},e.prototype.buildSegEls=function(e,t,n){var r,o=this,a="",s=[];if(t.length){for(r=0;r"+this.fillSegTag+">"},e.prototype.attachSegEls=function(e,t){return null},e.prototype.computeSize=function(e){},e.prototype.assignSize=function(e){},e}();t.default=o},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(3),i=function(){function e(e,t){this.view=e.view,this.component=e,this.eventRenderer=t}return e.prototype.renderEventDraggingSegs=function(e,t){this.renderEventSegs(e,t,"fc-dragging")},e.prototype.renderEventResizingSegs=function(e,t){this.renderEventSegs(e,t,"fc-resizing")},e.prototype.renderEventSegs=function(e,t,n){var r;for(e=this.eventRenderer.renderFgSegEls(e,!0),r=0;r'+this.renderBgTrHtml(e)+''+(this.getIsNumbersVisible()?""+this.renderNumberTrHtml(e)+"":"")+""},t.prototype.getIsNumbersVisible=function(){return this.getIsDayNumbersVisible()||this.cellWeekNumbersVisible},t.prototype.getIsDayNumbersVisible=function(){return this.rowCnt>1},t.prototype.renderNumberTrHtml=function(e){return""+(this.isRtl?"":this.renderNumberIntroHtml(e))+this.renderNumberCellsHtml(e)+(this.isRtl?this.renderNumberIntroHtml(e):"")+""},t.prototype.renderNumberIntroHtml=function(e){return this.renderIntroHtml()},t.prototype.renderNumberCellsHtml=function(e){var t,n,r=[];for(t=0;t",this.cellWeekNumbersVisible&&e.getUTCDay()===n&&(o+=r.buildGotoAnchorHtml({date:e,type:"week"},{class:"fc-week-number"},i.format(e,S))),s&&(o+=r.buildGotoAnchorHtml(e,{class:"fc-day-number"},i.format(e,E))),o+=""):""},t.prototype.buildPositionCaches=function(){this.colPositions.build(),this.rowPositions.build(),this.rowPositions.bottoms[this.rowCnt-1]+=this.bottomCoordPadding},t.prototype.prepareHits=function(){this.offsetTracker=new m.default(this.el)},t.prototype.releaseHits=function(){this.offsetTracker.destroy()},t.prototype.queryHit=function(e,t){var n=this,r=n.colPositions,i=n.rowPositions,o=n.offsetTracker;if(o.isWithinClipping(e,t)){var a=o.computeLeft(),s=o.computeTop(),l=r.leftToIndex(e-a),u=i.topToIndex(t-s);if(null!=u&&null!=l)return{component:this,dateSpan:{range:this.getCellRange(u,l),allDay:!0},dayEl:this.getCellEl(u,l),rect:{left:r.lefts[l]+a,right:r.rights[l]+a,top:i.tops[u]+s,bottom:i.bottoms[u]+s},layer:0}}},t.prototype.getCellEl=function(e,t){return this.cellEls[e*this.colCnt+t]},t.prototype.unrenderEvents=function(){this.removeSegPopover(),e.prototype.unrenderEvents.call(this)},t.prototype.getAllEventSegs=function(){return e.prototype.getAllEventSegs.call(this).concat(this.segPopoverTile?this.segPopoverTile.getAllEventSegs():[])},t.prototype.renderEventResize=function(e,t,n){var r=this.eventRangesToSegs(this.eventStoreToRanges(e,t));this.renderHighlightSegs(r),this.mirrorRenderer.renderEventResizingSegs(r,n)},t.prototype.unrenderEventResize=function(){this.unrenderHighlight(),this.mirrorRenderer.unrender()},t.prototype.removeSegPopover=function(){this.segPopover&&this.segPopover.hide()},t.prototype.limitRows=function(e){var t,n,r=this.eventRenderer.rowStructs||[];for(t=0;ti)return t;return!1},t.prototype.limitRow=function(e,t){var n,r,i,a,s,l,u,d,c,f,p,h,g,v,y,m=this,E=this.eventRenderer.rowStructs[e],S=[],b=0,D=function(n){for(;b"+o.htmlEscape(this.opt("weekLabel"))+"":""},t.prototype.renderNumberIntroHtml=function(e){var t=this.view,n=this.getDateEnv(),r=this.getCellDate(e,0);return t.colWeekNumbersVisible?'"+t.buildGotoAnchorHtml({date:r,type:"week",forceOff:1===this.colCnt},n.format(r,p))+"":""},t.prototype.renderBgIntroHtml=function(){var e=this.view;return e.colWeekNumbersVisible?'":""},t.prototype.renderIntroHtml=function(){var e=this.view;return e.colWeekNumbersVisible?'":""},t.prototype.getIsNumbersVisible=function(){var e=this.view;return f.default.prototype.getIsNumbersVisible.apply(this,arguments)||e.colWeekNumbersVisible},t}(e)}Object.defineProperty(t,"__esModule",{value:!0});var i=n(1),o=n(9),a=n(3),s=n(2),l=n(8),u=n(37),d=n(42),c=n(149),f=n(62),p=l.createFormatter({week:"numeric"}),h=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.colWeekNumbersVisible=!1,r.dayGrid=r.instantiateDayGrid(),r.dayGrid.isRigid=r.hasRigidRows(),r.opt("weekNumbers")&&(r.opt("weekNumbersWithinDays")?(r.dayGrid.cellWeekNumbersVisible=!0,r.colWeekNumbersVisible=!1):(r.dayGrid.cellWeekNumbersVisible=!1,r.colWeekNumbersVisible=!0)),r.addChild(r.dayGrid),r.scroller=new u.default("hidden","auto"),r}return i.__extends(t,e),t.prototype.instantiateDayGrid=function(){return new(r(this.dayGridClass))(this)},t.prototype.renderDates=function(t){this.dayGrid.breakOnWeeks=/year|month|week/.test(this.dateProfile.currentRangeUnit),e.prototype.renderDates.call(this,t)},t.prototype.renderSkeleton=function(){var e,t;this.el.classList.add("fc-basic-view"),this.el.innerHTML=this.renderSkeletonHtml(),this.scroller.applyOverflow(),e=this.scroller.el,e.classList.add("fc-day-grid-container"),t=a.createElement("div",{className:"fc-day-grid"}),e.appendChild(t),this.el.querySelector(".fc-body > tr > td").appendChild(e),this.dayGrid.headContainerEl=this.el.querySelector(".fc-head-container"),this.dayGrid.setElement(t)},t.prototype.unrenderSkeleton=function(){this.dayGrid.removeElement(),this.scroller.removeElement()},t.prototype.renderSkeletonHtml=function(){var e=this.getTheme();return''+(this.opt("columnHeader")?' ':"")+''},t.prototype.weekNumberStyleAttr=function(){return null!=this.weekNumberWidth?'style="width:'+this.weekNumberWidth+'px"':""},t.prototype.hasRigidRows=function(){var e=this.opt("eventLimit");return e&&"number"!=typeof e},t.prototype.updateBaseSize=function(e,t){var n,r,i=this.dayGrid,o=this.opt("eventLimit"),l=i.headContainerEl?i.headContainerEl.querySelector(".fc-row"):null;if(!i.rowEls)return void(t||(n=this.computeScrollerHeight(e),this.scroller.setHeight(n)));this.colWeekNumbersVisible&&(this.weekNumberWidth=s.matchCellWidths(a.findElements(this.el,".fc-week-number"))),this.scroller.clear(),l&&s.uncompensateScroll(l),i.removeSegPopover(),o&&"number"==typeof o&&i.limitRows(o),n=this.computeScrollerHeight(e),this.setGridHeight(n,t),o&&"number"!=typeof o&&i.limitRows(o),t||(this.scroller.setHeight(n),r=this.scroller.getScrollbarWidths(),(r.left||r.right)&&(l&&s.compensateScroll(l,r),n=this.computeScrollerHeight(e),this.scroller.setHeight(n)),this.scroller.lockOverflow(r))},t.prototype.computeScrollerHeight=function(e){return e-s.subtractInnerElHeight(this.el,this.scroller.el)},t.prototype.setGridHeight=function(e,t){t?s.undistributeHeight(this.dayGrid.rowEls):s.distributeHeight(this.dayGrid.rowEls,e,!0)},t.prototype.computeInitialDateScroll=function(){return{top:0}},t.prototype.queryDateScroll=function(){return{top:this.scroller.getScrollTop()}},t.prototype.applyDateScroll=function(e){void 0!==e.top&&this.scroller.setScrollTop(e.top)},t}(d.default);t.default=h,h.prototype.dateProfileGeneratorClass=c.default,h.prototype.dayGridClass=f.default},function(t,n){t.exports=e},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,t){function n(e,t){for(var n=0,r=0;r0},e.prototype.canScrollHorizontally=function(){return this.getMaxScrollLeft()>0},e.prototype.canScrollUp=function(){return this.getScrollTop()>0},e.prototype.canScrollDown=function(){return this.getScrollTop()0},e.prototype.canScrollRight=function(){return this.getScrollLeft() tr > td").appendChild(e),this.timeGrid.headContainerEl=this.el.querySelector(".fc-head-container"),this.timeGrid.setElement(t),this.dayGrid&&(this.dayGrid.setElement(this.el.querySelector(".fc-day-grid")),this.dayGrid.bottomCoordPadding=this.el.querySelector(".fc-divider").offsetHeight)},t.prototype.unrenderSkeleton=function(){this.timeGrid.removeElement(),this.dayGrid&&this.dayGrid.removeElement(),this.scroller.removeElement()},t.prototype.renderSkeletonHtml=function(){var e=this.getTheme();return''+(this.opt("columnHeader")?' ':"")+''+(this.dayGrid?'':"")+""},t.prototype.axisStyleAttr=function(){return null!=this.axisWidth?'style="width:'+this.axisWidth+'px"':""},t.prototype.renderChildren=function(e,t){var n=null,r=null;e.dateSelection&&(e.dateSelection.allDay?n=e.dateSelection:r=e.dateSelection),this.timeGrid.render({dateProfile:e.dateProfile,eventStore:this.filterEventsForTimeGrid(e.eventStore,e.eventUis),eventUis:e.eventUis,dateSelection:r,eventSelection:e.eventSelection,eventDrag:this.buildEventDragForTimeGrid(e.eventDrag),eventResize:this.buildEventResizeForTimeGrid(e.eventResize),businessHours:e.businessHours},t),this.dayGrid&&this.dayGrid.render({dateProfile:e.dateProfile,eventStore:this.filterEventsForDayGrid(e.eventStore,e.eventUis),eventUis:e.eventUis,dateSelection:n,eventSelection:e.eventSelection,eventDrag:this.buildEventDragForDayGrid(e.eventDrag),eventResize:this.buildEventResizeForDayGrid(e.eventResize),businessHours:e.businessHours},t)},t.prototype.getNowIndicatorUnit=function(){return this.timeGrid.getNowIndicatorUnit()},t.prototype.updateBaseSize=function(e,t){var n,r,i,o=this;if(this.axisWidth=p.matchCellWidths(f.findElements(this.el,".fc-axis")),!this.timeGrid.colEls)return void(t||(r=this.computeScrollerHeight(e),this.scroller.setHeight(r)));var a=f.findElements(this.el,".fc-row").filter(function(e){return!o.scroller.el.contains(e)});this.timeGrid.bottomRuleEl.style.display="none",this.scroller.clear(),a.forEach(p.uncompensateScroll),this.dayGrid&&(this.dayGrid.removeSegPopover(),n=this.opt("eventLimit"),n&&"number"!=typeof n&&(n=5),n&&this.dayGrid.limitRows(n)),t||(r=this.computeScrollerHeight(e),this.scroller.setHeight(r),i=this.scroller.getScrollbarWidths(),(i.left||i.right)&&(a.forEach(function(e){p.compensateScroll(e,i)}),r=this.computeScrollerHeight(e),this.scroller.setHeight(r)),this.scroller.lockOverflow(i),this.timeGrid.getTotalSlatHeight()"+t.buildGotoAnchorHtml({date:i,type:"week",forceOff:this.colCnt>1},d.htmlEscape(e))+""):'"},renderBgIntroHtml:function(){var e=this.view;return'"},renderIntroHtml:function(){return'"}},l={renderBgIntroHtml:function(){var e=this.view;return'"+e.getAllDayHtml()+""},renderIntroHtml:function(){return'"}}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),i=n(9),o=n(3),a=n(58),s=n(49),l=n(11),u=n(186),d=n(187),c=n(188),f=n(10),p=n(6),h=n(8),g=n(21),v=n(61),y=[{hours:1},{minutes:30},{minutes:15},{seconds:30},{seconds:15}],m=function(e){function t(t){var n=e.call(this,t)||this;return n.isInteractable=!0,n.doesDragMirror=!0,n.doesDragHighlight=!1,n.slicingType="timed",n.processOptions(),n}return r.__extends(t,e),t.prototype.rangeToSegs=function(e){if(e=l.intersectRanges(e,this.dateProfile.validRange)){var t=this.sliceRangeByTimes(e),n=void 0;for(n=0;n=0;t--)if(n=f.createDuration(y[t]),null!==(r=f.wholeDivideDurations(n,e))&&r>1)return n;return e},t.prototype.renderDates=function(){this.updateDayTable(),this.renderSlats(),this.renderColumns()},t.prototype.unrenderDates=function(){this.unrenderColumns()},t.prototype.renderSkeleton=function(){var e=this.getTheme();this.el.innerHTML='',this.rootBgContainerEl=this.el.querySelector(".fc-bg"),this.slatContainerEl=this.el.querySelector(".fc-slats"),this.bottomRuleEl=this.el.querySelector(".fc-divider")},t.prototype.renderSlats=function(){var e=this.getTheme();this.slatContainerEl.innerHTML=''+this.renderSlatRowHtml()+"",this.slatEls=o.findElements(this.slatContainerEl,"tr"),this.slatPositions=new s.default(this.el,this.slatEls,!1,!0)},t.prototype.renderSlatRowHtml=function(){for(var e,t,n,r=this.view,o=this.getDateEnv(),a=this.getTheme(),s=this.isRtl,l=this.dateProfile,u="",d=p.startOfDay(l.renderRange.start),c=l.minTime,g=f.createDuration(0);f.asRoughMs(c)"+(t?""+i.htmlEscape(o.format(e,this.labelFormat))+"":"")+"",u+='"+(s?"":n)+''+(s?n:"")+"",c=f.addDurations(c,this.slotDuration),g=f.addDurations(g,this.slotDuration);return u},t.prototype.renderColumns=function(){var e=this.dateProfile,t=this.getTheme(),n=this.getDateEnv();this.dayRanges=this.dayDates.map(function(t){return{start:n.add(t,e.minTime),end:n.add(t,e.maxTime)}}),this.headContainerEl&&(this.headContainerEl.innerHTML=this.renderHeadHtml()),this.rootBgContainerEl.innerHTML=''+this.renderBgTrHtml(0)+"",this.colEls=o.findElements(this.el,".fc-day, .fc-disabled-day"),this.colPositions=new s.default(this.el,this.colEls,!0,!1),this.renderContentSkeleton()},t.prototype.unrenderColumns=function(){this.unrenderContentSkeleton()},t.prototype.renderContentSkeleton=function(){var e,t,n="";for(e=0;e';t=this.contentSkeletonEl=o.htmlToElement(''+n+""),this.colContainerEls=o.findElements(t,".fc-content-col"),this.mirrorContainerEls=o.findElements(t,".fc-mirror-container"),this.fgContainerEls=o.findElements(t,".fc-event-container:not(.fc-mirror-container)"),this.bgContainerEls=o.findElements(t,".fc-bgevent-container"),this.highlightContainerEls=o.findElements(t,".fc-highlight-container"),this.businessContainerEls=o.findElements(t,".fc-business-container"),this.bookendCells(t.querySelector("tr")),this.el.appendChild(t)},t.prototype.unrenderContentSkeleton=function(){o.removeElement(this.contentSkeletonEl)},t.prototype.groupSegsByCol=function(e){var t,n=[];for(t=0;t0){var s=o.createElement("div",{className:"fc-now-indicator fc-now-indicator-arrow"});s.style.top=r+"px",this.contentSkeletonEl.appendChild(s),i.push(s)}this.nowIndicatorEls=i}},t.prototype.unrenderNowIndicator=function(){this.nowIndicatorEls&&(this.nowIndicatorEls.forEach(o.removeElement),this.nowIndicatorEls=null)},t.prototype.getTotalSlatHeight=function(){return this.slatContainerEl.offsetHeight},t.prototype.computeDateTop=function(e,t){return t||(t=p.startOfDay(e)),this.computeTimeTop(e.valueOf()-t.valueOf())},t.prototype.computeTimeTop=function(e){var t,n,r=this.slatEls.length,i=this.dateProfile,o=(e-f.asRoughMs(i.minTime))/f.asRoughMs(this.slotDuration);return o=Math.max(0,o),o=Math.min(r,o),t=Math.floor(o),t=Math.min(t,r-1),n=o-t,this.slatPositions.tops[t]+this.slatPositions.getHeight(t)*n},t.prototype.computeSegVerticals=function(e){var t,n,r,i=this.opt("agendaEventMinHeight");for(t=0;t=e.leftCol)return!0;return!1}function i(e,t){return e.leftCol-t.leftCol}Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),a=n(9),s=n(3),l=n(18),u=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.dayGrid=t,r}return o.__extends(t,e),t.prototype.renderBgSegs=function(t){return t=t.filter(function(e){return e.eventRange.def.allDay}),e.prototype.renderBgSegs.call(this,t)},t.prototype.renderFgSegs=function(e){var t=this.rowStructs=this.renderSegRows(e);this.dayGrid.rowEls.forEach(function(e,n){e.querySelector(".fc-content-skeleton > table").appendChild(t[n].tbodyEl)})},t.prototype.unrenderFgSegs=function(){for(var e,t=this.rowStructs||[];e=t.pop();)s.removeElement(e.tbodyEl);this.rowStructs=null},t.prototype.renderSegRows=function(e){var t,n,r=[];for(t=this.groupSegRows(e),n=0;n'+a.htmlEscape(t)+""),n=''+(a.htmlEscape(i.title||"")||" ")+"",''+(this.component.isRtl?n+" "+p:p+" "+n)+""+(u?'':"")+(d?'':"")+""},t}(l.default);t.default=u},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),i=n(57),o=n(6),a=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r.__extends(t,e),t.prototype.buildRenderRange=function(t,n,r){var i,a=this._view.calendar.dateEnv,s=e.prototype.buildRenderRange.call(this,t,n,r),l=s.start,u=s.end;return/^(year|month)$/.test(n)&&(l=a.startOfWeek(l),i=a.startOfWeek(u),i.valueOf()!==u.valueOf()&&(u=o.addWeeks(i,1))),{start:l,end:u}},t}(i.default);t.default=a},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),i=n(2),o=n(63),a=n(193),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r.__extends(t,e),t.prototype.setGridHeight=function(e,t){t&&(e*=this.dayGrid.rowCnt/6),i.distributeHeight(this.dayGrid.rowEls,e,!t)},t.prototype.isDateInOtherMonth=function(e,t){var n=this.getDateEnv();return n.getMonth(e)!==n.getMonth(t.currentRange.start)},t}(o.default);t.default=s,s.prototype.dateProfileGeneratorClass=a.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),i=n(3),o=n(9),a=n(2),s=n(42),l=n(37),u=n(194),d=n(6),c=n(8),f=n(11),p=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.isInteractable=!0,r.slicingType="all-day",r.fgSegSelector=".fc-list-item",r.scroller=new l.default("hidden","auto"),r}return r.__extends(t,e),t.prototype.renderSkeleton=function(){this.el.classList.add("fc-list-view");var e=this.calendar.theme.getClass("listView");e&&this.el.classList.add(e),this.scroller.applyOverflow(),this.el.appendChild(this.scroller.el),this.contentEl=this.scroller.el},t.prototype.unrenderSkeleton=function(){this.scroller.removeElement()},t.prototype.updateBaseSize=function(e,t){this.scroller.clear(),t||this.scroller.setHeight(this.computeScrollerHeight(e))},t.prototype.computeScrollerHeight=function(e){return e-a.subtractInnerElHeight(this.el,this.scroller.el)},t.prototype.renderDates=function(e){for(var t=d.startOfDay(e.renderRange.start),n=e.renderRange.end,r=[],i=[];t'+o.htmlEscape(this.opt("noEventsMessage"))+""},t.prototype.renderSegList=function(e){var t,n,r,o=this.groupSegsByDay(e),a=i.htmlToElement(''),s=a.querySelector("tbody");for(t=0;t'+(n?this.buildGotoAnchorHtml(e,{class:"fc-list-heading-main"},o.htmlEscape(t.format(e,n))):"")+(r?this.buildGotoAnchorHtml(e,{class:"fc-list-heading-alt"},o.htmlEscape(t.format(e,r))):"")+"")},t}(s.default);t.default=p,p.prototype.eventRendererClass=u.default},function(e,t,n){function r(e,t,n){var r=l.parseEventDef(t.leftoverProps,t.sourceId,e.allDay,Boolean(t.duration),n),i=e.range.start;e.allDay&&t.time&&(i=n.dateEnv.add(i,t.time));var o=t.duration?n.dateEnv.add(i,t.duration):n.getDefaultEventEnd(e.allDay,i);return{def:r,instance:l.createEventInstance(r.defId,{start:i,end:o})}}function i(e){var t=o(e,"event"),n=t?JSON.parse(t):{create:!1};return c.parseDragMeta(n)}function o(e,t){var n=d.dataAttrPrefix,r=(n?n+"-":"")+t;return e.getAttribute("data-"+r)||""}Object.defineProperty(t,"__esModule",{value:!0});var a=n(31),s=n(53),l=n(29),u=n(14),d=n(25),c=n(196),f=n(15),p=n(3),h=n(2),g=n(39),v=function(){function e(e,t){var n=this;this.receivingCalendar=null,this.droppableEvent=null,this.suppliedDragMeta=null,this.dragMeta=null,this.handleDragStart=function(e){n.dragMeta=n.buildDragMeta(e.subjectEl)},this.handleHitUpdate=function(e,t,i){var o=n.hitDragging.dragging,a=null,s=null,l=!1;e&&(a=e.component.getCalendar(),n.canDropElOnCalendar(i.subjectEl,a)&&(s=r(e.dateSpan,n.dragMeta,a),(l=n.dragMeta.create?!g.isEventsValid(u.eventTupleToStore(s),a):!g.isSelectionValid(g.eventToDateSpan(s.def,s.instance),a))&&(s=null)));var d=s?u.eventTupleToStore(s):u.createEmptyEventStore();n.displayDrag(a,{affectedEvents:u.createEmptyEventStore(),mutatedEvents:d,isEvent:n.dragMeta.create,origSeg:null}),o.setMirrorIsVisible(t||!s||!document.querySelector(".fc-mirror")),l?h.disableCursor():h.enableCursor(),t||(o.setMirrorNeedsRevert(!s),n.receivingCalendar=a,n.droppableEvent=s)},this.handleDragEnd=function(e){var t=n,r=t.receivingCalendar,i=t.droppableEvent;if(n.clearDrag(),r&&i){var o=n.hitDragging.finalHit,a=o.component.view,s=n.dragMeta;r.publiclyTrigger("drop",[{draggedEl:e.subjectEl,date:r.dateEnv.toDate(o.dateSpan.range.start),allDay:o.dateSpan.allDay,jsEvent:e.origEvent,view:a}]),s.create&&(r.dispatch({type:"MERGE_EVENTS",eventStore:u.eventTupleToStore(i)}),e.isTouch&&r.dispatch({type:"SELECT_EVENT",eventInstanceId:i.instance.instanceId}),r.publiclyTrigger("eventReceive",[{draggedEl:e.subjectEl,event:new f.default(r,i.def,i.instance),view:a}]))}n.receivingCalendar=null,n.droppableEvent=null};var i=this.hitDragging=new a.default(e,s.default.componentHash);i.requireInitial=!1,i.emitter.on("dragstart",this.handleDragStart),i.emitter.on("hitupdate",this.handleHitUpdate),i.emitter.on("dragend",this.handleDragEnd),this.suppliedDragMeta=t}return e.prototype.buildDragMeta=function(e){return"object"==typeof this.suppliedDragMeta?c.parseDragMeta(this.suppliedDragMeta):"function"==typeof this.suppliedDragMeta?c.parseDragMeta(this.suppliedDragMeta(e)):i(e)},e.prototype.displayDrag=function(e,t){var n=this.receivingCalendar;n&&n!==e&&n.dispatch({type:"UNSET_EVENT_DRAG"}),e&&e.dispatch({type:"SET_EVENT_DRAG",state:t})},e.prototype.clearDrag=function(){this.receivingCalendar&&this.receivingCalendar.dispatch({type:"UNSET_EVENT_DRAG"})},e.prototype.canDropElOnCalendar=function(e,t){var n=t.opt("dropAccept");return"function"==typeof n?n(e):"string"!=typeof n||!n||Boolean(p.elementMatches(e,n))},e}();t.default=v,d.dataAttrPrefix=""},,,,,,,,,,,,function(e,t,n){var r=n(25);n(200),n(203),n(204),n(205),n(206),n(207),n(209),n(210),e.exports=r},function(e,t,n){function r(){return null===s&&(s=i()),s}function i(){var e=a.createElement("div",{style:{position:"absolute",top:-1e3,left:0,border:0,padding:0,overflow:"scroll",direction:"rtl"}},"");document.body.appendChild(e);var t=e.firstChild,n=t.getBoundingClientRect().left>e.getBoundingClientRect().left;return a.removeElement(e),n}function o(e){return e=Math.max(0,e),e=Math.round(e)}Object.defineProperty(t,"__esModule",{value:!0});var a=n(3),s=null;t.getIsRtlScrollbarOnLeft=r,t.sanitizeScrollbarWidth=o},function(e,t,n){function r(e,t,n){var r=Object.keys(e).length;return 1===r&&"short"===e.timeZoneName?function(e){return h.formatTimeZoneOffset(e.timeZoneOffset)}:0===r&&t.week?function(e){return l(n.computeWeekNumber(e.marker),n.weekLabel,n.locale,t.week)}:i(e,t,n)}function i(e,t,n){e=f.assignTo({},e),t=f.assignTo({},t),o(e,t),e.timeZone="UTC";var r,i=new Intl.DateTimeFormat(n.locale.codes,e);if(t.omitZeroMinute){var s=f.assignTo({},e);delete s.minute,r=new Intl.DateTimeFormat(n.locale.codes,s)}return function(o){var s,l=o.marker;return s=r&&!l.getUTCMinutes()?r:i,a(s.format(l),o,e,t,n)}}function o(e,t){e.timeZoneName&&(e.hour||(e.hour="2-digit"),e.minute||(e.minute="2-digit")),"long"===e.timeZoneName&&(e.timeZoneName="short"),t.omitZeroMinute&&(e.second||e.millisecond)&&delete t.omitZeroMinute}function a(e,t,n,r,i){return e=e.replace(b,""),"short"===n.timeZoneName&&(e=s(e,"UTC"===i.timeZone||null==t.timeZoneOffset?"UTC":h.formatTimeZoneOffset(t.timeZoneOffset))),r.omitCommas&&(e=e.replace(E,"").trim()),r.omitZeroMinute&&(e=e.replace(":00","")),!1===r.meridiem?e=e.replace(m,"").trim():"narrow"===r.meridiem?e=e.replace(m,function(e,t){return t.toLocaleLowerCase()}):"short"===r.meridiem?e=e.replace(m,function(e,t){return t.toLocaleLowerCase()+"m"}):"lowercase"===r.meridiem&&(e=e.replace(m,function(e){return e.toLocaleLowerCase()})),e=e.replace(S," "),e=e.trim()}function s(e,t){var n=!1;return e=e.replace(D,function(){return n=!0,t}),n||(e+=" "+t),e}function l(e,t,n,r){var i=[];return"narrow"===r?i.push(t):"short"===r&&i.push(t," "),i.push(n.simpleNumberFormat.format(e)),n.options.isRtl&&i.reverse(),i.join("")}function u(e,t,n){return n.getMarkerYear(e)!==n.getMarkerYear(t)?5:n.getMarkerMonth(e)!==n.getMarkerMonth(t)?4:n.getMarkerDay(e)!==n.getMarkerDay(t)?2:p.timeAsMs(e)!==p.timeAsMs(t)?1:0}function d(e,t){var n={};for(var r in e)r in y&&!(y[r]<=t)||(n[r]=e[r]);return n}function c(e,t,n,r){for(var i=0;i1)||"numeric"!==o.year&&"2-digit"!==o.year||"numeric"!==o.month&&"2-digit"!==o.month||"numeric"!==o.day&&"2-digit"!==o.day||(l=1) +;var f=this.format(e,n),p=this.format(t,n);if(f===p)return f;var h=d(o,l),g=r(h,a,n),v=g(e),y=g(t),m=c(f,v,p,y),E=a.separator||"";return m?m.before+v+E+y+m.after:f+E+p},e.prototype.getLargestUnit=function(){switch(this.severity){case 7:case 6:case 5:return"year";case 4:return"month";case 3:return"week";default:return"day"}},e}();t.NativeFormatter=w},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(8),i=function(){function e(e){this.func=e}return e.prototype.format=function(e,t){return this.func(r.createVerboseFormattingArg(e,null,t))},e.prototype.formatRange=function(e,t,n){return this.func(r.createVerboseFormattingArg(e,t,n))},e}();t.FuncFormatter=i},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(30),i=n(31),o=function(){function e(e){var t=this;this.handlePointerDown=function(e){var n=t.dragging;n.setIgnoreMove(!t.component.isValidDateDownEl(n.pointer.downEl))},this.handleDragEnd=function(e){var n=t.component;if(!t.dragging.pointer.wasTouchScroll){var r=t.hitDragging,o=r.initialHit,a=r.finalHit;o&&a&&i.isHitsEqual(o,a)&&n.getCalendar().triggerDayClick(o.dateSpan,o.dayEl,n.view,e.origEvent)}},this.component=e,this.dragging=new r.default(e.el),this.dragging.autoScroller.isEnabled=!1;var n=this.hitDragging=new i.default(this.dragging,e);n.emitter.on("pointerdown",this.handlePointerDown),n.emitter.on("dragend",this.handleDragEnd)}return e.prototype.destroy=function(){this.dragging.destroy()},e}();t.default=o},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(3),i=n(19),o=function(){function e(){this.isVisible=!1,this.sourceEl=null,this.mirrorEl=null,this.sourceElRect=null,this.parentNode=document.body,this.zIndex=9999,this.revertDuration=0}return e.prototype.start=function(e,t,n){this.sourceEl=e,this.sourceElRect=this.sourceEl.getBoundingClientRect(),this.origScreenX=t-window.pageXOffset,this.origScreenY=n-window.pageYOffset,this.deltaX=0,this.deltaY=0,this.updateElPosition()},e.prototype.handleMove=function(e,t){this.deltaX=e-window.pageXOffset-this.origScreenX,this.deltaY=t-window.pageYOffset-this.origScreenY,this.updateElPosition()},e.prototype.setIsVisible=function(e){e?this.isVisible||(this.mirrorEl&&(this.mirrorEl.style.display=""),this.isVisible=e,this.updateElPosition()):this.isVisible&&(this.mirrorEl&&(this.mirrorEl.style.display="none"),this.isVisible=e)},e.prototype.stop=function(e,t){var n=this,r=function(){n.cleanup(),t()};e&&this.mirrorEl&&this.isVisible&&this.revertDuration&&(this.deltaX||this.deltaY)?this.doRevertAnimation(r,this.revertDuration):setTimeout(r,0)},e.prototype.doRevertAnimation=function(e,t){var n=this.mirrorEl,o=this.sourceEl.getBoundingClientRect();n.style.transition="top "+t+"ms,left "+t+"ms",r.applyStyle(n,{left:o.left,top:o.top}),i.whenTransitionDone(n,function(){n.style.transition="",e()})},e.prototype.cleanup=function(){this.mirrorEl&&(r.removeElement(this.mirrorEl),this.mirrorEl=null),this.sourceEl=null},e.prototype.updateElPosition=function(){this.sourceEl&&this.isVisible&&r.applyStyle(this.getMirrorEl(),{left:this.sourceElRect.left+this.deltaX,top:this.sourceElRect.top+this.deltaY})},e.prototype.getMirrorEl=function(){var e=this.sourceElRect,t=this.mirrorEl;return t||(t=this.mirrorEl=this.sourceEl.cloneNode(!0),t.classList.add("fc-unselectable"),t.classList.add("fc-dragging"),r.applyStyle(t,{position:"fixed",zIndex:this.zIndex,visibility:"",boxSizing:"border-box",width:e.right-e.left,height:e.bottom-e.top,right:"auto",bottom:"auto",margin:0}),this.parentNode.appendChild(t)),t},e}();t.default=o},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(142),i="function"==typeof performance?performance.now:Date.now,o=function(){function e(){var e=this;this.isEnabled=!0,this.scrollQuery=[window,".fc-scroller"],this.edgeThreshold=50,this.maxVelocity=300,this.pointerScreenX=null,this.pointerScreenY=null,this.isAnimating=!1,this.scrollCaches=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.animate=function(){if(e.isAnimating){var t=e.computeBestEdge(e.pointerScreenX+window.pageXOffset,e.pointerScreenY+window.pageYOffset);if(t){var n=i();e.handleSide(t,(n-e.msSinceRequest)/1e3),e.requestAnimation(n)}else e.isAnimating=!1}}}return e.prototype.start=function(e,t){this.isEnabled&&(this.scrollCaches=this.buildCaches(),this.pointerScreenX=null,this.pointerScreenY=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.handleMove(e,t))},e.prototype.handleMove=function(e,t){if(this.isEnabled){var n=e-window.pageXOffset,r=t-window.pageYOffset,o=null===this.pointerScreenY?0:r-this.pointerScreenY,a=null===this.pointerScreenX?0:n-this.pointerScreenX;o<0?this.everMovedUp=!0:o>0&&(this.everMovedDown=!0),a<0?this.everMovedLeft=!0:o>0&&(this.everMovedRight=!0),this.pointerScreenX=n,this.pointerScreenY=r,this.isAnimating||(this.isAnimating=!0,this.requestAnimation(i()))}},e.prototype.stop=function(){if(this.isEnabled){this.isAnimating=!1;for(var e=0,t=this.scrollCaches;e=0&&u>=0&&d>=0&&c>=0&&(d<=n&&this.everMovedUp&&a.canScrollUp()&&(!r||r.distance>d)&&(r={scrollCache:a,name:"top",distance:d}),c<=n&&this.everMovedDown&&a.canScrollDown()&&(!r||r.distance>c)&&(r={scrollCache:a,name:"bottom",distance:c}),l<=n&&this.everMovedLeft&&a.canScrollLeft()&&(!r||r.distance>l)&&(r={scrollCache:a,name:"left",distance:l}),u<=n&&this.everMovedRight&&a.canScrollRight()&&(!r||r.distance>u)&&(r={scrollCache:a,name:"right",distance:u}))}return r},e.prototype.buildCaches=function(){return this.queryScrollEls().map(function(e){return e===window?new r.WindowScrollGeomCache(!1):new r.ElementScrollGeomCache(e,!1)})},e.prototype.queryScrollEls=function(){for(var e=[],t=0,n=this.scrollQuery;tr.start)return{endDelta:s};return null}Object.defineProperty(t,"__esModule",{value:!0});var i=n(31),o=n(55),a=n(3),s=n(30),l=n(18),u=n(14),d=n(2),c=n(15),f=n(10),p=function(){function e(e){var t=this;this.draggingSeg=null,this.eventRange=null,this.relevantEvents=null,this.validMutation=null,this.mutatedRelevantEvents=null,this.handlePointerDown=function(e){var n=t.querySeg(e),r=t.eventRange=n.eventRange;t.dragging.minDistance=5,t.dragging.setIgnoreMove(!t.component.isValidSegDownEl(e.origEvent.target)||e.isTouch&&t.component.eventSelection!==r.instance.instanceId)},this.handleDragStart=function(e){var n=t.component.getCalendar(),r=t.eventRange;t.relevantEvents=u.getRelevantEvents(n.state.eventStore,t.eventRange.instance.instanceId),t.draggingSeg=t.querySeg(e),n.unselect(),n.publiclyTrigger("eventResizeStart",[{el:t.draggingSeg.el,event:new c.default(n,r.def,r.instance),jsEvent:e.origEvent,view:t.component.view}])},this.handleHitUpdate=function(e,n,a){var s=t.component.getCalendar(),l=t.relevantEvents,u=t.hitDragging.initialHit,c=t.eventRange.instance,f=null,p=null,h=!1;e&&(f=r(u,e,a.subjectEl.classList.contains("fc-start-resizer"),c.range)),f&&(p=o.applyMutationToEventStore(l,f,s),t.component.isEventsValid(p)||(h=!0,f=null,p=null)),p?s.dispatch({type:"SET_EVENT_RESIZE",state:{affectedEvents:l,mutatedEvents:p,isEvent:!0,origSeg:t.draggingSeg}}):s.dispatch({type:"UNSET_EVENT_RESIZE"}),h?d.disableCursor():d.enableCursor(),n||(f&&i.isHitsEqual(u,e)&&(f=null),t.validMutation=f,t.mutatedRelevantEvents=p)},this.handleDragEnd=function(e){var n=t.component.getCalendar(),r=t.component.view,i=t.eventRange.def,o=t.eventRange.instance,a=new c.default(n,i,o),s=t.relevantEvents,l=t.mutatedRelevantEvents;n.publiclyTrigger("eventResizeStop",[{el:t.draggingSeg.el,event:a,jsEvent:e.origEvent,view:r}]),t.validMutation?(n.dispatch({type:"MERGE_EVENTS",eventStore:l}),n.publiclyTrigger("eventResize",[{el:t.draggingSeg.el,startDelta:t.validMutation.startDelta||f.createDuration(0),endDelta:t.validMutation.endDelta||f.createDuration(0),prevEvent:a,event:new c.default(n,l.defs[i.defId],o?l.instances[o.instanceId]:null),revert:function(){n.dispatch({type:"MERGE_EVENTS",eventStore:s})},jsEvent:e.origEvent,view:r}])):n.publiclyTrigger("_noEventResize"),t.draggingSeg=null,t.relevantEvents=null,t.validMutation=null},this.component=e;var n=this.dragging=new s.default(e.el);n.pointer.selector=".fc-resizer",n.touchScrollAllowed=!1,n.autoScroller.isEnabled=e.opt("dragScroll");var a=this.hitDragging=new i.default(this.dragging,e);a.emitter.on("pointerdown",this.handlePointerDown),a.emitter.on("dragstart",this.handleDragStart),a.emitter.on("hitupdate",this.handleHitUpdate),a.emitter.on("dragend",this.handleDragEnd)}return e.prototype.destroy=function(){this.dragging.destroy()},e.prototype.querySeg=function(e){return l.getElSeg(a.elementClosest(e.subjectEl,this.component.fgSegSelector))},e}();t.default=p},function(e,t,n){function r(e,t,n,r,i,o,a){return new g.DateEnv({calendarSystem:"gregory",timeZone:t,timeZoneImpl:n,locale:h.getLocale(e),weekNumberCalculation:i,firstDay:r,weekLabel:o,cmdFormatter:a})}function i(e){return new(p.getThemeSystemClass(e.themeSystem||e.theme))(e)}function o(e){var t=this.tryRerender.bind(this);return null!=e&&(t=u.debounce(t,e)),t}Object.defineProperty(t,"__esModule",{value:!0});var a=n(3),s=n(13),l=n(19),u=n(2),d=n(20),c=n(176),f=n(177),p=n(48),h=n(41),g=n(56),v=n(6),y=n(8),m=n(10),E=n(179),S=n(50),b=n(51),D=n(4),w=n(11),T=n(22),C=n(29),R=n(141),M=n(15),H=n(14),I=n(28),_=n(182),O=n(40),P=n(143),k=n(183),x=n(25),N=function(){function e(e,t){var n=this;this.isRecentPointerDateSelect=!1,this.ignoreUpdateViewSize=0,this.actionQueue=[],this.isReducing=!1,this.isDisplaying=!1,this.isRendering=!1,this.isSkeletonRendered=!1,this.renderingPauseDepth=0,this.afterSizingTriggers={},this.onDocumentPointerUp=function(e){var t=n,r=t.state,i=t.view,o=t.documentPointer;if(!o.wasTouchScroll){if(r.dateSelection&&!n.isRecentPointerDateSelect){var s=i.opt("unselectAuto"),l=i.opt("unselectCancel");!s||s&&a.elementClosest(o.downEl,l)||n.unselect(e)}r.eventSelection&&!a.elementClosest(o.downEl,P.default.SELECTOR)&&n.dispatch({type:"UNSELECT_EVENT"})}n.isRecentPointerDateSelect=!1},this.el=e,this.viewsByType={},this.optionsManager=new f.default(t),this.buildDateEnv=b.default(r),this.buildTheme=b.default(i),this.buildDelayedRerender=b.default(o),this.computeEventDefUis=b.default(I.computeEventDefUis),this.parseBusinessHours=b.default(function(e){return _.parseBusinessHours(e,n)}),this.handleOptions(this.optionsManager.computed),this.hydrate()}return e.prototype.getView=function(){return this.view},e.prototype.render=function(){this.isDisplaying?this.elementVisible()&&(this.calcSize(),this.requestRerender(!0)):(this.isDisplaying=!0,this.renderableEventStore=H.createEmptyEventStore(),this.bindGlobalHandlers(),this.el.classList.add("fc"),this._render())},e.prototype.destroy=function(){this.isDisplaying&&(this.isDisplaying=!1,this.unbindGlobalHandlers(),this._destroy(),this.el.classList.remove("fc"))},e.prototype._render=function(){var e=this.rerenderFlags;this.rerenderFlags=null,this.isRendering=!0,this.applyElClassNames(),this.isSkeletonRendered||(this.renderSkeleton(),this.isSkeletonRendered=!0),this.freezeContentHeight(),this.renderView(e),this.view&&this.renderToolbars(e),this.updateViewSize()&&this.renderedView.popScroll(),this.thawContentHeight(),this.releaseAfterSizingTriggers(),this.isRendering=!1,this.trigger("_rendered"),this.rerenderFlags&&this.delayedRerender()},e.prototype._destroy=function(){this.view=null,this.renderedView&&(this.renderedView.removeElement(),this.renderedView=null),this.header&&(this.header.removeElement(),this.header=null),this.footer&&(this.footer.removeElement(),this.footer=null),this.unrenderSkeleton(),this.isSkeletonRendered=!1,this.removeElClassNames()},e.prototype.smash=function(){var e=this;this.batchRendering(function(){var t=e.view;if(t){e.viewsByType={},e.view=e.getViewByType(t.type),e.setCurrentDateMarker(e.state.dateProfile.currentDate);var n=t.queryScroll();n.isLocked=!0,e.view.addScroll(n)}e.requestRerender(!0)})},e.prototype.applyElClassNames=function(){var e=this.el.classList,t="fc-"+this.opt("dir"),n=this.theme.getClass("widget");t!==this.elDirClassName&&(this.elDirClassName&&e.remove(this.elDirClassName),e.add(t),this.elDirClassName=t),n!==this.elThemeClassName&&(this.elThemeClassName&&e.remove(this.elThemeClassName),e.add(n),this.elThemeClassName=n)},e.prototype.removeElClassNames=function(){var e=this.el.classList;this.elDirClassName&&(e.remove(this.elDirClassName),this.elDirClassName=null),this.elThemeClassName&&(e.remove(this.elThemeClassName),this.elThemeClassName=null)},e.prototype.renderSkeleton=function(){var e=this;a.prependToElement(this.el,this.contentEl=a.createElement("div",{className:"fc-view-container"})),this.removeNavLinkListener=l.listenBySelector(this.el,"click","a[data-goto]",function(t,n){var r=n.getAttribute("data-goto");r=r?JSON.parse(r):{};var i=e.dateEnv.createMarker(r.date),o=r.type,a=e.renderedView.opt("navLink"+u.capitaliseFirstLetter(o)+"Click");"function"==typeof a?a(i,t):("string"==typeof a&&(o=a),e.zoomTo(i,o))})},e.prototype.unrenderSkeleton=function(){a.removeElement(this.contentEl),this.removeNavLinkListener()},e.prototype.bindGlobalHandlers=function(){var e=this.documentPointer=new O.default(document);e.shouldIgnoreMove=!0,e.shouldWatchScroll=!1,e.emitter.on("pointerup",this.onDocumentPointerUp),this.opt("handleWindowResize")&&window.addEventListener("resize",this.windowResizeProxy=u.debounce(this.windowResize.bind(this),this.opt("windowResizeDelay")))},e.prototype.unbindGlobalHandlers=function(){this.documentPointer.destroy(),this.windowResizeProxy&&(window.removeEventListener("resize",this.windowResizeProxy),this.windowResizeProxy=null)},e.prototype.hydrate=function(){this.state=this.buildInitialState();var e=this.opt("eventSources")||[],t=this.opt("events"),n=[];t&&e.unshift(t);for(var r=0,i=e;r')},t.prototype.unrenderLayout=function(){this.el.innerHTML=""},t.prototype.removeElement=function(){this.unrenderLayout(),this.isLayoutRendered=!1,this.layout=null, +this.title=null,this.activeButton=null,this.isTodayEnabled=null,this.isPrevEnabled=null,this.isNextEnabled=null,e.prototype.removeElement.call(this)},t.prototype.renderSection=function(e,t){var n=this,r=this.calendar,a=r.theme,s=r.optionsManager,l=r.viewSpecs,u=o.createElement("div",{className:"fc-"+e}),d=s.computed.customButtons||{},c=s.overrides.buttonText||{},f=s.computed.buttonText||{};return t&&t.split(" ").forEach(function(e,t){var s,p=[],h=!0;if(e.split(",").forEach(function(e,t){var s,u,g,v,y,m,E,S,b;if("title"===e)p.push(o.htmlToElement(" ")),h=!1;else if((s=d[e])?(g=function(e){s.click&&s.click.call(S,e)},(v=a.getCustomButtonIconClass(s))||(v=a.getIconClass(e))||(y=s.text)):(u=l[e])?(n.viewsWithButtons.push(e),g=function(){r.changeView(e)},(y=u.buttonTextOverride)||(v=a.getIconClass(e))||(y=u.buttonTextDefault)):r[e]&&(g=function(){r[e]()},(y=c[e])||(v=a.getIconClass(e))||(y=f[e])),g){E=["fc-"+e+"-button",a.getClass("button"),a.getClass("stateDefault")],y?(m=i.htmlEscape(y),b=""):v&&(m="",b=' aria-label="'+e+'"'),S=o.htmlToElement('"+m+"");var D=function(){var e=a.getClass("stateActive"),t=a.getClass("stateDisabled");return!(e&&S.classList.contains(e)||t&&S.classList.contains(t))};S.addEventListener("click",function(e){var t=a.getClass("stateDisabled"),n=a.getClass("stateHover");t&&S.classList.contains(t)||(g(e),!D()&&n&&S.classList.remove(n))}),S.addEventListener("mousedown",function(e){var t=a.getClass("stateDown");D()&&t&&S.classList.add(t)}),S.addEventListener("mouseup",function(e){var t=a.getClass("stateDown");t&&S.classList.remove(t)}),S.addEventListener("mouseenter",function(e){var t=a.getClass("stateHover");D()&&t&&S.classList.add(t)}),S.addEventListener("mouseleave",function(e){var t=a.getClass("stateHover"),n=a.getClass("stateDown");t&&S.classList.remove(t),n&&S.classList.remove(n)}),p.push(S)}}),h&&p.length>0){var g=a.getClass("cornerLeft"),v=a.getClass("cornerRight");g&&p[0].classList.add(g),v&&p[p.length-1].classList.add(v)}if(p.length>1){s=document.createElement("div");var y=a.getClass("buttonGroup");h&&y&&s.classList.add(y),o.appendToElement(s,p),u.appendChild(s)}else o.appendToElement(u,p)}),u},t.prototype.updateTitle=function(e){o.findElements(this.el,"h2").forEach(function(t){t.innerText=e})},t.prototype.activateButton=function(e){var t=this;o.findElements(this.el,".fc-"+e+"-button").forEach(function(e){e.classList.add(t.calendar.theme.getClass("stateActive"))})},t.prototype.deactivateButton=function(e){var t=this;o.findElements(this.el,".fc-"+e+"-button").forEach(function(e){e.classList.remove(t.calendar.theme.getClass("stateActive"))})},t.prototype.disableButton=function(e){var t=this;o.findElements(this.el,".fc-"+e+"-button").forEach(function(e){e.disabled=!0,e.classList.add(t.calendar.theme.getClass("stateDisabled"))})},t.prototype.enableButton=function(e){var t=this;o.findElements(this.el,".fc-"+e+"-button").forEach(function(e){e.disabled=!1,e.classList.remove(t.calendar.theme.getClass("stateDisabled"))})},t.prototype.getViewsWithButtons=function(){return this.viewsWithButtons},t}(a.default);t.default=s},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(4),i=n(2),o=n(32),a=n(41),s=function(){function e(e){this.overrides=r.assignTo({},e),this.dynamicOverrides={},this.compute()}return e.prototype.add=function(e,t){this.dynamicOverrides[e]=t,this.compute()},e.prototype.compute=function(){var e,t,n,r;e=i.firstDefined(this.dynamicOverrides.locale,this.overrides.locale,o.globalDefaults.locale),t=a.getLocale(e).options,n=i.firstDefined(this.dynamicOverrides.dir,this.overrides.dir,t.dir),r="rtl"===n?o.rtlDefaults:{},this.dirDefaults=r,this.localeDefaults=t,this.computed=o.mergeOptions([o.globalDefaults,r,t,this.overrides,this.dynamicOverrides])},e}();t.default=s},function(e,t,n){function r(e,t){a[e]=t}function i(e){return new a[e]}Object.defineProperty(t,"__esModule",{value:!0});var o=n(6),a={};t.registerCalendarSystem=r,t.createCalendarSystem=i,r("gregory",function(){function e(){}return e.prototype.getMarkerYear=function(e){return e.getUTCFullYear()},e.prototype.getMarkerMonth=function(e){return e.getUTCMonth()},e.prototype.getMarkerDay=function(e){return e.getUTCDate()},e.prototype.arrayToMarker=function(e){return o.arrayToUtcDate(e)},e.prototype.markerToArray=function(e){return o.dateToUtcArray(e)},e}())},function(e,t,n){function r(e,t,n){n.publiclyTrigger(t.type,t);var r=i(e.dateProfile,t),f=d.default(e.eventSources,t,r,n);return{dateProfile:r,eventSources:f,eventStore:c.default(e.eventStore,t,f,r,n),eventUis:e.eventUis,businessHours:e.businessHours,dateSelection:o(e.dateSelection,t,n),eventSelection:a(e.eventSelection,t),eventDrag:s(e.eventDrag,t,f,n),eventResize:l(e.eventResize,t,f,n),eventSourceLoadingLevel:u(f),loadingLevel:u(f)}}function i(e,t){switch(t.type){case"SET_DATE_PROFILE":return e&&f.isDateProfilesEqual(e,t.dateProfile)?e:t.dateProfile;default:return e}}function o(e,t,n){switch(t.type){case"SELECT_DATES":return t.selection;case"UNSELECT_DATES":return null;default:return e}}function a(e,t){switch(t.type){case"SELECT_EVENT":return t.eventInstanceId;case"UNSELECT_EVENT":return"";default:return e}}function s(e,t,n,r){switch(t.type){case"SET_EVENT_DRAG":var i=t.state,o=p.computeEventDefUis(i.mutatedEvents.defs,n,r.view?r.view.options:{});return{affectedEvents:i.affectedEvents,mutatedEvents:i.mutatedEvents,isEvent:i.isEvent,origSeg:i.origSeg,eventUis:o};case"UNSET_EVENT_DRAG":return null;default:return e}}function l(e,t,n,r){switch(t.type){case"SET_EVENT_RESIZE":var i=t.state,o=p.computeEventDefUis(i.mutatedEvents.defs,n,r.view?r.view.options:{});return{affectedEvents:i.affectedEvents,mutatedEvents:i.mutatedEvents,isEvent:i.isEvent,origSeg:i.origSeg,eventUis:o};case"UNSET_EVENT_RESIZE":return null;default:return e}}function u(e){var t=0;for(var n in e)e[n].isFetching&&t++;return t}Object.defineProperty(t,"__esModule",{value:!0});var d=n(180),c=n(181),f=n(57),p=n(28);t.default=r},function(e,t,n){function r(e,t,n,r){switch(t.type){case"ADD_EVENT_SOURCES":return i(e,t.sources,n?n.activeRange:null,r);case"REMOVE_EVENT_SOURCE":return o(e,t.sourceId);case"SET_DATE_PROFILE":return a(e,t.dateProfile.activeRange,r);case"FETCH_EVENT_SOURCES":case"CHANGE_TIMEZONE":return l(e,t.sourceIds?p.arrayToHash(t.sourceIds):c(e),n?n.activeRange:null,r);case"RECEIVE_EVENTS":case"RECEIVE_EVENT_ERROR":return d(e,t.sourceId,t.fetchId,t.fetchRange);case"REMOVE_ALL_EVENT_SOURCES":return{};default:return e}}function i(e,t,n,r){for(var i={},o=0,s=t;oe.fetchRange.end):!e.latestFetchId}function l(e,t,n,r){var i={};for(var o in e){var a=e[o];t[o]?i[o]=u(a,n,r):i[o]=a}return i}function u(e,t,n){var r=f.getEventSourceDef(e.sourceDefId),i=String(g++);return r.fetch({eventSource:e,calendar:n,range:t},function(r){var o,a,s=r.rawEvents,l=n.opt("eventSourceSuccess");e.success&&(a=e.success(s,r.response)),l&&(o=l(s,r.response)),s=a||o||s,n.dispatch({type:"RECEIVE_EVENTS",sourceId:e.sourceId,fetchId:i,fetchRange:t,rawEvents:s})},function(r){var o=n.opt("eventSourceFailure");h.warn(r.message,r),e.failure&&e.failure(r),o&&o(r),n.dispatch({type:"RECEIVE_EVENT_ERROR",sourceId:e.sourceId,fetchId:i,fetchRange:t,error:r})}),p.assignTo({},e,{isFetching:!0,latestFetchId:i})}function d(e,t,n,r){var i,o=e[t];return o&&n===o.latestFetchId?p.assignTo({},e,(i={},i[t]=p.assignTo({},o,{isFetching:!1,fetchRange:r}),i)):e}function c(e){return p.filterHash(e,function(e){return f.doesSourceNeedRange(e)})}Object.defineProperty(t,"__esModule",{value:!0});var f=n(22),p=n(4),h=n(2);t.default=r;var g=0},function(e,t,n){function r(e,t,n,r,d){switch(t.type){case"RECEIVE_EVENTS":return i(e,n[t.sourceId],t.fetchId,t.fetchRange,t.rawEvents,d);case"ADD_EVENTS":return o(e,t.eventStore,r?r.activeRange:null,d);case"MERGE_EVENTS":return f.mergeEventStores(e,t.eventStore);case"SET_DATE_PROFILE":return r?f.expandRecurring(e,r.activeRange,d):e;case"CHANGE_TIMEZONE":return a(e,t.oldDateEnv,d.dateEnv);case"MUTATE_EVENTS":return s(e,t.instanceId,t.mutation,d);case"REMOVE_EVENT_INSTANCES":return u(e,t.instances);case"REMOVE_EVENT_DEF":return f.filterEventStoreDefs(e,function(e){return e.defId!==t.defId});case"REMOVE_EVENT_SOURCE":return l(e,t.sourceId);case"REMOVE_ALL_EVENT_SOURCES":return f.filterEventStoreDefs(e,function(e){return!e.sourceId});case"REMOVE_ALL_EVENTS":return f.createEmptyEventStore();default:return e}}function i(e,t,n,r,i,o){if(t&&n===t.latestFetchId){var a=f.parseEvents(f.transformRawEvents(i,t,o),t.sourceId,o);return r&&(a=f.expandRecurring(a,r,o)),f.mergeEventStores(l(e,t.sourceId),a)}return e}function o(e,t,n,r){return n&&(t=f.expandRecurring(t,n,r)),f.mergeEventStores(e,t)}function a(e,t,n){var r=e.defs,i=d.mapHash(e.instances,function(e){var i=r[e.defId];return i.allDay||i.recurringDef?e:d.assignTo({},e,{range:{start:n.createMarker(t.toDate(e.range.start,e.forcedStartTzo)),end:n.createMarker(t.toDate(e.range.end,e.forcedEndTzo))},forcedStartTzo:n.canComputeOffset?null:e.forcedStartTzo,forcedEndTzo:n.canComputeOffset?null:e.forcedEndTzo})});return{defs:r,instances:i}}function s(e,t,n,r){var i=f.getRelevantEvents(e,t);return i=c.applyMutationToEventStore(i,n,r),f.mergeEventStores(e,i)}function l(e,t){return f.filterEventStoreDefs(e,function(e){return e.sourceId!==t})}function u(e,t){return{defs:e.defs,instances:d.filterHash(e.instances,function(e){return!t[e.instanceId]})}}Object.defineProperty(t,"__esModule",{value:!0});var d=n(4),c=n(55),f=n(14);t.default=r},function(e,t,n){function r(e,t){return a.parseEvents(i(e),"",t)}function i(e){var t;return t=!0===e?[{}]:Array.isArray(e)?e.filter(function(e){return e.daysOfWeek}):"object"==typeof e&&e?[e]:[],t=t.map(function(e){return o.assignTo({},s,e)})}Object.defineProperty(t,"__esModule",{value:!0});var o=n(4),a=n(14),s={startTime:"09:00",endTime:"17:00",daysOfWeek:[1,2,3,4,5],rendering:"inverse-background",classNames:"fc-nonbusiness",groupId:"_businessHours"};t.parseBusinessHours=r},function(e,t,n){function r(e,t){var n=u.parseViewConfigs(e),r=u.parseViewConfigs(t.overrides.views),a=o.compileViewDefs(n,r);return s.mapHash(a,function(e){return i(e,r,t)})}function i(e,t,n){var r=e.overrides.duration||e.defaults.duration||n.dynamicOverrides.duration||n.overrides.duration,i=null,o="",u="",d={};if(r&&(i=a.createDuration(r))){var c=a.greatestDurationDenominator(i,!a.getWeeksFromInput(r));o=c.unit,1===c.value&&(u=o,d=t[o]?t[o].options:{})}var f=function(t){var n=t.buttonText||{};return null!=n[e.type]?n[e.type]:null!=n[u]?n[u]:void 0};return{type:e.type,class:e.class,duration:i,durationUnit:o,singleUnit:u,options:s.assignTo({},l.globalDefaults,e.defaults,n.dirDefaults,n.localeDefaults,n.overrides,d,e.overrides,n.dynamicOverrides),buttonTextOverride:f(n.dynamicOverrides)||f(n.overrides)||e.overrides.buttonText,buttonTextDefault:f(n.localeDefaults)||f(n.dirDefaults)||e.defaults.buttonText||f(l.globalDefaults)||e.type}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(184),a=n(10),s=n(4),l=n(32),u=n(185);t.buildViewSpecs=r},function(e,t,n){function r(e,t){var n,r={};for(n in e)i(n,r,e,t);for(n in t)i(n,r,e,t);return r}function i(e,t,n,r){if(t[e])return t[e];var i=o(e,t,n,r);return i&&(t[e]=i),i}function o(e,t,n,r){var o=n[e],l=r[e],u=function(e){return o&&null!==o[e]?o[e]:l&&null!==l[e]?l[e]:null},d=u("class"),c=u("superType");!c&&d&&(c=a(d,r)||a(d,n));var f=c?i(c,t,n,r):null;return!d&&f&&(d=f.class),d?{type:e,class:d,defaults:s.assignTo({},f?f.defaults:{},o?o.options:{}),overrides:s.assignTo({},f?f.overrides:{},l?l.options:{})}:null}function a(e,t){var n=Object.getPrototypeOf(e.prototype);for(var r in t){var i=t[r];if(i.class&&i.class.prototype===n)return r}return""}Object.defineProperty(t,"__esModule",{value:!0});var s=n(4);t.compileViewDefs=r},function(e,t,n){function r(e){return a.mapHash(e,i)}function i(e){"function"==typeof e&&(e={class:e});var t={},n=o.refineProps(e,s,{},t);return{superType:n.type,class:n.class,options:t}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(2),a=n(4);t.parseViewConfigs=r;var s={type:String,class:null}},function(e,t,n){function r(e){var t,n,r,i=[];for(t=0;tt.top&&e.top'+(t?''+d.htmlEscape(t)+"":"")+(o.title?''+d.htmlEscape(o.title)+"":"")+''+(c?'':"")+""},t.prototype.computeFgSegHorizontals=function(e){var t,n,a;if(e=this.sortEventSegs(e),t=r(e),i(t),n=t[0]){for(a=0;a');t&&t.row===o?a=t.el:(a=e.querySelector(".fc-content-skeleton tbody"))||(a=e.querySelector(".fc-content-skeleton table")),s=a.getBoundingClientRect().top-e.getBoundingClientRect().top,l.style.top=s+"px",l.querySelector("table").appendChild(n[o].tbodyEl),e.appendChild(l),r.push(l)}),r},t}(o.default);t.default=a},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),i=n(3),o=n(59),a=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.fillSegTag="td",t}return r.__extends(t,e),t.prototype.attachSegEls=function(e,t){var n,r,i,o=[];for(n=0;n'),o=r.getElementsByTagName("tr")[0],s>0&&o.appendChild(i.createElement("td",{colSpan:s})),t.el.colSpan=l-s,o.appendChild(t.el),l'+a.htmlEscape(n)+'',this.segContainerEl=this.el.querySelector(".fc-event-container")},t.prototype.prepareHits=function(){var e=u.computeRect(this.el);this.width=e.right-e.left,this.height=e.bottom-e.top,this.offsetTracker=new l.default(this.el)},t.prototype.releaseHits=function(){this.offsetTracker.destroy()},t.prototype.queryHit=function(e,t){var n=this.offsetTracker.computeLeft(),r=this.offsetTracker.computeTop(),i={left:n,right:n+this.width,top:r,bottom:r+this.height};return d.pointInsideRect({left:e,top:t},i)?{component:this,dateSpan:{allDay:!0,range:{start:this.date,end:c.addDays(this.date,1)}},dayEl:this.el,rect:i,layer:1}:null},t}(i.default);t.default=f;var p=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r.__extends(t,e),t.prototype.renderFgSegs=function(e){for(var t=0,n=e;t'+(this.displayEventTime?''+(t||"")+"":"")+'"+i.htmlEscape(l.title||"")+""},t.prototype.computeEventTimeFormat=function(){return{hour:"numeric",minute:"2-digit",meridiem:"short"}},t}(o.default);t.default=s},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(30),i=n(152),o=n(32),a=function(){function e(e,t){void 0===t&&(t={});var n=this;this.handlePointerDown=function(e){var t=n.dragging,r=n.settings,i=r.minDistance,a=r.longPressDelay;t.minDistance=null!=i?i:e.isTouch?0:o.globalDefaults.eventDragMinDistance,t.delay=e.isTouch?null!=a?a:o.globalDefaults.longPressDelay:0},this.handleDragStart=function(e){e.isTouch&&n.dragging.delay&&e.subjectEl.classList.contains("fc-event")&&n.dragging.mirror.getMirrorEl().classList.add("fc-selected")},this.settings=t;var a=this.dragging=new r.default(e);a.touchScrollAllowed=!1,null!=t.itemSelector&&(a.pointer.selector=t.itemSelector),null!=t.appendTo&&(a.mirror.parentNode=t.appendTo),a.emitter.on("pointerdown",this.handlePointerDown),a.emitter.on("dragstart",this.handleDragStart),new i.default(a,t.eventData)}return e.prototype.destroy=function(){this.dragging.destroy()},e}();t.default=a},function(e,t,n){function r(e){var t={},n=o.refineProps(e,a,s,t);return n.leftoverProps=t,n}Object.defineProperty(t,"__esModule",{value:!0});var i=n(10),o=n(2),a={time:i.createDuration,duration:i.createDuration,create:Boolean,sourceId:String},s={create:!0};t.parseDragMeta=r},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(152),i=n(198),o=function(){function e(e,t){var n=document;e===document||e instanceof Element?(n=e,t=t||{}):t=e||{};var o=this.dragging=new i.default(n);"string"==typeof t.itemSelector?o.pointer.selector=t.itemSelector:n===document&&(o.pointer.selector="[data-event]"),"string"==typeof t.mirrorSelector&&(o.mirrorSelector=t.mirrorSelector),new r.default(o,t.eventData)}return e.prototype.destroy=function(){this.dragging.destroy()},e}();t.default=o},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),i=n(40),o=n(54),a=function(e){function t(t){var n=e.call(this)||this;n.shouldIgnoreMove=!1,n.mirrorSelector="",n.currentMirrorEl=null,n.handlePointerDown=function(e){n.emitter.trigger("pointerdown",e),n.shouldIgnoreMove||n.emitter.trigger("dragstart",e)},n.handlePointerMove=function(e){n.shouldIgnoreMove||n.emitter.trigger("dragmove",e)},n.handlePointerUp=function(e){n.emitter.trigger("pointerup",e),n.shouldIgnoreMove||n.emitter.trigger("dragend",e)};var r=n.pointer=new i.default(t);return r.emitter.on("pointerdown",n.handlePointerDown),r.emitter.on("pointermove",n.handlePointerMove),r.emitter.on("pointerup",n.handlePointerUp),n}return r.__extends(t,e),t.prototype.destroy=function(){this.pointer.destroy()},t.prototype.setIgnoreMove=function(e){this.shouldIgnoreMove=e},t.prototype.setMirrorIsVisible=function(e){if(e)this.currentMirrorEl&&(this.currentMirrorEl.style.visibility="",this.currentMirrorEl=null);else{var t=this.mirrorSelector?document.querySelector(this.mirrorSelector):null;t&&(this.currentMirrorEl=t,t.style.visibility="hidden")}},t}(o.default);t.default=a},function(e,t,n){function r(e,t){void 0===t&&(t={});var n=o(t),r=l.createFormatter(t),i=n.createMarkerMeta(e);return i?n.format(i.marker,r,{forcedTzo:i.forcedTzo}):""}function i(e,t,n){var r=o("object"==typeof n&&n?n:{}),i=l.createFormatter(n,d.globalDefaults.defaultRangeSeparator),a=r.createMarkerMeta(e),s=r.createMarkerMeta(t);return a&&s?r.formatRange(a.marker,s.marker,i,{forcedStartTzo:a.forcedTzo,forcedEndTzo:s.forcedTzo,isEndExclusive:n.isEndExclusive}):""}function o(e){var t=e.locale||d.globalDefaults.locale;return e=s.assignTo({timeZone:d.globalDefaults.timeZone,timeZoneImpl:d.globalDefaults.timeZoneImpl,calendarSystem:"gregory"},e,{locale:u.getLocale(t)}),new a.DateEnv(e)}Object.defineProperty(t,"__esModule",{value:!0});var a=n(56),s=n(4),l=n(8),u=n(41),d=n(32);t.formatDate=r,t.formatRange=i},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(48),i=n(137),o=n(138),a=n(201),s=n(202);r.defineThemeSystem("standard",i.default),r.defineThemeSystem("jquery-ui",o.default),r.defineThemeSystem("bootstrap3",a.default),r.defineThemeSystem("bootstrap4",s.default)},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),i=n(27),o=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r.__extends(t,e),t}(i.default);t.default=o,o.prototype.classes={widget:"fc-bootstrap3",tableGrid:"table-bordered",tableList:"table",tableListHeading:"active",buttonGroup:"btn-group",button:"btn btn-default",stateActive:"active",stateDisabled:"disabled",today:"alert alert-info",popover:"panel panel-default",popoverHeader:"panel-heading",popoverContent:"panel-body",headerRow:"panel-default",dayRow:"panel-default",listView:"panel panel-default"},o.prototype.baseIconClass="glyphicon",o.prototype.iconClasses={close:"glyphicon-remove",prev:"glyphicon-chevron-left",next:"glyphicon-chevron-right",prevYear:"glyphicon-backward",nextYear:"glyphicon-forward"},o.prototype.iconOverrideOption="bootstrapGlyphicons",o.prototype.iconOverrideCustomButtonOption="bootstrapGlyphicon",o.prototype.iconOverridePrefix="glyphicon-"},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),i=n(27),o=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r.__extends(t,e),t}(i.default);t.default=o,o.prototype.classes={widget:"fc-bootstrap4",tableGrid:"table-bordered",tableList:"table",tableListHeading:"table-active",buttonGroup:"btn-group",button:"btn btn-primary",stateActive:"active",stateDisabled:"disabled",today:"alert alert-info",popover:"card card-primary",popoverHeader:"card-header",popoverContent:"card-body",headerRow:"table-bordered",dayRow:"table-bordered",listView:"card card-primary"},o.prototype.baseIconClass="fa",o.prototype.iconClasses={close:"fa-times",prev:"fa-chevron-left",next:"fa-chevron-right",prevYear:"fa-angle-double-left",nextYear:"fa-angle-double-right"},o.prototype.iconOverrideOption="bootstrapFontAwesome",o.prototype.iconOverrideCustomButtonOption="bootstrapFontAwesome",o.prototype.iconOverridePrefix="fa-"},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(43),i=n(63),o=n(150);r.defineView("basic",i.default),r.defineView("basicDay",{type:"basic",duration:{days:1}}),r.defineView("basicWeek",{type:"basic",duration:{weeks:1}}),r.defineView("month",{class:o.default,duration:{months:1},fixedWeekCount:!0})},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(43),i=n(146);r.defineView("agenda",{class:i.default,allDaySlot:!0,slotDuration:"00:30:00",slotEventOverlap:!0}),r.defineView("agendaDay",{type:"agenda",duration:{days:1}}),r.defineView("agendaWeek",{type:"agenda",duration:{weeks:1}})},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(43),i=n(151);r.defineView("list",{class:i.default,listDayFormat:{month:"long",day:"numeric",year:"numeric"}}),r.defineView("listDay",{type:"list",duration:{days:1},listDayFormat:{weekday:"long"}}),r.defineView("listWeek",{type:"list",duration:{weeks:1},listDayFormat:{weekday:"long"},listDayAltFormat:{month:"long",day:"numeric",year:"numeric"}}),r.defineView("listMonth",{type:"list", +duration:{month:1},listDayAltFormat:{weekday:"long"}}),r.defineView("listYear",{type:"list",duration:{year:1},listDayAltFormat:{weekday:"long"}})},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(22).registerEventSourceDef({ignoreRange:!0,parseMeta:function(e){return Array.isArray(e)?e:Array.isArray(e.events)?e.events:null},fetch:function(e,t){t({rawEvents:e.eventSource.meta})}})},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(208);n(22).registerEventSourceDef({parseMeta:function(e){return"function"==typeof e?e:"function"==typeof e.events?e.events:null},fetch:function(e,t,n){var i=e.calendar.dateEnv,o=e.eventSource.meta;r.unpromisify(o.bind(null,{start:i.toDate(e.range.start),end:i.toDate(e.range.end),startStr:i.formatIso(e.range.start),endStr:i.formatIso(e.range.end),timeZone:i.timeZone}),function(e){t({rawEvents:e})},n)}})},function(e,t){function n(e,t,n){var r=!1,i=function(){r||(r=!0,t.apply(this,arguments))},o=function(){r||(r=!0,n&&n.apply(this,arguments))},a=e(i,o);a&&"function"==typeof a.then&&a.then(i,o)}Object.defineProperty(t,"__esModule",{value:!0}),t.unpromisify=n},function(e,t,n){function r(e,t,n){var r,i,a,s,l=n.dateEnv,u={};return r=e.startParam,null==r&&(r=n.opt("startParam")),i=e.endParam,null==i&&(i=n.opt("endParam")),a=e.timeZoneParam,null==a&&(a=n.opt("timeZoneParam")),s="function"==typeof e.extraData?e.extraData():e.extraData||{},o.assignTo(u,s),u[r]=l.formatIso(t.start),u[i]=l.formatIso(t.end),"local"!==l.timeZone&&(u[a]=l.timeZone),u}Object.defineProperty(t,"__esModule",{value:!0});var i=n(64),o=n(4);n(22).registerEventSourceDef({parseMeta:function(e){if("string"==typeof e)e={url:e};else if(!e||"object"!=typeof e||!e.url)return null;return{url:e.url,method:(e.method||"GET").toUpperCase(),extraData:e.data,startParam:e.startParam,endParam:e.endParam,timeZoneParam:e.timeZoneParam}},fetch:function(e,t,n){var o,a=e.eventSource.meta,s=r(a,e.range,e.calendar);o="GET"===a.method?i.get(a.url).query(s):i(a.method,a.url).send(s),o.end(function(e,r){var i;e?n(e):(r.body?i=r.body:r.text&&(i=JSON.parse(r.text)),i?t({rawEvents:i,response:r}):n({message:"Invalid JSON response",response:r}))})}})},function(e,t,n){function r(e,t,n,r,o){r=u.intersectRanges(r,n);for(var s=e?a.arrayToHash(e):null,l=i.startOfDay(r.start),d=r.end,c=[];lpenuh",eventLimitText:"lebih",noEventsMessage:"Tidak ada acara untuk ditampilkan"})},105:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("is",{week:{dow:1,doy:4},buttonText:{prev:"Fyrri",next:"Næsti",today:"Í dag",month:"Mánuður",week:"Vika",day:"Dagur",list:"Dagskrá"},weekLabel:"Vika",allDayHtml:"Allandaginn",eventLimitText:"meira",noEventsMessage:"Engir viðburðir til að sýna"})},106:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("it",{week:{dow:1,doy:4},buttonText:{prev:"Prec",next:"Succ",today:"Oggi",month:"Mese",week:"Settimana",day:"Giorno",list:"Agenda"},weekLabel:"Sm",allDayHtml:"Tutto ilgiorno",eventLimitText:function(e){return"+altri "+e},noEventsMessage:"Non ci sono eventi da visualizzare"})},107:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("ja",{buttonText:{prev:"前",next:"次",today:"今日",month:"月",week:"週",day:"日",list:"予定リスト"},weekLabel:"週",allDayText:"終日",eventLimitText:function(e){return"他 "+e+" 件"},noEventsMessage:"イベントが表示されないように"})},108:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("ka",{week:{dow:1,doy:7},buttonText:{prev:"წინა",next:"შემდეგი",today:"დღეს",month:"თვე",week:"კვირა",day:"დღე",list:"დღის წესრიგი"},weekLabel:"კვ",allDayText:"მთელი დღე",eventLimitText:function(e){return"+ კიდევ "+e},noEventsMessage:"ღონისძიებები არ არის"})},109:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("kk",{week:{dow:1,doy:7},buttonText:{prev:"Алдыңғы",next:"Келесі",today:"Бүгін",month:"Ай",week:"Апта",day:"Күн",list:"Күн тәртібі"},weekLabel:"Не",allDayText:"Күні бойы",eventLimitText:function(e){return"+ тағы "+e},noEventsMessage:"Көрсету үшін оқиғалар жоқ"})},110:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("ko",{buttonText:{prev:"이전달",next:"다음달",today:"오늘",month:"월",week:"주",day:"일",list:"일정목록"},weekLabel:"주",allDayText:"종일",eventLimitText:"개",noEventsMessage:"일정이 없습니다"})},111:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("lb",{week:{dow:1,doy:4},buttonText:{prev:"Zréck",next:"Weider",today:"Haut",month:"Mount",week:"Woch",day:"Dag",list:"Terminiwwersiicht"},weekLabel:"W",allDayText:"Ganzen Dag",eventLimitText:"méi",noEventsMessage:"Nee Evenementer ze affichéieren"})},112:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("lt",{week:{dow:1,doy:4},buttonText:{prev:"Atgal",next:"Pirmyn",today:"Šiandien",month:"Mėnuo",week:"Savaitė",day:"Diena",list:"Darbotvarkė"},weekLabel:"SAV",allDayText:"Visą dieną",eventLimitText:"daugiau",noEventsMessage:"Nėra įvykių rodyti"})},113:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("lv",{week:{dow:1,doy:4},buttonText:{prev:"Iepr.",next:"Nāk.",today:"Šodien",month:"Mēnesis",week:"Nedēļa",day:"Diena",list:"Dienas kārtība"},weekLabel:"Ned.",allDayText:"Visu dienu",eventLimitText:function(e){return"+vēl "+e},noEventsMessage:"Nav notikumu"})},114:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("mk",{buttonText:{prev:"претходно",next:"следно",today:"Денес",month:"Месец",week:"Недела",day:"Ден",list:"График"},weekLabel:"Сед",allDayText:"Цел ден",eventLimitText:function(e){return"+повеќе "+e},noEventsMessage:"Нема настани за прикажување"})},115:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("ms",{week:{dow:1,doy:7},buttonText:{prev:"Sebelum",next:"Selepas",today:"hari ini",month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},weekLabel:"Mg",allDayText:"Sepanjang hari",eventLimitText:function(e){return"masih ada "+e+" acara"},noEventsMessage:"Tiada peristiwa untuk dipaparkan"})},116:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("nb",{week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"Neste",today:"I dag",month:"Måned",week:"Uke",day:"Dag",list:"Agenda"},weekLabel:"Uke",allDayText:"Hele dagen",eventLimitText:"til",noEventsMessage:"Ingen hendelser å vise"})},117:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("nl",{week:{dow:1,doy:4},buttonText:{prev:"Voorgaand",next:"Volgende",today:"Vandaag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Hele dag",eventLimitText:"extra",noEventsMessage:"Geen evenementen om te laten zien"})},118:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("nn",{week:{dow:1,doy:4},buttonText:{prev:"Førre",next:"Neste",today:"I dag",month:"Månad",week:"Veke",day:"Dag",list:"Agenda"},weekLabel:"Veke",allDayText:"Heile dagen",eventLimitText:"til",noEventsMessage:"Ingen hendelser å vise"})},119:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("pl",{week:{dow:1,doy:4},buttonText:{prev:"Poprzedni",next:"Następny",today:"Dziś",month:"Miesiąc",week:"Tydzień",day:"Dzień",list:"Plan dnia"},weekLabel:"Tydz",allDayText:"Cały dzień",eventLimitText:"więcej",noEventsMessage:"Brak wydarzeń do wyświetlenia"})},120:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("pt-br",{buttonText:{prevText:"Anterior",nextText:"Próximo",currentText:"Hoje",month:"Mês",week:"Semana",day:"Dia",list:"Compromissos"},weekLabel:"Sm",allDayText:"dia inteiro",eventLimitText:function(e){return"mais +"+e},noEventsMessage:"Não há eventos para mostrar"})},121:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("pt",{week:{dow:1,doy:4},buttonText:{prevText:"Anterior",nextText:"Seguinte",currentText:"Hoje",month:"Mês",week:"Semana",day:"Dia",list:"Agenda"},weekLabel:"Sem",allDayText:"Todo o dia",eventLimitText:"mais",noEventsMessage:"Não há eventos para mostrar"})},122:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("ro",{week:{dow:1,doy:7},buttonText:{prev:"precedentă",next:"următoare",today:"Azi",month:"Lună",week:"Săptămână",day:"Zi",list:"Agendă"},weekLabel:"Săpt",allDayText:"Toată ziua",eventLimitText:function(e){return"+alte "+e},noEventsMessage:"Nu există evenimente de afișat"})},123:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("ru",{week:{dow:1,doy:4},buttonText:{prev:"Пред",next:"След",today:"Сегодня",month:"Месяц",week:"Неделя",day:"День",list:"Повестка дня"},weekLabel:"Нед",allDayText:"Весь день",eventLimitText:function(e){return"+ ещё "+e},noEventsMessage:"Нет событий для отображения"})},124:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("sk",{week:{dow:1,doy:4},buttonText:{prev:"Predchádzajúci",next:"Nasledujúci",today:"Dnes",month:"Mesiac",week:"Týždeň",day:"Deň",list:"Rozvrh"},weekLabel:"Ty",allDayText:"Celý deň",eventLimitText:function(e){return"+ďalšie: "+e},noEventsMessage:"Žiadne akcie na zobrazenie"})},125:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("sl",{week:{dow:1,doy:7},buttonText:{prev:"Prejšnji",next:"Naslednji",today:"Trenutni",month:"Mesec",week:"Teden",day:"Dan",list:"Dnevni red"},weekLabel:"Teden",allDayText:"Ves dan",eventLimitText:"več",noEventsMessage:"Ni dogodkov za prikaz"})},126:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("sq",{week:{dow:1,doy:4},buttonText:{prev:"mbrapa",next:"Përpara",today:"sot",month:"Muaj",week:"Javë",day:"Ditë",list:"Listë"},weekLabel:"Ja",allDayHtml:"Gjithëditën",eventLimitText:function(e){return"+më tepër "+e},noEventsMessage:"Nuk ka evente për të shfaqur"})},127:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("sr-cyrl",{week:{dow:1,doy:7},buttonText:{prev:"Претходна",next:"следећи",today:"Данас",month:"Месец",week:"Недеља",day:"Дан",list:"Планер"},weekLabel:"Сед",allDayText:"Цео дан",eventLimitText:function(e){return"+ још "+e},noEventsMessage:"Нема догађаја за приказ"})},128:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("sr",{week:{dow:1,doy:7},buttonText:{prev:"Prethodna",next:"Sledeći",today:"Danas",month:"Mеsеc",week:"Nеdеlja",day:"Dan",list:"Planеr"},weekLabel:"Sed",allDayText:"Cеo dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nеma događaja za prikaz"})},129:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("sv",{week:{dow:1,doy:4},buttonText:{prev:"Förra",next:"Nästa",today:"Idag",month:"Månad",week:"Vecka",day:"Dag",list:"Program"},weekLabel:"v.",allDayText:"Heldag",eventLimitText:"till",noEventsMessage:"Inga händelser att visa"})},130:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("th",{buttonText:{prev:"ย้อน",next:"ถัดไป",today:"วันนี้",month:"เดือน",week:"สัปดาห์",day:"วัน",list:"แผนงาน"},allDayText:"ตลอดวัน",eventLimitText:"เพิ่มเติม",noEventsMessage:"ไม่มีกิจกรรมที่จะแสดง"})},131:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("tr",{week:{dow:1,doy:7},buttonText:{prev:"geri",next:"ileri",today:"bugün",month:"Ay",week:"Hafta",day:"Gün",list:"Ajanda"},weekLabel:"Hf",allDayText:"Tüm gün",eventLimitText:"daha fazla",noEventsMessage:"Herhangi bir etkinlik görüntülemek için"})},132:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("uk",{week:{dow:1,doy:7},buttonText:{prev:"Попередній",next:"далі",today:"Сьогодні",month:"Місяць",week:"Тиждень",day:"День",list:"Порядок денний"},weekLabel:"Тиж",allDayText:"Увесь день",eventLimitText:function(e){return"+ще "+e+"..."},noEventsMessage:"Немає подій для відображення"})},133:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("vi",{week:{dow:1,doy:4},buttonText:{prev:"Trước",next:"Tiếp",today:"Hôm nay",month:"Tháng",week:"Tuần",day:"Ngày",list:"Lịch biểu"},weekLabel:"Tu",allDayText:"Cả ngày",eventLimitText:function(e){return"+ thêm "+e},noEventsMessage:"Không có sự kiện để hiển thị"})},134:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("zh-cn",{week:{dow:1,doy:4},buttonText:{prev:"上月",next:"下月",today:"今天",month:"月",week:"周",day:"日",list:"日程"},weekLabel:"周",allDayText:"全天",eventLimitText:function(e){return"另外 "+e+" 个"},noEventsMessage:"没有事件显示"})},135:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("zh-tw",{buttonText:{prev:"上月",next:"下月",today:"今天",month:"月",week:"週",day:"天",list:"活動列表"},weekLabel:"周",allDayText:"整天",eventLimitText:"顯示更多",noEventsMessage:"没有任何活動"})},394:function(e,t,n){n(72),n(73),n(74),n(75),n(76),n(77),n(78),n(79),n(80),n(81),n(82),n(83),n(84),n(85),n(86),n(87),n(88),n(89),n(90),n(91),n(92),n(93),n(94),n(95),n(96),n(97),n(98),n(99),n(100),n(101),n(102),n(103),n(104),n(105),n(106),n(107),n(108),n(109),n(110),n(111),n(112),n(113),n(114),n(115),n(116),n(117),n(118),n(119),n(120),n(121),n(122),n(123),n(124),n(125),n(126),n(127),n(128),n(129),n(130),n(131),n(132),n(133),n(134),e.exports=n(135)},72:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("af",{week:{dow:1,doy:4},buttonText:{prev:"Vorige",next:"Volgende",today:"Vandag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayHtml:"Heeldag",eventLimitText:"Addisionele",noEventsMessage:"Daar is geen gebeurtenisse nie"})},73:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("ar-dz",{week:{dow:0,doy:4},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},74:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("ar-kw",{week:{dow:0,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},75:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("ar-ly",{week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},76:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("ar-ma",{week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},77:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("ar-sa",{week:{dow:0,doy:6},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},78:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("ar-tn",{week:{dow:1,doy:4},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},79:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("ar",{week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},80:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("bg",{week:{dow:1,doy:7},buttonText:{prev:"назад",next:"напред",today:"днес",month:"Месец",week:"Седмица",day:"Ден",list:"График"},allDayText:"Цял ден",eventLimitText:function(e){return"+още "+e},noEventsMessage:"Няма събития за показване"})},81:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("bs",{week:{dow:1,doy:7},buttonText:{prev:"Prošli",next:"Sljedeći",today:"Danas",month:"Mjesec",week:"Sedmica",day:"Dan",list:"Raspored"},weekLabel:"Sed",allDayText:"Cijeli dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nema događaja za prikazivanje"})},82:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("ca",{week:{dow:1,doy:4},buttonText:{prev:"Anterior",next:"Següent",today:"Avui",month:"Mes",week:"Setmana",day:"Dia",list:"Agenda"},weekLabel:"Set",allDayText:"Tot el dia",eventLimitText:"més",noEventsMessage:"No hi ha esdeveniments per mostrar"})},83:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("cs",{week:{dow:1,doy:4},buttonText:{prev:"Dříve",next:"Později",today:"Nyní",month:"Měsíc",week:"Týden",day:"Den",list:"Agenda"},weekLabel:"Týd",allDayText:"Celý den",eventLimitText:function(e){return"+další: "+e},noEventsMessage:"Žádné akce k zobrazení"})},84:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("da",{week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"Næste",today:"Idag",month:"Måned",week:"Uge",day:"Dag",list:"Agenda"},weekLabel:"Uge",allDayText:"Hele dagen",eventLimitText:"flere",noEventsMessage:"Ingen arrangementer at vise"})},85:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("de",{week:{dow:1,doy:4},buttonText:{prev:"Zurück",next:"Vor",today:"Heute",month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},weekLabel:"KW",allDayText:"Ganztägig",eventLimitText:function(e){return"+ weitere "+e},noEventsMessage:"Keine Ereignisse anzuzeigen"})},86:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("el",{week:{dow:1,doy:4},buttonText:{prev:"Προηγούμενος",next:"Επόμενος",today:"Σήμερα",month:"Μήνας",week:"Εβδομάδα",day:"Ημέρα",list:"Ατζέντα"},weekLabel:"Εβδ",allDayText:"Ολοήμερο",eventLimitText:"περισσότερα",noEventsMessage:"Δεν υπάρχουν γεγονότα για να εμφανιστεί"})},87:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("en-au",{week:{dow:1,doy:4}})},88:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("en-gb",{week:{dow:1,doy:4}})},89:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("en-nz",{week:{dow:1,doy:4}})},90:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("es",{week:{dow:0,doy:6},buttonText:{prev:"Ant",next:"Sig",today:"Hoy",month:"Mes",week:"Semana",day:"Día",list:"Agenda"},weekLabel:"Sm",allDayHtml:"Todoel día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"})},91:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("es",{week:{dow:1,doy:4},buttonText:{prev:"Ant",next:"Sig",today:"Hoy",month:"Mes",week:"Semana",day:"Día",list:"Agenda"},weekLabel:"Sm",allDayHtml:"Todoel día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"})},92:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("et",{week:{dow:1,doy:4},buttonText:{prev:"Eelnev",next:"Järgnev",today:"Täna",month:"Kuu",week:"Nädal",day:"Päev",list:"Päevakord"},weekLabel:"näd",allDayText:"Kogu päev",eventLimitText:function(e){return"+ veel "+e},noEventsMessage:"Kuvamiseks puuduvad sündmused"})},93:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("eu",{week:{dow:1,doy:7},buttonText:{prev:"Aur",next:"Hur",today:"Gaur",month:"Hilabetea",week:"Astea",day:"Eguna",list:"Agenda"},weekLabel:"As",allDayHtml:"Egunosoa",eventLimitText:"gehiago",noEventsMessage:"Ez dago ekitaldirik erakusteko"})},94:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("fa",{week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"قبلی",nex:"بعدی",today:"امروز",month:"ماه",week:"هفته",day:"روز",list:"برنامه"},weekLabel:"هف",allDayText:"تمام روز",eventLimitText:function(e){return"بیش از "+e},noEventsMessage:"هیچ رویدادی به نمایش"})},95:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("fi",{week:{dow:1,doy:4},buttonText:{prev:"Edellinen",next:"Seuraava",today:"Tänään",month:"Kuukausi",week:"Viikko",day:"Päivä",list:"Tapahtumat"},weekLabel:"Vk",allDayText:"Koko päivä",eventLimitText:"lisää",noEventsMessage:"Ei näytettäviä tapahtumia"})},96:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("fr",{buttonText:{prev:"Précédent",next:"Suivant",today:"Aujourd'hui",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekLabel:"Sem.",allDayHtml:"Toute lajournée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"})},97:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("fr-ch",{week:{dow:1,doy:4},buttonText:{prev:"Précédent",next:"Suivant",today:"Courant",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekLabel:"Sm",allDayHtml:"Toute lajournée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"})},98:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("fr",{week:{dow:1,doy:4},buttonText:{prev:"Précédent",next:"Suivant",today:"Aujourd'hui",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekLabel:"Sem.",allDayHtml:"Toute lajournée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"})},99:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(0).defineLocale("gl",{week:{dow:1,doy:4},buttonText:{prevText:"Ant",nextText:"Seg",currentText:"Hoxe",month:"Mes",week:"Semana",day:"Día",list:"Axenda"},weekLabel:"Sm",allDayHtml:"Todoo día",eventLimitText:"máis",noEventsMessage:"Non hai eventos para amosar"})}})}); \ No newline at end of file diff --git a/static/js/calendar.js b/static/js/calendar.js new file mode 100644 index 0000000..2dde24d --- /dev/null +++ b/static/js/calendar.js @@ -0,0 +1,49 @@ +var loadingDiv = document.getElementById('loading'); +var errorDiv = document.getElementById('error'); +var resultDiv = document.getElementById('result'); +const timeout = 10000; +var emptyCoursesShown = false; +var calendar; + +function getTable() { + // Send XHR to totalTable + loadingDiv.style.display = ""; + errorDiv.style.display = "none"; + + let xhr = new XMLHttpRequest(); + xhr.timeout = timeout; + xhr.onreadystatechange = function() { + if (xhr.readyState === XMLHttpRequest.DONE) { + if (xhr.status === 200) { + let events = JSON.parse(xhr.responseText); + setData(events); + } else { + setError(); + } + } + }; + xhr.open('GET', CALENDAR_URL, true); + xhr.send(); +} + +function setData(events) { + console.log(events); + loadingDiv.style.display = "none"; + errorDiv.style.display = "none"; + calendar = new FullCalendar.Calendar(resultDiv, { + events: events, + defaultView: 'agendaWeek', + minTime: "07:00:00", + maxTime: "19:00:00", + timeZone: 'UTC', + }); + calendar.render(); +} + +function setError() { + loadingDiv.style.display = "none"; + errorDiv.style.display = ""; +} + +document.getElementById('tryAgain').addEventListener('click', getTable); +getTable(); diff --git a/templates/base.pug b/templates/base.pug index 9079736..d4b30d2 100644 --- a/templates/base.pug +++ b/templates/base.pug @@ -31,6 +31,8 @@ html a.nav-link(href=getUrl("total")) Total li.nav-item a.nav-link(href=getUrl("totalByCourse")) Total by course + li.nav-item + a.nav-link(href=getUrl("calendar")) Calendar li.nav-item a.nav-link(href=getUrl("histogram")) Histogram ul.navbar-nav.ml-auto diff --git a/utils/calendar.js b/utils/calendar.js index d0552ce..9d1cc70 100644 --- a/utils/calendar.js +++ b/utils/calendar.js @@ -7,16 +7,15 @@ var locale = require('os-locale').sync(); var cal = {}; function fromIcal(string) { - + console.log(string); return new Date( parseInt(string.substr(0 , 4), 10), - parseInt(string.substr(4 , 2), 10), + parseInt(string.substr(4 , 2), 10) - 1, parseInt(string.substr(6 , 2), 10), parseInt(string.substr(9, 2), 10), parseInt(string.substr(11, 2), 10), parseInt(string.substr(13, 2), 10) ); - } cal.Type = {