@fullcalendar/core 6.0.0-beta.4 → 6.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -4
- package/index.cjs +588 -10
- package/index.d.ts +7 -3
- package/index.global.js +781 -781
- package/index.global.min.js +3 -3
- package/index.js +581 -5
- package/internal-common.cjs +6 -584
- package/internal-common.d.ts +2 -5
- package/internal-common.js +1 -577
- package/internal.cjs +0 -2
- package/internal.d.ts +1 -1
- package/internal.js +1 -1
- package/locales/af.global.js +5 -5
- package/locales/af.global.min.js +3 -3
- package/locales/ar-dz.global.js +5 -5
- package/locales/ar-dz.global.min.js +3 -3
- package/locales/ar-kw.global.js +5 -5
- package/locales/ar-kw.global.min.js +3 -3
- package/locales/ar-ly.global.js +5 -5
- package/locales/ar-ly.global.min.js +3 -3
- package/locales/ar-ma.global.js +5 -5
- package/locales/ar-ma.global.min.js +3 -3
- package/locales/ar-sa.global.js +5 -5
- package/locales/ar-sa.global.min.js +3 -3
- package/locales/ar-tn.global.js +5 -5
- package/locales/ar-tn.global.min.js +3 -3
- package/locales/ar.global.js +5 -5
- package/locales/ar.global.min.js +3 -3
- package/locales/az.global.js +5 -5
- package/locales/az.global.min.js +3 -3
- package/locales/bg.global.js +5 -5
- package/locales/bg.global.min.js +3 -3
- package/locales/bn.global.js +5 -5
- package/locales/bn.global.min.js +3 -3
- package/locales/bs.global.js +5 -5
- package/locales/bs.global.min.js +3 -3
- package/locales/ca.global.js +5 -5
- package/locales/ca.global.min.js +3 -3
- package/locales/cs.global.js +5 -5
- package/locales/cs.global.min.js +3 -3
- package/locales/cy.global.js +5 -5
- package/locales/cy.global.min.js +3 -3
- package/locales/da.global.js +5 -5
- package/locales/da.global.min.js +3 -3
- package/locales/de-at.global.js +5 -5
- package/locales/de-at.global.min.js +3 -3
- package/locales/de.global.js +5 -5
- package/locales/de.global.min.js +3 -3
- package/locales/el.global.js +5 -5
- package/locales/el.global.min.js +3 -3
- package/locales/en-au.global.js +5 -5
- package/locales/en-au.global.min.js +3 -3
- package/locales/en-gb.global.js +5 -5
- package/locales/en-gb.global.min.js +3 -3
- package/locales/en-nz.global.js +5 -5
- package/locales/en-nz.global.min.js +3 -3
- package/locales/eo.global.js +5 -5
- package/locales/eo.global.min.js +3 -3
- package/locales/es-us.global.js +5 -5
- package/locales/es-us.global.min.js +3 -3
- package/locales/es.global.js +5 -5
- package/locales/es.global.min.js +3 -3
- package/locales/et.global.js +5 -5
- package/locales/et.global.min.js +3 -3
- package/locales/eu.global.js +5 -5
- package/locales/eu.global.min.js +3 -3
- package/locales/fa.global.js +5 -5
- package/locales/fa.global.min.js +3 -3
- package/locales/fi.global.js +5 -5
- package/locales/fi.global.min.js +3 -3
- package/locales/fr-ca.global.js +5 -5
- package/locales/fr-ca.global.min.js +3 -3
- package/locales/fr-ch.global.js +5 -5
- package/locales/fr-ch.global.min.js +3 -3
- package/locales/fr.global.js +5 -5
- package/locales/fr.global.min.js +3 -3
- package/locales/gl.global.js +5 -5
- package/locales/gl.global.min.js +3 -3
- package/locales/he.global.js +5 -5
- package/locales/he.global.min.js +3 -3
- package/locales/hi.global.js +5 -5
- package/locales/hi.global.min.js +3 -3
- package/locales/hr.global.js +5 -5
- package/locales/hr.global.min.js +3 -3
- package/locales/hu.global.js +5 -5
- package/locales/hu.global.min.js +3 -3
- package/locales/hy-am.global.js +5 -5
- package/locales/hy-am.global.min.js +3 -3
- package/locales/id.global.js +5 -5
- package/locales/id.global.min.js +3 -3
- package/locales/is.global.js +5 -5
- package/locales/is.global.min.js +3 -3
- package/locales/it.global.js +5 -5
- package/locales/it.global.min.js +3 -3
- package/locales/ja.global.js +5 -5
- package/locales/ja.global.min.js +3 -3
- package/locales/ka.global.js +5 -5
- package/locales/ka.global.min.js +3 -3
- package/locales/kk.global.js +5 -5
- package/locales/kk.global.min.js +3 -3
- package/locales/km.global.js +5 -5
- package/locales/km.global.min.js +3 -3
- package/locales/ko.global.js +5 -5
- package/locales/ko.global.min.js +3 -3
- package/locales/ku.global.js +5 -5
- package/locales/ku.global.min.js +3 -3
- package/locales/lb.global.js +5 -5
- package/locales/lb.global.min.js +3 -3
- package/locales/lt.global.js +5 -5
- package/locales/lt.global.min.js +3 -3
- package/locales/lv.global.js +5 -5
- package/locales/lv.global.min.js +3 -3
- package/locales/mk.global.js +5 -5
- package/locales/mk.global.min.js +3 -3
- package/locales/ms.global.js +5 -5
- package/locales/ms.global.min.js +3 -3
- package/locales/nb.global.js +5 -5
- package/locales/nb.global.min.js +3 -3
- package/locales/ne.global.js +5 -5
- package/locales/ne.global.min.js +3 -3
- package/locales/nl.global.js +5 -5
- package/locales/nl.global.min.js +3 -3
- package/locales/nn.global.js +5 -5
- package/locales/nn.global.min.js +3 -3
- package/locales/pl.global.js +5 -5
- package/locales/pl.global.min.js +3 -3
- package/locales/pt-br.global.js +5 -5
- package/locales/pt-br.global.min.js +3 -3
- package/locales/pt.global.js +5 -5
- package/locales/pt.global.min.js +3 -3
- package/locales/ro.global.js +5 -5
- package/locales/ro.global.min.js +3 -3
- package/locales/ru.global.js +5 -5
- package/locales/ru.global.min.js +3 -3
- package/locales/si-lk.global.js +5 -5
- package/locales/si-lk.global.min.js +3 -3
- package/locales/sk.global.js +5 -5
- package/locales/sk.global.min.js +3 -3
- package/locales/sl.global.js +5 -5
- package/locales/sl.global.min.js +3 -3
- package/locales/sm.global.js +5 -5
- package/locales/sm.global.min.js +3 -3
- package/locales/sq.global.js +5 -5
- package/locales/sq.global.min.js +3 -3
- package/locales/sr-cyrl.global.js +5 -5
- package/locales/sr-cyrl.global.min.js +3 -3
- package/locales/sr.global.js +5 -5
- package/locales/sr.global.min.js +3 -3
- package/locales/sv.global.js +5 -5
- package/locales/sv.global.min.js +3 -3
- package/locales/ta-in.global.js +5 -5
- package/locales/ta-in.global.min.js +3 -3
- package/locales/th.global.js +5 -5
- package/locales/th.global.min.js +3 -3
- package/locales/tr.global.js +5 -5
- package/locales/tr.global.min.js +3 -3
- package/locales/ug.global.js +5 -5
- package/locales/ug.global.min.js +3 -3
- package/locales/uk.global.js +5 -5
- package/locales/uk.global.min.js +3 -3
- package/locales/uz.global.js +5 -5
- package/locales/uz.global.min.js +3 -3
- package/locales/vi.global.js +5 -5
- package/locales/vi.global.min.js +3 -3
- package/locales/zh-cn.global.js +5 -5
- package/locales/zh-cn.global.min.js +3 -3
- package/locales/zh-tw.global.js +5 -5
- package/locales/zh-tw.global.min.js +3 -3
- package/locales-all.global.js +5 -5
- package/locales-all.global.min.js +3 -3
- package/package.json +10 -11
- package/preact.js +1 -1
package/index.cjs
CHANGED
|
@@ -6,9 +6,11 @@ var internalCommon = require('./internal-common.cjs');
|
|
|
6
6
|
var preact = require('preact');
|
|
7
7
|
require('preact/compat');
|
|
8
8
|
|
|
9
|
-
var css_248z = "\n/*\nfor css vars only.\nthese values are automatically known in all stylesheets.\nthe :root statement itself is only included in the common stylesheet.\nthis file is not processed by postcss when imported into the postcss-custom-properties plugin,\nso only write standard css!\n\nNOTE: for old browsers, will need to restart watcher after changing a variable\n*/\n\n:root {\n --fc-small-font-size: .85em;\n --fc-page-bg-color: #fff;\n --fc-neutral-bg-color: rgba(208, 208, 208, 0.3);\n --fc-neutral-text-color: #808080;\n --fc-border-color: #ddd;\n\n --fc-button-text-color: #fff;\n --fc-button-bg-color: #2C3E50;\n --fc-button-border-color: #2C3E50;\n --fc-button-hover-bg-color: #1e2b37;\n --fc-button-hover-border-color: #1a252f;\n --fc-button-active-bg-color: #1a252f;\n --fc-button-active-border-color: #151e27;\n\n --fc-event-bg-color: #3788d8;\n --fc-event-border-color: #3788d8;\n --fc-event-text-color: #fff;\n --fc-event-selected-overlay-color: rgba(0, 0, 0, 0.25);\n\n --fc-more-link-bg-color: #d0d0d0;\n --fc-more-link-text-color: inherit;\n\n --fc-event-resizer-thickness: 8px;\n --fc-event-resizer-dot-total-width: 8px;\n --fc-event-resizer-dot-border-width: 1px;\n\n --fc-non-business-color: rgba(215, 215, 215, 0.3);\n --fc-bg-event-color: rgb(143, 223, 130);\n --fc-bg-event-opacity: 0.3;\n --fc-highlight-color: rgba(188, 232, 241, 0.3);\n --fc-today-bg-color: rgba(255, 220, 40, 0.15);\n --fc-now-indicator-color: red;\n}\n\n/* classes attached to <body> */\n\n/* TODO: make fc-event selector work when calender in shadow DOM */\n\n.fc-not-allowed,\n.fc-not-allowed .fc-event { /* override events' custom cursors */\n cursor: not-allowed;\n}\n\n/* TODO: not attached to body. attached to specific els. move */\n\n.fc-unselectable {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n -webkit-touch-callout: none;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n.fc {\n /* layout of immediate children */\n display: flex;\n flex-direction: column;\n\n font-size: 1em\n}\n.fc,\n .fc *,\n .fc *:before,\n .fc *:after {\n box-sizing: border-box;\n }\n.fc table {\n border-collapse: collapse;\n border-spacing: 0;\n font-size: 1em; /* normalize cross-browser */\n }\n.fc th {\n text-align: center;\n }\n.fc th,\n .fc td {\n vertical-align: top;\n padding: 0;\n }\n.fc a[data-navlink] {\n cursor: pointer;\n }\n.fc a[data-navlink]:hover {\n text-decoration: underline;\n }\n.fc-direction-ltr {\n direction: ltr;\n text-align: left;\n}\n.fc-direction-rtl {\n direction: rtl;\n text-align: right;\n}\n.fc-theme-standard td,\n .fc-theme-standard th {\n border: 1px solid var(--fc-border-color);\n }\n/* for FF, which doesn't expand a 100% div within a table cell. use absolute positioning */\n/* inner-wrappers are responsible for being absolute */\n/* TODO: best place for this? */\n.fc-liquid-hack td,\n .fc-liquid-hack th {\n position: relative;\n }\n\n@font-face {\n font-family: 'fcicons';\n src: url(\"data:application/x-font-ttf;charset=utf-8;base64,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\") format('truetype');\n font-weight: normal;\n font-style: normal;\n}\n\n.fc-icon {\n /* added for fc */\n display: inline-block;\n width: 1em;\n height: 1em;\n text-align: center;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n\n /* use !important to prevent issues with browser extensions that change fonts */\n font-family: 'fcicons' !important;\n speak: none;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n line-height: 1;\n\n /* Better Font Rendering =========== */\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.fc-icon-chevron-left:before {\n content: \"\\e900\";\n}\n\n.fc-icon-chevron-right:before {\n content: \"\\e901\";\n}\n\n.fc-icon-chevrons-left:before {\n content: \"\\e902\";\n}\n\n.fc-icon-chevrons-right:before {\n content: \"\\e903\";\n}\n\n.fc-icon-minus-square:before {\n content: \"\\e904\";\n}\n\n.fc-icon-plus-square:before {\n content: \"\\e905\";\n}\n\n.fc-icon-x:before {\n content: \"\\e906\";\n}\n/*\nLots taken from Flatly (MIT): https://bootswatch.com/4/flatly/bootstrap.css\n\nThese styles only apply when the standard-theme is activated.\nWhen it's NOT activated, the fc-button classes won't even be in the DOM.\n*/\n.fc {\n\n /* reset */\n\n}\n.fc .fc-button {\n border-radius: 0;\n overflow: visible;\n text-transform: none;\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n }\n.fc .fc-button:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n }\n.fc .fc-button {\n -webkit-appearance: button;\n }\n.fc .fc-button:not(:disabled) {\n cursor: pointer;\n }\n.fc .fc-button::-moz-focus-inner {\n padding: 0;\n border-style: none;\n }\n.fc {\n\n /* theme */\n\n}\n.fc .fc-button {\n display: inline-block;\n font-weight: 400;\n text-align: center;\n vertical-align: middle;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n background-color: transparent;\n border: 1px solid transparent;\n padding: 0.4em 0.65em;\n font-size: 1em;\n line-height: 1.5;\n border-radius: 0.25em;\n }\n.fc .fc-button:hover {\n text-decoration: none;\n }\n.fc .fc-button:focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(44, 62, 80, 0.25);\n }\n.fc .fc-button:disabled {\n opacity: 0.65;\n }\n.fc {\n\n /* \"primary\" coloring */\n\n}\n.fc .fc-button-primary {\n color: var(--fc-button-text-color);\n background-color: var(--fc-button-bg-color);\n border-color: var(--fc-button-border-color);\n }\n.fc .fc-button-primary:hover {\n color: var(--fc-button-text-color);\n background-color: var(--fc-button-hover-bg-color);\n border-color: var(--fc-button-hover-border-color);\n }\n.fc .fc-button-primary:disabled { /* not DRY */\n color: var(--fc-button-text-color);\n background-color: var(--fc-button-bg-color);\n border-color: var(--fc-button-border-color); /* overrides :hover */\n }\n.fc .fc-button-primary:focus {\n box-shadow: 0 0 0 0.2rem rgba(76, 91, 106, 0.5);\n }\n.fc .fc-button-primary:not(:disabled):active,\n .fc .fc-button-primary:not(:disabled).fc-button-active {\n color: var(--fc-button-text-color);\n background-color: var(--fc-button-active-bg-color);\n border-color: var(--fc-button-active-border-color);\n }\n.fc .fc-button-primary:not(:disabled):active:focus,\n .fc .fc-button-primary:not(:disabled).fc-button-active:focus {\n box-shadow: 0 0 0 0.2rem rgba(76, 91, 106, 0.5);\n }\n.fc {\n\n /* icons within buttons */\n\n}\n.fc .fc-button .fc-icon {\n vertical-align: middle;\n font-size: 1.5em; /* bump up the size (but don't make it bigger than line-height of button, which is 1.5em also) */\n }\n.fc .fc-button-group {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n }\n.fc .fc-button-group > .fc-button {\n position: relative;\n flex: 1 1 auto;\n }\n.fc .fc-button-group > .fc-button:hover {\n z-index: 1;\n }\n.fc .fc-button-group > .fc-button:focus,\n .fc .fc-button-group > .fc-button:active,\n .fc .fc-button-group > .fc-button.fc-button-active {\n z-index: 1;\n }\n.fc-direction-ltr .fc-button-group > .fc-button:not(:first-child) {\n margin-left: -1px;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n.fc-direction-ltr .fc-button-group > .fc-button:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n.fc-direction-rtl .fc-button-group > .fc-button:not(:first-child) {\n margin-right: -1px;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n.fc-direction-rtl .fc-button-group > .fc-button:not(:last-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n.fc .fc-toolbar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n.fc .fc-toolbar.fc-header-toolbar {\n margin-bottom: 1.5em;\n }\n.fc .fc-toolbar.fc-footer-toolbar {\n margin-top: 1.5em;\n }\n.fc .fc-toolbar-title {\n font-size: 1.75em;\n margin: 0;\n }\n.fc-direction-ltr .fc-toolbar > * > :not(:first-child) {\n margin-left: .75em; /* space between */\n }\n.fc-direction-rtl .fc-toolbar > * > :not(:first-child) {\n margin-right: .75em; /* space between */\n }\n.fc-direction-rtl .fc-toolbar-ltr { /* when the toolbar-chunk positioning system is explicitly left-to-right */\n flex-direction: row-reverse;\n }\n.fc .fc-scroller {\n -webkit-overflow-scrolling: touch;\n position: relative; /* for abs-positioned elements within */\n }\n.fc .fc-scroller-liquid {\n height: 100%;\n }\n.fc .fc-scroller-liquid-absolute {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n }\n.fc .fc-scroller-harness {\n position: relative;\n overflow: hidden;\n direction: ltr;\n /* hack for chrome computing the scroller's right/left wrong for rtl. undone below... */\n /* TODO: demonstrate in codepen */\n }\n.fc .fc-scroller-harness-liquid {\n height: 100%;\n }\n.fc-direction-rtl .fc-scroller-harness > .fc-scroller { /* undo above hack */\n direction: rtl;\n }\n.fc-theme-standard .fc-scrollgrid {\n border: 1px solid var(--fc-border-color); /* bootstrap does this. match */\n }\n.fc .fc-scrollgrid,\n .fc .fc-scrollgrid table { /* all tables (self included) */\n width: 100%; /* because tables don't normally do this */\n table-layout: fixed;\n }\n.fc .fc-scrollgrid table { /* inner tables */\n border-top-style: hidden;\n border-left-style: hidden;\n border-right-style: hidden;\n }\n.fc .fc-scrollgrid {\n\n border-collapse: separate;\n border-right-width: 0;\n border-bottom-width: 0;\n\n }\n.fc .fc-scrollgrid-liquid {\n height: 100%;\n }\n.fc .fc-scrollgrid-section { /* a <tr> */\n height: 1px /* better than 0, for firefox */\n\n }\n.fc .fc-scrollgrid-section > td {\n height: 1px; /* needs a height so inner div within grow. better than 0, for firefox */\n }\n.fc .fc-scrollgrid-section table {\n height: 1px;\n /* for most browsers, if a height isn't set on the table, can't do liquid-height within cells */\n /* serves as a min-height. harmless */\n }\n.fc .fc-scrollgrid-section-liquid > td {\n height: 100%; /* better than `auto`, for firefox */\n }\n.fc .fc-scrollgrid-section > * {\n border-top-width: 0;\n border-left-width: 0;\n }\n.fc .fc-scrollgrid-section-header > *,\n .fc .fc-scrollgrid-section-footer > * {\n border-bottom-width: 0;\n }\n.fc .fc-scrollgrid-section-body table,\n .fc .fc-scrollgrid-section-footer table {\n border-bottom-style: hidden; /* head keeps its bottom border tho */\n }\n.fc {\n\n /* stickiness */\n\n}\n.fc .fc-scrollgrid-section-sticky > * {\n background: var(--fc-page-bg-color);\n position: sticky;\n z-index: 3; /* TODO: var */\n /* TODO: box-shadow when sticking */\n }\n.fc .fc-scrollgrid-section-header.fc-scrollgrid-section-sticky > * {\n top: 0; /* because border-sharing causes a gap at the top */\n /* TODO: give safari -1. has bug */\n }\n.fc .fc-scrollgrid-section-footer.fc-scrollgrid-section-sticky > * {\n bottom: 0; /* known bug: bottom-stickiness doesn't work in safari */\n }\n.fc .fc-scrollgrid-sticky-shim { /* for horizontal scrollbar */\n height: 1px; /* needs height to create scrollbars */\n margin-bottom: -1px;\n }\n.fc-sticky { /* no .fc wrap because used as child of body */\n position: sticky;\n}\n.fc .fc-view-harness {\n flex-grow: 1; /* because this harness is WITHIN the .fc's flexbox */\n position: relative;\n }\n.fc {\n\n /* when the harness controls the height, make the view liquid */\n\n}\n.fc .fc-view-harness-active > .fc-view {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n }\n.fc .fc-col-header-cell-cushion {\n display: inline-block; /* x-browser for when sticky (when multi-tier header) */\n padding: 2px 4px;\n }\n.fc .fc-bg-event,\n .fc .fc-non-business,\n .fc .fc-highlight {\n /* will always have a harness with position:relative/absolute, so absolutely expand */\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n.fc .fc-non-business {\n background: var(--fc-non-business-color);\n }\n.fc .fc-bg-event {\n background: var(--fc-bg-event-color);\n opacity: var(--fc-bg-event-opacity)\n }\n.fc .fc-bg-event .fc-event-title {\n margin: .5em;\n font-size: var(--fc-small-font-size);\n font-style: italic;\n }\n.fc .fc-highlight {\n background: var(--fc-highlight-color);\n }\n.fc .fc-cell-shaded,\n .fc .fc-day-disabled {\n background: var(--fc-neutral-bg-color);\n }\n/* link resets */\n/* ---------------------------------------------------------------------------------------------------- */\na.fc-event,\na.fc-event:hover {\n text-decoration: none;\n}\n/* cursor */\n.fc-event[href],\n.fc-event.fc-event-draggable {\n cursor: pointer;\n}\n/* event text content */\n/* ---------------------------------------------------------------------------------------------------- */\n.fc-event .fc-event-main {\n position: relative;\n z-index: 2;\n }\n/* dragging */\n/* ---------------------------------------------------------------------------------------------------- */\n.fc-event-dragging:not(.fc-event-selected) { /* MOUSE */\n opacity: 0.75;\n }\n.fc-event-dragging.fc-event-selected { /* TOUCH */\n box-shadow: 0 2px 7px rgba(0, 0, 0, 0.3);\n }\n/* resizing */\n/* ---------------------------------------------------------------------------------------------------- */\n/* (subclasses should hone positioning for touch and non-touch) */\n.fc-event .fc-event-resizer {\n display: none;\n position: absolute;\n z-index: 4;\n }\n.fc-event:hover, /* MOUSE */\n.fc-event-selected { /* TOUCH */\n\n}\n.fc-event:hover .fc-event-resizer, .fc-event-selected .fc-event-resizer {\n display: block;\n }\n.fc-event-selected .fc-event-resizer {\n border-radius: calc(var(--fc-event-resizer-dot-total-width) / 2);\n border-width: var(--fc-event-resizer-dot-border-width);\n width: var(--fc-event-resizer-dot-total-width);\n height: var(--fc-event-resizer-dot-total-width);\n border-style: solid;\n border-color: inherit;\n background: var(--fc-page-bg-color)\n\n /* expand hit area */\n\n }\n.fc-event-selected .fc-event-resizer:before {\n content: '';\n position: absolute;\n top: -20px;\n left: -20px;\n right: -20px;\n bottom: -20px;\n }\n/* selecting (always TOUCH) */\n/* OR, focused by tab-index */\n/* (TODO: maybe not the best focus-styling for .fc-daygrid-dot-event) */\n/* ---------------------------------------------------------------------------------------------------- */\n.fc-event-selected,\n.fc-event:focus {\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2)\n\n /* expand hit area (subclasses should expand) */\n\n}\n.fc-event-selected:before, .fc-event:focus:before {\n content: \"\";\n position: absolute;\n z-index: 3;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n.fc-event-selected,\n.fc-event:focus {\n\n /* dimmer effect */\n\n}\n.fc-event-selected:after, .fc-event:focus:after {\n content: \"\";\n background: var(--fc-event-selected-overlay-color);\n position: absolute;\n z-index: 1;\n\n /* assume there's a border on all sides. overcome it. */\n /* sometimes there's NOT a border, in which case the dimmer will go over */\n /* an adjacent border, which looks fine. */\n top: -1px;\n left: -1px;\n right: -1px;\n bottom: -1px;\n }\n/*\nA HORIZONTAL event\n*/\n.fc-h-event { /* allowed to be top-level */\n display: block;\n border: 1px solid var(--fc-event-border-color);\n background-color: var(--fc-event-bg-color)\n\n}\n.fc-h-event .fc-event-main {\n color: var(--fc-event-text-color);\n }\n.fc-h-event .fc-event-main-frame {\n display: flex; /* for make fc-event-title-container expand */\n }\n.fc-h-event .fc-event-time {\n max-width: 100%; /* clip overflow on this element */\n overflow: hidden;\n }\n.fc-h-event .fc-event-title-container { /* serves as a container for the sticky cushion */\n flex-grow: 1;\n flex-shrink: 1;\n min-width: 0; /* important for allowing to shrink all the way */\n }\n.fc-h-event .fc-event-title {\n display: inline-block; /* need this to be sticky cross-browser */\n vertical-align: top; /* for not messing up line-height */\n left: 0; /* for sticky */\n right: 0; /* for sticky */\n max-width: 100%; /* clip overflow on this element */\n overflow: hidden;\n }\n.fc-h-event.fc-event-selected:before {\n /* expand hit area */\n top: -10px;\n bottom: -10px;\n }\n/* adjust border and border-radius (if there is any) for non-start/end */\n.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),\n.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-left-width: 0;\n}\n.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),\n.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border-right-width: 0;\n}\n/* resizers */\n.fc-h-event:not(.fc-event-selected) .fc-event-resizer {\n top: 0;\n bottom: 0;\n width: var(--fc-event-resizer-thickness);\n}\n.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,\n.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end {\n cursor: w-resize;\n left: calc(-0.5 * var(--fc-event-resizer-thickness));\n}\n.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,\n.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start {\n cursor: e-resize;\n right: calc(-0.5 * var(--fc-event-resizer-thickness));\n}\n/* resizers for TOUCH */\n.fc-h-event.fc-event-selected .fc-event-resizer {\n top: 50%;\n margin-top: calc(-0.5 * var(--fc-event-resizer-dot-total-width));\n}\n.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,\n.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end {\n left: calc(-0.5 * var(--fc-event-resizer-dot-total-width));\n}\n.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,\n.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start {\n right: calc(-0.5 * var(--fc-event-resizer-dot-total-width));\n}\n.fc .fc-popover {\n position: absolute;\n z-index: 9999;\n box-shadow: 0 2px 6px rgba(0,0,0,.15);\n }\n.fc .fc-popover-header {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n padding: 3px 4px;\n }\n.fc .fc-popover-title {\n margin: 0 2px;\n }\n.fc .fc-popover-close {\n cursor: pointer;\n opacity: 0.65;\n font-size: 1.1em;\n }\n.fc-theme-standard .fc-popover {\n border: 1px solid var(--fc-border-color);\n background: var(--fc-page-bg-color);\n }\n.fc-theme-standard .fc-popover-header {\n background: var(--fc-neutral-bg-color);\n }\n";
|
|
9
|
+
var css_248z = ":root{--fc-small-font-size:.85em;--fc-page-bg-color:#fff;--fc-neutral-bg-color:hsla(0,0%,82%,.3);--fc-neutral-text-color:grey;--fc-border-color:#ddd;--fc-button-text-color:#fff;--fc-button-bg-color:#2c3e50;--fc-button-border-color:#2c3e50;--fc-button-hover-bg-color:#1e2b37;--fc-button-hover-border-color:#1a252f;--fc-button-active-bg-color:#1a252f;--fc-button-active-border-color:#151e27;--fc-event-bg-color:#3788d8;--fc-event-border-color:#3788d8;--fc-event-text-color:#fff;--fc-event-selected-overlay-color:rgba(0,0,0,.25);--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:hsla(0,0%,84%,.3);--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(188,232,241,.3);--fc-today-bg-color:rgba(255,220,40,.15);--fc-now-indicator-color:red}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-unselectable{-webkit-touch-callout:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;user-select:none}.fc{display:flex;flex-direction:column;font-size:1em}.fc,.fc *,.fc :after,.fc :before{box-sizing:border-box}.fc table{border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{padding:0;vertical-align:top}.fc a[data-navlink]{cursor:pointer}.fc a[data-navlink]:hover{text-decoration:underline}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-theme-standard td,.fc-theme-standard th{border:1px solid var(--fc-border-color)}.fc-liquid-hack td,.fc-liquid-hack th{position:relative}@font-face{font-family:fcicons;font-style:normal;font-weight:400;src:url(\"data:application/x-font-ttf;charset=utf-8;base64,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\") format(\"truetype\")}.fc-icon{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:fcicons!important;font-style:normal;font-variant:normal;font-weight:400;height:1em;line-height:1;text-align:center;text-transform:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:1em}.fc-icon-chevron-left:before{content:\"\\e900\"}.fc-icon-chevron-right:before{content:\"\\e901\"}.fc-icon-chevrons-left:before{content:\"\\e902\"}.fc-icon-chevrons-right:before{content:\"\\e903\"}.fc-icon-minus-square:before{content:\"\\e904\"}.fc-icon-plus-square:before{content:\"\\e905\"}.fc-icon-x:before{content:\"\\e906\"}.fc .fc-button{border-radius:0;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible;text-transform:none}.fc .fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc .fc-button{-webkit-appearance:button}.fc .fc-button:not(:disabled){cursor:pointer}.fc .fc-button::-moz-focus-inner{border-style:none;padding:0}.fc .fc-button{background-color:transparent;border:1px solid transparent;border-radius:.25em;display:inline-block;font-size:1em;font-weight:400;line-height:1.5;padding:.4em .65em;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}.fc .fc-button:hover{text-decoration:none}.fc .fc-button:focus{box-shadow:0 0 0 .2rem rgba(44,62,80,.25);outline:0}.fc .fc-button:disabled{opacity:.65}.fc .fc-button-primary{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:hover{background-color:var(--fc-button-hover-bg-color);border-color:var(--fc-button-hover-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:disabled{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button-primary:not(:disabled).fc-button-active,.fc .fc-button-primary:not(:disabled):active{background-color:var(--fc-button-active-bg-color);border-color:var(--fc-button-active-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:not(:disabled).fc-button-active:focus,.fc .fc-button-primary:not(:disabled):active:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button .fc-icon{font-size:1.5em;vertical-align:middle}.fc .fc-button-group{display:inline-flex;position:relative;vertical-align:middle}.fc .fc-button-group>.fc-button{flex:1 1 auto;position:relative}.fc .fc-button-group>.fc-button.fc-button-active,.fc .fc-button-group>.fc-button:active,.fc .fc-button-group>.fc-button:focus,.fc .fc-button-group>.fc-button:hover{z-index:1}.fc-direction-ltr .fc-button-group>.fc-button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.fc-direction-ltr .fc-button-group>.fc-button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.fc-direction-rtl .fc-button-group>.fc-button:not(:last-child){border-bottom-left-radius:0;border-top-left-radius:0}.fc .fc-toolbar{align-items:center;display:flex;justify-content:space-between}.fc .fc-toolbar.fc-header-toolbar{margin-bottom:1.5em}.fc .fc-toolbar.fc-footer-toolbar{margin-top:1.5em}.fc .fc-toolbar-title{font-size:1.75em;margin:0}.fc-direction-ltr .fc-toolbar>*>:not(:first-child){margin-left:.75em}.fc-direction-rtl .fc-toolbar>*>:not(:first-child){margin-right:.75em}.fc-direction-rtl .fc-toolbar-ltr{flex-direction:row-reverse}.fc .fc-scroller{-webkit-overflow-scrolling:touch;position:relative}.fc .fc-scroller-liquid{height:100%}.fc .fc-scroller-liquid-absolute{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-scroller-harness{direction:ltr;overflow:hidden;position:relative}.fc .fc-scroller-harness-liquid{height:100%}.fc-direction-rtl .fc-scroller-harness>.fc-scroller{direction:rtl}.fc-theme-standard .fc-scrollgrid{border:1px solid var(--fc-border-color)}.fc .fc-scrollgrid,.fc .fc-scrollgrid table{table-layout:fixed;width:100%}.fc .fc-scrollgrid table{border-left-style:hidden;border-right-style:hidden;border-top-style:hidden}.fc .fc-scrollgrid{border-bottom-width:0;border-collapse:separate;border-right-width:0}.fc .fc-scrollgrid-liquid{height:100%}.fc .fc-scrollgrid-section,.fc .fc-scrollgrid-section table,.fc .fc-scrollgrid-section>td{height:1px}.fc .fc-scrollgrid-section-liquid>td{height:100%}.fc .fc-scrollgrid-section>*{border-left-width:0;border-top-width:0}.fc .fc-scrollgrid-section-footer>*,.fc .fc-scrollgrid-section-header>*{border-bottom-width:0}.fc .fc-scrollgrid-section-body table,.fc .fc-scrollgrid-section-footer table{border-bottom-style:hidden}.fc .fc-scrollgrid-section-sticky>*{background:var(--fc-page-bg-color);position:sticky;z-index:3}.fc .fc-scrollgrid-section-header.fc-scrollgrid-section-sticky>*{top:0}.fc .fc-scrollgrid-section-footer.fc-scrollgrid-section-sticky>*{bottom:0}.fc .fc-scrollgrid-sticky-shim{height:1px;margin-bottom:-1px}.fc-sticky{position:sticky}.fc .fc-view-harness{flex-grow:1;position:relative}.fc .fc-view-harness-active>.fc-view{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-col-header-cell-cushion{display:inline-block;padding:2px 4px}.fc .fc-bg-event,.fc .fc-highlight,.fc .fc-non-business{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-non-business{background:var(--fc-non-business-color)}.fc .fc-bg-event{background:var(--fc-bg-event-color);opacity:var(--fc-bg-event-opacity)}.fc .fc-bg-event .fc-event-title{font-size:var(--fc-small-font-size);font-style:italic;margin:.5em}.fc .fc-highlight{background:var(--fc-highlight-color)}.fc .fc-cell-shaded,.fc .fc-day-disabled{background:var(--fc-neutral-bg-color)}a.fc-event,a.fc-event:hover{text-decoration:none}.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.fc-event .fc-event-main{position:relative;z-index:2}.fc-event-dragging:not(.fc-event-selected){opacity:.75}.fc-event-dragging.fc-event-selected{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event .fc-event-resizer{display:none;position:absolute;z-index:4}.fc-event-selected .fc-event-resizer,.fc-event:hover .fc-event-resizer{display:block}.fc-event-selected .fc-event-resizer{background:var(--fc-page-bg-color);border-color:inherit;border-radius:calc(var(--fc-event-resizer-dot-total-width)/2);border-style:solid;border-width:var(--fc-event-resizer-dot-border-width);height:var(--fc-event-resizer-dot-total-width);width:var(--fc-event-resizer-dot-total-width)}.fc-event-selected .fc-event-resizer:before{bottom:-20px;content:\"\";left:-20px;position:absolute;right:-20px;top:-20px}.fc-event-selected,.fc-event:focus{box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event-selected:before,.fc-event:focus:before{bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;z-index:3}.fc-event-selected:after,.fc-event:focus:after{background:var(--fc-event-selected-overlay-color);bottom:-1px;content:\"\";left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fc-h-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-h-event .fc-event-main{color:var(--fc-event-text-color)}.fc-h-event .fc-event-main-frame{display:flex}.fc-h-event .fc-event-time{max-width:100%;overflow:hidden}.fc-h-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-width:0}.fc-h-event .fc-event-title{display:inline-block;left:0;max-width:100%;overflow:hidden;right:0;vertical-align:top}.fc-h-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-h-event:not(.fc-event-selected) .fc-event-resizer{bottom:0;top:0;width:var(--fc-event-resizer-thickness)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end{cursor:w-resize;left:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start{cursor:e-resize;right:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-h-event.fc-event-selected .fc-event-resizer{margin-top:calc(var(--fc-event-resizer-dot-total-width)*-.5);top:50%}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end{left:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start{right:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc .fc-popover{box-shadow:0 2px 6px rgba(0,0,0,.15);position:absolute;z-index:9999}.fc .fc-popover-header{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:3px 4px}.fc .fc-popover-title{margin:0 2px}.fc .fc-popover-close{cursor:pointer;font-size:1.1em;opacity:.65}.fc-theme-standard .fc-popover{background:var(--fc-page-bg-color);border:1px solid var(--fc-border-color)}.fc-theme-standard .fc-popover-header{background:var(--fc-neutral-bg-color)}";
|
|
10
10
|
internalCommon.injectStyles(css_248z);
|
|
11
11
|
|
|
12
|
+
const globalLocales = [];
|
|
13
|
+
|
|
12
14
|
const MINIMAL_RAW_EN_LOCALE = {
|
|
13
15
|
code: 'en',
|
|
14
16
|
week: {
|
|
@@ -53,7 +55,7 @@ const RAW_EN_LOCALE = Object.assign(Object.assign({}, MINIMAL_RAW_EN_LOCALE), {
|
|
|
53
55
|
} });
|
|
54
56
|
function organizeRawLocales(explicitRawLocales) {
|
|
55
57
|
let defaultCode = explicitRawLocales.length > 0 ? explicitRawLocales[0].code : 'en';
|
|
56
|
-
let allRawLocales =
|
|
58
|
+
let allRawLocales = globalLocales.concat(explicitRawLocales);
|
|
57
59
|
let rawLocaleMap = {
|
|
58
60
|
en: RAW_EN_LOCALE,
|
|
59
61
|
};
|
|
@@ -102,6 +104,165 @@ function parseLocale(codeArg, codes, raw) {
|
|
|
102
104
|
};
|
|
103
105
|
}
|
|
104
106
|
|
|
107
|
+
// TODO: easier way to add new hooks? need to update a million things
|
|
108
|
+
function createPlugin(input) {
|
|
109
|
+
return {
|
|
110
|
+
id: internalCommon.guid(),
|
|
111
|
+
name: input.name,
|
|
112
|
+
premiumReleaseDate: input.premiumReleaseDate ? new Date(input.premiumReleaseDate) : undefined,
|
|
113
|
+
deps: input.deps || [],
|
|
114
|
+
reducers: input.reducers || [],
|
|
115
|
+
isLoadingFuncs: input.isLoadingFuncs || [],
|
|
116
|
+
contextInit: [].concat(input.contextInit || []),
|
|
117
|
+
eventRefiners: input.eventRefiners || {},
|
|
118
|
+
eventDefMemberAdders: input.eventDefMemberAdders || [],
|
|
119
|
+
eventSourceRefiners: input.eventSourceRefiners || {},
|
|
120
|
+
isDraggableTransformers: input.isDraggableTransformers || [],
|
|
121
|
+
eventDragMutationMassagers: input.eventDragMutationMassagers || [],
|
|
122
|
+
eventDefMutationAppliers: input.eventDefMutationAppliers || [],
|
|
123
|
+
dateSelectionTransformers: input.dateSelectionTransformers || [],
|
|
124
|
+
datePointTransforms: input.datePointTransforms || [],
|
|
125
|
+
dateSpanTransforms: input.dateSpanTransforms || [],
|
|
126
|
+
views: input.views || {},
|
|
127
|
+
viewPropsTransformers: input.viewPropsTransformers || [],
|
|
128
|
+
isPropsValid: input.isPropsValid || null,
|
|
129
|
+
externalDefTransforms: input.externalDefTransforms || [],
|
|
130
|
+
viewContainerAppends: input.viewContainerAppends || [],
|
|
131
|
+
eventDropTransformers: input.eventDropTransformers || [],
|
|
132
|
+
componentInteractions: input.componentInteractions || [],
|
|
133
|
+
calendarInteractions: input.calendarInteractions || [],
|
|
134
|
+
themeClasses: input.themeClasses || {},
|
|
135
|
+
eventSourceDefs: input.eventSourceDefs || [],
|
|
136
|
+
cmdFormatter: input.cmdFormatter,
|
|
137
|
+
recurringTypes: input.recurringTypes || [],
|
|
138
|
+
namedTimeZonedImpl: input.namedTimeZonedImpl,
|
|
139
|
+
initialView: input.initialView || '',
|
|
140
|
+
elementDraggingImpl: input.elementDraggingImpl,
|
|
141
|
+
optionChangeHandlers: input.optionChangeHandlers || {},
|
|
142
|
+
scrollGridImpl: input.scrollGridImpl || null,
|
|
143
|
+
listenerRefiners: input.listenerRefiners || {},
|
|
144
|
+
optionRefiners: input.optionRefiners || {},
|
|
145
|
+
propSetHandlers: input.propSetHandlers || {},
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
function buildPluginHooks(pluginDefs, globalDefs) {
|
|
149
|
+
let currentPluginIds = {};
|
|
150
|
+
let hooks = {
|
|
151
|
+
premiumReleaseDate: undefined,
|
|
152
|
+
reducers: [],
|
|
153
|
+
isLoadingFuncs: [],
|
|
154
|
+
contextInit: [],
|
|
155
|
+
eventRefiners: {},
|
|
156
|
+
eventDefMemberAdders: [],
|
|
157
|
+
eventSourceRefiners: {},
|
|
158
|
+
isDraggableTransformers: [],
|
|
159
|
+
eventDragMutationMassagers: [],
|
|
160
|
+
eventDefMutationAppliers: [],
|
|
161
|
+
dateSelectionTransformers: [],
|
|
162
|
+
datePointTransforms: [],
|
|
163
|
+
dateSpanTransforms: [],
|
|
164
|
+
views: {},
|
|
165
|
+
viewPropsTransformers: [],
|
|
166
|
+
isPropsValid: null,
|
|
167
|
+
externalDefTransforms: [],
|
|
168
|
+
viewContainerAppends: [],
|
|
169
|
+
eventDropTransformers: [],
|
|
170
|
+
componentInteractions: [],
|
|
171
|
+
calendarInteractions: [],
|
|
172
|
+
themeClasses: {},
|
|
173
|
+
eventSourceDefs: [],
|
|
174
|
+
cmdFormatter: null,
|
|
175
|
+
recurringTypes: [],
|
|
176
|
+
namedTimeZonedImpl: null,
|
|
177
|
+
initialView: '',
|
|
178
|
+
elementDraggingImpl: null,
|
|
179
|
+
optionChangeHandlers: {},
|
|
180
|
+
scrollGridImpl: null,
|
|
181
|
+
listenerRefiners: {},
|
|
182
|
+
optionRefiners: {},
|
|
183
|
+
propSetHandlers: {},
|
|
184
|
+
};
|
|
185
|
+
function addDefs(defs) {
|
|
186
|
+
for (let def of defs) {
|
|
187
|
+
const pluginName = def.name;
|
|
188
|
+
const currentId = currentPluginIds[pluginName];
|
|
189
|
+
if (currentId === undefined) {
|
|
190
|
+
currentPluginIds[pluginName] = def.id;
|
|
191
|
+
addDefs(def.deps);
|
|
192
|
+
hooks = combineHooks(hooks, def);
|
|
193
|
+
}
|
|
194
|
+
else if (currentId !== def.id) {
|
|
195
|
+
// different ID than the one already added
|
|
196
|
+
console.warn(`Duplicate plugin '${pluginName}'`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (pluginDefs) {
|
|
201
|
+
addDefs(pluginDefs);
|
|
202
|
+
}
|
|
203
|
+
addDefs(globalDefs);
|
|
204
|
+
return hooks;
|
|
205
|
+
}
|
|
206
|
+
function buildBuildPluginHooks() {
|
|
207
|
+
let currentOverrideDefs = [];
|
|
208
|
+
let currentGlobalDefs = [];
|
|
209
|
+
let currentHooks;
|
|
210
|
+
return (overrideDefs, globalDefs) => {
|
|
211
|
+
if (!currentHooks || !internalCommon.isArraysEqual(overrideDefs, currentOverrideDefs) || !internalCommon.isArraysEqual(globalDefs, currentGlobalDefs)) {
|
|
212
|
+
currentHooks = buildPluginHooks(overrideDefs, globalDefs);
|
|
213
|
+
}
|
|
214
|
+
currentOverrideDefs = overrideDefs;
|
|
215
|
+
currentGlobalDefs = globalDefs;
|
|
216
|
+
return currentHooks;
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
function combineHooks(hooks0, hooks1) {
|
|
220
|
+
return {
|
|
221
|
+
premiumReleaseDate: compareOptionalDates(hooks0.premiumReleaseDate, hooks1.premiumReleaseDate),
|
|
222
|
+
reducers: hooks0.reducers.concat(hooks1.reducers),
|
|
223
|
+
isLoadingFuncs: hooks0.isLoadingFuncs.concat(hooks1.isLoadingFuncs),
|
|
224
|
+
contextInit: hooks0.contextInit.concat(hooks1.contextInit),
|
|
225
|
+
eventRefiners: Object.assign(Object.assign({}, hooks0.eventRefiners), hooks1.eventRefiners),
|
|
226
|
+
eventDefMemberAdders: hooks0.eventDefMemberAdders.concat(hooks1.eventDefMemberAdders),
|
|
227
|
+
eventSourceRefiners: Object.assign(Object.assign({}, hooks0.eventSourceRefiners), hooks1.eventSourceRefiners),
|
|
228
|
+
isDraggableTransformers: hooks0.isDraggableTransformers.concat(hooks1.isDraggableTransformers),
|
|
229
|
+
eventDragMutationMassagers: hooks0.eventDragMutationMassagers.concat(hooks1.eventDragMutationMassagers),
|
|
230
|
+
eventDefMutationAppliers: hooks0.eventDefMutationAppliers.concat(hooks1.eventDefMutationAppliers),
|
|
231
|
+
dateSelectionTransformers: hooks0.dateSelectionTransformers.concat(hooks1.dateSelectionTransformers),
|
|
232
|
+
datePointTransforms: hooks0.datePointTransforms.concat(hooks1.datePointTransforms),
|
|
233
|
+
dateSpanTransforms: hooks0.dateSpanTransforms.concat(hooks1.dateSpanTransforms),
|
|
234
|
+
views: Object.assign(Object.assign({}, hooks0.views), hooks1.views),
|
|
235
|
+
viewPropsTransformers: hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers),
|
|
236
|
+
isPropsValid: hooks1.isPropsValid || hooks0.isPropsValid,
|
|
237
|
+
externalDefTransforms: hooks0.externalDefTransforms.concat(hooks1.externalDefTransforms),
|
|
238
|
+
viewContainerAppends: hooks0.viewContainerAppends.concat(hooks1.viewContainerAppends),
|
|
239
|
+
eventDropTransformers: hooks0.eventDropTransformers.concat(hooks1.eventDropTransformers),
|
|
240
|
+
calendarInteractions: hooks0.calendarInteractions.concat(hooks1.calendarInteractions),
|
|
241
|
+
componentInteractions: hooks0.componentInteractions.concat(hooks1.componentInteractions),
|
|
242
|
+
themeClasses: Object.assign(Object.assign({}, hooks0.themeClasses), hooks1.themeClasses),
|
|
243
|
+
eventSourceDefs: hooks0.eventSourceDefs.concat(hooks1.eventSourceDefs),
|
|
244
|
+
cmdFormatter: hooks1.cmdFormatter || hooks0.cmdFormatter,
|
|
245
|
+
recurringTypes: hooks0.recurringTypes.concat(hooks1.recurringTypes),
|
|
246
|
+
namedTimeZonedImpl: hooks1.namedTimeZonedImpl || hooks0.namedTimeZonedImpl,
|
|
247
|
+
initialView: hooks0.initialView || hooks1.initialView,
|
|
248
|
+
elementDraggingImpl: hooks0.elementDraggingImpl || hooks1.elementDraggingImpl,
|
|
249
|
+
optionChangeHandlers: Object.assign(Object.assign({}, hooks0.optionChangeHandlers), hooks1.optionChangeHandlers),
|
|
250
|
+
scrollGridImpl: hooks1.scrollGridImpl || hooks0.scrollGridImpl,
|
|
251
|
+
listenerRefiners: Object.assign(Object.assign({}, hooks0.listenerRefiners), hooks1.listenerRefiners),
|
|
252
|
+
optionRefiners: Object.assign(Object.assign({}, hooks0.optionRefiners), hooks1.optionRefiners),
|
|
253
|
+
propSetHandlers: Object.assign(Object.assign({}, hooks0.propSetHandlers), hooks1.propSetHandlers),
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
function compareOptionalDates(date0, date1) {
|
|
257
|
+
if (date0 === undefined) {
|
|
258
|
+
return date1;
|
|
259
|
+
}
|
|
260
|
+
if (date1 === undefined) {
|
|
261
|
+
return date0;
|
|
262
|
+
}
|
|
263
|
+
return new Date(Math.max(date0.valueOf(), date1.valueOf()));
|
|
264
|
+
}
|
|
265
|
+
|
|
105
266
|
class StandardTheme extends internalCommon.Theme {
|
|
106
267
|
}
|
|
107
268
|
StandardTheme.prototype.classes = {
|
|
@@ -331,6 +492,170 @@ function reduceDateProfile(currentDateProfile, action, currentDate, dateProfileG
|
|
|
331
492
|
return currentDateProfile;
|
|
332
493
|
}
|
|
333
494
|
|
|
495
|
+
function initEventSources(calendarOptions, dateProfile, context) {
|
|
496
|
+
let activeRange = dateProfile ? dateProfile.activeRange : null;
|
|
497
|
+
return addSources({}, parseInitialSources(calendarOptions, context), activeRange, context);
|
|
498
|
+
}
|
|
499
|
+
function reduceEventSources(eventSources, action, dateProfile, context) {
|
|
500
|
+
let activeRange = dateProfile ? dateProfile.activeRange : null; // need this check?
|
|
501
|
+
switch (action.type) {
|
|
502
|
+
case 'ADD_EVENT_SOURCES': // already parsed
|
|
503
|
+
return addSources(eventSources, action.sources, activeRange, context);
|
|
504
|
+
case 'REMOVE_EVENT_SOURCE':
|
|
505
|
+
return removeSource(eventSources, action.sourceId);
|
|
506
|
+
case 'PREV': // TODO: how do we track all actions that affect dateProfile :(
|
|
507
|
+
case 'NEXT':
|
|
508
|
+
case 'CHANGE_DATE':
|
|
509
|
+
case 'CHANGE_VIEW_TYPE':
|
|
510
|
+
if (dateProfile) {
|
|
511
|
+
return fetchDirtySources(eventSources, activeRange, context);
|
|
512
|
+
}
|
|
513
|
+
return eventSources;
|
|
514
|
+
case 'FETCH_EVENT_SOURCES':
|
|
515
|
+
return fetchSourcesByIds(eventSources, action.sourceIds ? // why no type?
|
|
516
|
+
internalCommon.arrayToHash(action.sourceIds) :
|
|
517
|
+
excludeStaticSources(eventSources, context), activeRange, action.isRefetch || false, context);
|
|
518
|
+
case 'RECEIVE_EVENTS':
|
|
519
|
+
case 'RECEIVE_EVENT_ERROR':
|
|
520
|
+
return receiveResponse(eventSources, action.sourceId, action.fetchId, action.fetchRange);
|
|
521
|
+
case 'REMOVE_ALL_EVENT_SOURCES':
|
|
522
|
+
return {};
|
|
523
|
+
default:
|
|
524
|
+
return eventSources;
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
function reduceEventSourcesNewTimeZone(eventSources, dateProfile, context) {
|
|
528
|
+
let activeRange = dateProfile ? dateProfile.activeRange : null; // need this check?
|
|
529
|
+
return fetchSourcesByIds(eventSources, excludeStaticSources(eventSources, context), activeRange, true, context);
|
|
530
|
+
}
|
|
531
|
+
function computeEventSourcesLoading(eventSources) {
|
|
532
|
+
for (let sourceId in eventSources) {
|
|
533
|
+
if (eventSources[sourceId].isFetching) {
|
|
534
|
+
return true;
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
return false;
|
|
538
|
+
}
|
|
539
|
+
function addSources(eventSourceHash, sources, fetchRange, context) {
|
|
540
|
+
let hash = {};
|
|
541
|
+
for (let source of sources) {
|
|
542
|
+
hash[source.sourceId] = source;
|
|
543
|
+
}
|
|
544
|
+
if (fetchRange) {
|
|
545
|
+
hash = fetchDirtySources(hash, fetchRange, context);
|
|
546
|
+
}
|
|
547
|
+
return Object.assign(Object.assign({}, eventSourceHash), hash);
|
|
548
|
+
}
|
|
549
|
+
function removeSource(eventSourceHash, sourceId) {
|
|
550
|
+
return internalCommon.filterHash(eventSourceHash, (eventSource) => eventSource.sourceId !== sourceId);
|
|
551
|
+
}
|
|
552
|
+
function fetchDirtySources(sourceHash, fetchRange, context) {
|
|
553
|
+
return fetchSourcesByIds(sourceHash, internalCommon.filterHash(sourceHash, (eventSource) => isSourceDirty(eventSource, fetchRange, context)), fetchRange, false, context);
|
|
554
|
+
}
|
|
555
|
+
function isSourceDirty(eventSource, fetchRange, context) {
|
|
556
|
+
if (!doesSourceNeedRange(eventSource, context)) {
|
|
557
|
+
return !eventSource.latestFetchId;
|
|
558
|
+
}
|
|
559
|
+
return !context.options.lazyFetching ||
|
|
560
|
+
!eventSource.fetchRange ||
|
|
561
|
+
eventSource.isFetching || // always cancel outdated in-progress fetches
|
|
562
|
+
fetchRange.start < eventSource.fetchRange.start ||
|
|
563
|
+
fetchRange.end > eventSource.fetchRange.end;
|
|
564
|
+
}
|
|
565
|
+
function fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, isRefetch, context) {
|
|
566
|
+
let nextSources = {};
|
|
567
|
+
for (let sourceId in prevSources) {
|
|
568
|
+
let source = prevSources[sourceId];
|
|
569
|
+
if (sourceIdHash[sourceId]) {
|
|
570
|
+
nextSources[sourceId] = fetchSource(source, fetchRange, isRefetch, context);
|
|
571
|
+
}
|
|
572
|
+
else {
|
|
573
|
+
nextSources[sourceId] = source;
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
return nextSources;
|
|
577
|
+
}
|
|
578
|
+
function fetchSource(eventSource, fetchRange, isRefetch, context) {
|
|
579
|
+
let { options, calendarApi } = context;
|
|
580
|
+
let sourceDef = context.pluginHooks.eventSourceDefs[eventSource.sourceDefId];
|
|
581
|
+
let fetchId = internalCommon.guid();
|
|
582
|
+
sourceDef.fetch({
|
|
583
|
+
eventSource,
|
|
584
|
+
range: fetchRange,
|
|
585
|
+
isRefetch,
|
|
586
|
+
context,
|
|
587
|
+
}, (res) => {
|
|
588
|
+
let { rawEvents } = res;
|
|
589
|
+
if (options.eventSourceSuccess) {
|
|
590
|
+
rawEvents = options.eventSourceSuccess.call(calendarApi, rawEvents, res.response) || rawEvents;
|
|
591
|
+
}
|
|
592
|
+
if (eventSource.success) {
|
|
593
|
+
rawEvents = eventSource.success.call(calendarApi, rawEvents, res.response) || rawEvents;
|
|
594
|
+
}
|
|
595
|
+
context.dispatch({
|
|
596
|
+
type: 'RECEIVE_EVENTS',
|
|
597
|
+
sourceId: eventSource.sourceId,
|
|
598
|
+
fetchId,
|
|
599
|
+
fetchRange,
|
|
600
|
+
rawEvents,
|
|
601
|
+
});
|
|
602
|
+
}, (error) => {
|
|
603
|
+
let errorHandled = false;
|
|
604
|
+
if (options.eventSourceFailure) {
|
|
605
|
+
options.eventSourceFailure.call(calendarApi, error);
|
|
606
|
+
errorHandled = true;
|
|
607
|
+
}
|
|
608
|
+
if (eventSource.failure) {
|
|
609
|
+
eventSource.failure(error);
|
|
610
|
+
errorHandled = true;
|
|
611
|
+
}
|
|
612
|
+
if (!errorHandled) {
|
|
613
|
+
console.warn(error.message, error);
|
|
614
|
+
}
|
|
615
|
+
context.dispatch({
|
|
616
|
+
type: 'RECEIVE_EVENT_ERROR',
|
|
617
|
+
sourceId: eventSource.sourceId,
|
|
618
|
+
fetchId,
|
|
619
|
+
fetchRange,
|
|
620
|
+
error,
|
|
621
|
+
});
|
|
622
|
+
});
|
|
623
|
+
return Object.assign(Object.assign({}, eventSource), { isFetching: true, latestFetchId: fetchId });
|
|
624
|
+
}
|
|
625
|
+
function receiveResponse(sourceHash, sourceId, fetchId, fetchRange) {
|
|
626
|
+
let eventSource = sourceHash[sourceId];
|
|
627
|
+
if (eventSource && // not already removed
|
|
628
|
+
fetchId === eventSource.latestFetchId) {
|
|
629
|
+
return Object.assign(Object.assign({}, sourceHash), { [sourceId]: Object.assign(Object.assign({}, eventSource), { isFetching: false, fetchRange }) });
|
|
630
|
+
}
|
|
631
|
+
return sourceHash;
|
|
632
|
+
}
|
|
633
|
+
function excludeStaticSources(eventSources, context) {
|
|
634
|
+
return internalCommon.filterHash(eventSources, (eventSource) => doesSourceNeedRange(eventSource, context));
|
|
635
|
+
}
|
|
636
|
+
function parseInitialSources(rawOptions, context) {
|
|
637
|
+
let refiners = internalCommon.buildEventSourceRefiners(context);
|
|
638
|
+
let rawSources = [].concat(rawOptions.eventSources || []);
|
|
639
|
+
let sources = []; // parsed
|
|
640
|
+
if (rawOptions.initialEvents) {
|
|
641
|
+
rawSources.unshift(rawOptions.initialEvents);
|
|
642
|
+
}
|
|
643
|
+
if (rawOptions.events) {
|
|
644
|
+
rawSources.unshift(rawOptions.events);
|
|
645
|
+
}
|
|
646
|
+
for (let rawSource of rawSources) {
|
|
647
|
+
let source = internalCommon.parseEventSource(rawSource, context, refiners);
|
|
648
|
+
if (source) {
|
|
649
|
+
sources.push(source);
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
return sources;
|
|
653
|
+
}
|
|
654
|
+
function doesSourceNeedRange(eventSource, context) {
|
|
655
|
+
let defs = context.pluginHooks.eventSourceDefs;
|
|
656
|
+
return !defs[eventSource.sourceDefId].ignoreRange;
|
|
657
|
+
}
|
|
658
|
+
|
|
334
659
|
function reduceDateSelection(currentSelection, action) {
|
|
335
660
|
switch (action.type) {
|
|
336
661
|
case 'UNSELECT_DATES':
|
|
@@ -516,6 +841,257 @@ class ViewImpl {
|
|
|
516
841
|
}
|
|
517
842
|
}
|
|
518
843
|
|
|
844
|
+
let eventSourceDef$2 = {
|
|
845
|
+
ignoreRange: true,
|
|
846
|
+
parseMeta(refined) {
|
|
847
|
+
if (Array.isArray(refined.events)) {
|
|
848
|
+
return refined.events;
|
|
849
|
+
}
|
|
850
|
+
return null;
|
|
851
|
+
},
|
|
852
|
+
fetch(arg, successCallback) {
|
|
853
|
+
successCallback({
|
|
854
|
+
rawEvents: arg.eventSource.meta,
|
|
855
|
+
});
|
|
856
|
+
},
|
|
857
|
+
};
|
|
858
|
+
const arrayEventSourcePlugin = createPlugin({
|
|
859
|
+
name: 'array-event-source',
|
|
860
|
+
eventSourceDefs: [eventSourceDef$2],
|
|
861
|
+
});
|
|
862
|
+
|
|
863
|
+
let eventSourceDef$1 = {
|
|
864
|
+
parseMeta(refined) {
|
|
865
|
+
if (typeof refined.events === 'function') {
|
|
866
|
+
return refined.events;
|
|
867
|
+
}
|
|
868
|
+
return null;
|
|
869
|
+
},
|
|
870
|
+
fetch(arg, successCallback, errorCallback) {
|
|
871
|
+
const { dateEnv } = arg.context;
|
|
872
|
+
const func = arg.eventSource.meta;
|
|
873
|
+
internalCommon.unpromisify(func.bind(null, internalCommon.buildRangeApiWithTimeZone(arg.range, dateEnv)), (rawEvents) => successCallback({ rawEvents }), errorCallback);
|
|
874
|
+
},
|
|
875
|
+
};
|
|
876
|
+
const funcEventSourcePlugin = createPlugin({
|
|
877
|
+
name: 'func-event-source',
|
|
878
|
+
eventSourceDefs: [eventSourceDef$1],
|
|
879
|
+
});
|
|
880
|
+
|
|
881
|
+
const JSON_FEED_EVENT_SOURCE_REFINERS = {
|
|
882
|
+
method: String,
|
|
883
|
+
extraParams: internalCommon.identity,
|
|
884
|
+
startParam: String,
|
|
885
|
+
endParam: String,
|
|
886
|
+
timeZoneParam: String,
|
|
887
|
+
};
|
|
888
|
+
|
|
889
|
+
let eventSourceDef = {
|
|
890
|
+
parseMeta(refined) {
|
|
891
|
+
if (refined.url && (refined.format === 'json' || !refined.format)) {
|
|
892
|
+
return {
|
|
893
|
+
url: refined.url,
|
|
894
|
+
format: 'json',
|
|
895
|
+
method: (refined.method || 'GET').toUpperCase(),
|
|
896
|
+
extraParams: refined.extraParams,
|
|
897
|
+
startParam: refined.startParam,
|
|
898
|
+
endParam: refined.endParam,
|
|
899
|
+
timeZoneParam: refined.timeZoneParam,
|
|
900
|
+
};
|
|
901
|
+
}
|
|
902
|
+
return null;
|
|
903
|
+
},
|
|
904
|
+
fetch(arg, successCallback, errorCallback) {
|
|
905
|
+
const { meta } = arg.eventSource;
|
|
906
|
+
const requestParams = buildRequestParams(meta, arg.range, arg.context);
|
|
907
|
+
internalCommon.requestJson(meta.method, meta.url, requestParams).then(([rawEvents, response]) => {
|
|
908
|
+
successCallback({ rawEvents, response });
|
|
909
|
+
}, errorCallback);
|
|
910
|
+
},
|
|
911
|
+
};
|
|
912
|
+
const jsonFeedEventSourcePlugin = createPlugin({
|
|
913
|
+
name: 'json-event-source',
|
|
914
|
+
eventSourceRefiners: JSON_FEED_EVENT_SOURCE_REFINERS,
|
|
915
|
+
eventSourceDefs: [eventSourceDef],
|
|
916
|
+
});
|
|
917
|
+
function buildRequestParams(meta, range, context) {
|
|
918
|
+
let { dateEnv, options } = context;
|
|
919
|
+
let startParam;
|
|
920
|
+
let endParam;
|
|
921
|
+
let timeZoneParam;
|
|
922
|
+
let customRequestParams;
|
|
923
|
+
let params = {};
|
|
924
|
+
startParam = meta.startParam;
|
|
925
|
+
if (startParam == null) {
|
|
926
|
+
startParam = options.startParam;
|
|
927
|
+
}
|
|
928
|
+
endParam = meta.endParam;
|
|
929
|
+
if (endParam == null) {
|
|
930
|
+
endParam = options.endParam;
|
|
931
|
+
}
|
|
932
|
+
timeZoneParam = meta.timeZoneParam;
|
|
933
|
+
if (timeZoneParam == null) {
|
|
934
|
+
timeZoneParam = options.timeZoneParam;
|
|
935
|
+
}
|
|
936
|
+
// retrieve any outbound GET/POST data from the options
|
|
937
|
+
if (typeof meta.extraParams === 'function') {
|
|
938
|
+
// supplied as a function that returns a key/value object
|
|
939
|
+
customRequestParams = meta.extraParams();
|
|
940
|
+
}
|
|
941
|
+
else {
|
|
942
|
+
// probably supplied as a straight key/value object
|
|
943
|
+
customRequestParams = meta.extraParams || {};
|
|
944
|
+
}
|
|
945
|
+
Object.assign(params, customRequestParams);
|
|
946
|
+
params[startParam] = dateEnv.formatIso(range.start);
|
|
947
|
+
params[endParam] = dateEnv.formatIso(range.end);
|
|
948
|
+
if (dateEnv.timeZone !== 'local') {
|
|
949
|
+
params[timeZoneParam] = dateEnv.timeZone;
|
|
950
|
+
}
|
|
951
|
+
return params;
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
const SIMPLE_RECURRING_REFINERS = {
|
|
955
|
+
daysOfWeek: internalCommon.identity,
|
|
956
|
+
startTime: internalCommon.createDuration,
|
|
957
|
+
endTime: internalCommon.createDuration,
|
|
958
|
+
duration: internalCommon.createDuration,
|
|
959
|
+
startRecur: internalCommon.identity,
|
|
960
|
+
endRecur: internalCommon.identity,
|
|
961
|
+
};
|
|
962
|
+
|
|
963
|
+
let recurring = {
|
|
964
|
+
parse(refined, dateEnv) {
|
|
965
|
+
if (refined.daysOfWeek || refined.startTime || refined.endTime || refined.startRecur || refined.endRecur) {
|
|
966
|
+
let recurringData = {
|
|
967
|
+
daysOfWeek: refined.daysOfWeek || null,
|
|
968
|
+
startTime: refined.startTime || null,
|
|
969
|
+
endTime: refined.endTime || null,
|
|
970
|
+
startRecur: refined.startRecur ? dateEnv.createMarker(refined.startRecur) : null,
|
|
971
|
+
endRecur: refined.endRecur ? dateEnv.createMarker(refined.endRecur) : null,
|
|
972
|
+
};
|
|
973
|
+
let duration;
|
|
974
|
+
if (refined.duration) {
|
|
975
|
+
duration = refined.duration;
|
|
976
|
+
}
|
|
977
|
+
if (!duration && refined.startTime && refined.endTime) {
|
|
978
|
+
duration = internalCommon.subtractDurations(refined.endTime, refined.startTime);
|
|
979
|
+
}
|
|
980
|
+
return {
|
|
981
|
+
allDayGuess: Boolean(!refined.startTime && !refined.endTime),
|
|
982
|
+
duration,
|
|
983
|
+
typeData: recurringData, // doesn't need endTime anymore but oh well
|
|
984
|
+
};
|
|
985
|
+
}
|
|
986
|
+
return null;
|
|
987
|
+
},
|
|
988
|
+
expand(typeData, framingRange, dateEnv) {
|
|
989
|
+
let clippedFramingRange = internalCommon.intersectRanges(framingRange, { start: typeData.startRecur, end: typeData.endRecur });
|
|
990
|
+
if (clippedFramingRange) {
|
|
991
|
+
return expandRanges(typeData.daysOfWeek, typeData.startTime, clippedFramingRange, dateEnv);
|
|
992
|
+
}
|
|
993
|
+
return [];
|
|
994
|
+
},
|
|
995
|
+
};
|
|
996
|
+
const simpleRecurringEventsPlugin = createPlugin({
|
|
997
|
+
name: 'simple-recurring-event',
|
|
998
|
+
recurringTypes: [recurring],
|
|
999
|
+
eventRefiners: SIMPLE_RECURRING_REFINERS,
|
|
1000
|
+
});
|
|
1001
|
+
function expandRanges(daysOfWeek, startTime, framingRange, dateEnv) {
|
|
1002
|
+
let dowHash = daysOfWeek ? internalCommon.arrayToHash(daysOfWeek) : null;
|
|
1003
|
+
let dayMarker = internalCommon.startOfDay(framingRange.start);
|
|
1004
|
+
let endMarker = framingRange.end;
|
|
1005
|
+
let instanceStarts = [];
|
|
1006
|
+
while (dayMarker < endMarker) {
|
|
1007
|
+
let instanceStart;
|
|
1008
|
+
// if everyday, or this particular day-of-week
|
|
1009
|
+
if (!dowHash || dowHash[dayMarker.getUTCDay()]) {
|
|
1010
|
+
if (startTime) {
|
|
1011
|
+
instanceStart = dateEnv.add(dayMarker, startTime);
|
|
1012
|
+
}
|
|
1013
|
+
else {
|
|
1014
|
+
instanceStart = dayMarker;
|
|
1015
|
+
}
|
|
1016
|
+
instanceStarts.push(instanceStart);
|
|
1017
|
+
}
|
|
1018
|
+
dayMarker = internalCommon.addDays(dayMarker, 1);
|
|
1019
|
+
}
|
|
1020
|
+
return instanceStarts;
|
|
1021
|
+
}
|
|
1022
|
+
|
|
1023
|
+
const changeHandlerPlugin = createPlugin({
|
|
1024
|
+
name: 'change-handler',
|
|
1025
|
+
optionChangeHandlers: {
|
|
1026
|
+
events(events, context) {
|
|
1027
|
+
handleEventSources([events], context);
|
|
1028
|
+
},
|
|
1029
|
+
eventSources: handleEventSources,
|
|
1030
|
+
},
|
|
1031
|
+
});
|
|
1032
|
+
/*
|
|
1033
|
+
BUG: if `event` was supplied, all previously-given `eventSources` will be wiped out
|
|
1034
|
+
*/
|
|
1035
|
+
function handleEventSources(inputs, context) {
|
|
1036
|
+
let unfoundSources = internalCommon.hashValuesToArray(context.getCurrentData().eventSources);
|
|
1037
|
+
let newInputs = [];
|
|
1038
|
+
for (let input of inputs) {
|
|
1039
|
+
let inputFound = false;
|
|
1040
|
+
for (let i = 0; i < unfoundSources.length; i += 1) {
|
|
1041
|
+
if (unfoundSources[i]._raw === input) {
|
|
1042
|
+
unfoundSources.splice(i, 1); // delete
|
|
1043
|
+
inputFound = true;
|
|
1044
|
+
break;
|
|
1045
|
+
}
|
|
1046
|
+
}
|
|
1047
|
+
if (!inputFound) {
|
|
1048
|
+
newInputs.push(input);
|
|
1049
|
+
}
|
|
1050
|
+
}
|
|
1051
|
+
for (let unfoundSource of unfoundSources) {
|
|
1052
|
+
context.dispatch({
|
|
1053
|
+
type: 'REMOVE_EVENT_SOURCE',
|
|
1054
|
+
sourceId: unfoundSource.sourceId,
|
|
1055
|
+
});
|
|
1056
|
+
}
|
|
1057
|
+
for (let newInput of newInputs) {
|
|
1058
|
+
context.calendarApi.addEventSource(newInput);
|
|
1059
|
+
}
|
|
1060
|
+
}
|
|
1061
|
+
|
|
1062
|
+
function handleDateProfile(dateProfile, context) {
|
|
1063
|
+
context.emitter.trigger('datesSet', Object.assign(Object.assign({}, internalCommon.buildRangeApiWithTimeZone(dateProfile.activeRange, context.dateEnv)), { view: context.viewApi }));
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1066
|
+
function handleEventStore(eventStore, context) {
|
|
1067
|
+
let { emitter } = context;
|
|
1068
|
+
if (emitter.hasHandlers('eventsSet')) {
|
|
1069
|
+
emitter.trigger('eventsSet', internalCommon.buildEventApis(eventStore, context));
|
|
1070
|
+
}
|
|
1071
|
+
}
|
|
1072
|
+
|
|
1073
|
+
/*
|
|
1074
|
+
this array is exposed on the root namespace so that UMD plugins can add to it.
|
|
1075
|
+
see the rollup-bundles script.
|
|
1076
|
+
*/
|
|
1077
|
+
const globalPlugins = [
|
|
1078
|
+
arrayEventSourcePlugin,
|
|
1079
|
+
funcEventSourcePlugin,
|
|
1080
|
+
jsonFeedEventSourcePlugin,
|
|
1081
|
+
simpleRecurringEventsPlugin,
|
|
1082
|
+
changeHandlerPlugin,
|
|
1083
|
+
createPlugin({
|
|
1084
|
+
name: 'misc',
|
|
1085
|
+
isLoadingFuncs: [
|
|
1086
|
+
(state) => computeEventSourcesLoading(state.eventSources),
|
|
1087
|
+
],
|
|
1088
|
+
propSetHandlers: {
|
|
1089
|
+
dateProfile: handleDateProfile,
|
|
1090
|
+
eventStore: handleEventStore,
|
|
1091
|
+
},
|
|
1092
|
+
}),
|
|
1093
|
+
];
|
|
1094
|
+
|
|
519
1095
|
class TaskRunner {
|
|
520
1096
|
constructor(runTaskOption, drainedOption) {
|
|
521
1097
|
this.runTaskOption = runTaskOption;
|
|
@@ -599,7 +1175,7 @@ class CalendarDataManager {
|
|
|
599
1175
|
this.computeCurrentViewData = internalCommon.memoize(this._computeCurrentViewData);
|
|
600
1176
|
this.organizeRawLocales = internalCommon.memoize(organizeRawLocales);
|
|
601
1177
|
this.buildLocale = internalCommon.memoize(buildLocale);
|
|
602
|
-
this.buildPluginHooks =
|
|
1178
|
+
this.buildPluginHooks = buildBuildPluginHooks();
|
|
603
1179
|
this.buildDateEnv = internalCommon.memoize(buildDateEnv$1);
|
|
604
1180
|
this.buildTheme = internalCommon.memoize(buildTheme);
|
|
605
1181
|
this.parseToolbars = internalCommon.memoize(parseToolbars);
|
|
@@ -652,7 +1228,7 @@ class CalendarDataManager {
|
|
|
652
1228
|
callback(calendarContext);
|
|
653
1229
|
}
|
|
654
1230
|
// NOT DRY
|
|
655
|
-
let eventSources =
|
|
1231
|
+
let eventSources = initEventSources(optionsData.calendarOptions, dateProfile, calendarContext);
|
|
656
1232
|
let initialState = {
|
|
657
1233
|
dynamicOptionOverrides,
|
|
658
1234
|
currentViewType,
|
|
@@ -719,9 +1295,9 @@ class CalendarDataManager {
|
|
|
719
1295
|
!internalCommon.rangeContainsMarker(dateProfile.currentRange, currentDate)) {
|
|
720
1296
|
currentDate = dateProfile.currentRange.start;
|
|
721
1297
|
}
|
|
722
|
-
let eventSources =
|
|
1298
|
+
let eventSources = reduceEventSources(state.eventSources, action, dateProfile, calendarContext);
|
|
723
1299
|
let eventStore = internalCommon.reduceEventStore(state.eventStore, action, eventSources, dateProfile, calendarContext);
|
|
724
|
-
let isEventsLoading =
|
|
1300
|
+
let isEventsLoading = computeEventSourcesLoading(eventSources); // BAD. also called in this func in computeIsLoading
|
|
725
1301
|
let renderableEventStore = (isEventsLoading && !currentViewData.options.progressiveEventRendering) ?
|
|
726
1302
|
(state.renderableEventStore || eventStore) : // try from previous state
|
|
727
1303
|
eventStore;
|
|
@@ -774,7 +1350,7 @@ class CalendarDataManager {
|
|
|
774
1350
|
if (oldCalendarOptions && oldCalendarOptions !== newCalendarOptions) {
|
|
775
1351
|
if (oldCalendarOptions.timeZone !== newCalendarOptions.timeZone) {
|
|
776
1352
|
// hack
|
|
777
|
-
state.eventSources = data.eventSources =
|
|
1353
|
+
state.eventSources = data.eventSources = reduceEventSourcesNewTimeZone(data.eventSources, state.dateProfile, data);
|
|
778
1354
|
state.eventStore = data.eventStore = internalCommon.rezoneEventStoreDates(data.eventStore, oldData.dateEnv, data.dateEnv);
|
|
779
1355
|
}
|
|
780
1356
|
for (let optionName in changeHandlers) {
|
|
@@ -816,7 +1392,7 @@ class CalendarDataManager {
|
|
|
816
1392
|
let availableLocaleData = this.organizeRawLocales(locales);
|
|
817
1393
|
let availableRawLocales = availableLocaleData.map;
|
|
818
1394
|
let localeDefaults = this.buildLocale(locale || availableLocaleData.defaultCode, availableRawLocales).options;
|
|
819
|
-
let pluginHooks = this.buildPluginHooks(optionOverrides.plugins || [],
|
|
1395
|
+
let pluginHooks = this.buildPluginHooks(optionOverrides.plugins || [], globalPlugins);
|
|
820
1396
|
let refiners = this.currentCalendarOptionsRefiners = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, internalCommon.BASE_OPTION_REFINERS), internalCommon.CALENDAR_LISTENER_REFINERS), internalCommon.CALENDAR_OPTION_REFINERS), pluginHooks.listenerRefiners), pluginHooks.optionRefiners);
|
|
821
1397
|
let extra = {};
|
|
822
1398
|
let raw = internalCommon.mergeRawOptions([
|
|
@@ -1534,12 +2110,14 @@ function sliceEvents(props, allDay) {
|
|
|
1534
2110
|
return internalCommon.sliceEventStore(props.eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? props.nextDayThreshold : null).fg;
|
|
1535
2111
|
}
|
|
1536
2112
|
|
|
1537
|
-
const version = '6.0.
|
|
2113
|
+
const version = '6.0.1';
|
|
1538
2114
|
|
|
1539
2115
|
exports.JsonRequestError = internalCommon.JsonRequestError;
|
|
1540
|
-
exports.createPlugin = internalCommon.createPlugin;
|
|
1541
2116
|
exports.Calendar = Calendar;
|
|
2117
|
+
exports.createPlugin = createPlugin;
|
|
1542
2118
|
exports.formatDate = formatDate;
|
|
1543
2119
|
exports.formatRange = formatRange;
|
|
2120
|
+
exports.globalLocales = globalLocales;
|
|
2121
|
+
exports.globalPlugins = globalPlugins;
|
|
1544
2122
|
exports.sliceEvents = sliceEvents;
|
|
1545
2123
|
exports.version = version;
|