{"version":3,"sources":["webpack:///./node_modules/fullcalendar/dist/fullcalendar.js","webpack:///./src/views/calendar/doctor/index.vue?b25b","webpack:///src/views/calendar/doctor/index.vue","webpack:///./src/views/calendar/doctor/index.vue?3109","webpack:///./src/views/calendar/doctor/index.vue"],"names":["root","factory","module","exports","self","__WEBPACK_EXTERNAL_MODULE_0__","__WEBPACK_EXTERNAL_MODULE_3__","modules","installedModules","__webpack_require__","moduleId","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","extendStatics","setPrototypeOf","__proto__","Array","b","__extends","__","this","constructor","create","value","moment","$","compensateScroll","rowEls","scrollbarWidths","left","css","right","uncompensateScroll","disableCursor","addClass","enableCursor","removeClass","distributeHeight","els","availableHeight","shouldRedistribute","minOffset1","Math","floor","length","minOffset2","flexEls","flexOffsets","flexHeights","usedHeight","undistributeHeight","each","el","minOffset","naturalOffset","outerHeight","push","height","naturalHeight","newHeight","matchCellWidths","maxInnerWidth","find","innerEl","innerWidth","outerWidth","width","subtractInnerElHeight","outerEl","diff","both","add","position","getScrollParent","scrollParent","parents","filter","parent","test","eq","ownerDocument","document","getOuterRect","origin","offset","top","bottom","getClientRect","getScrollbarWidths","getCssFloat","clientWidth","clientHeight","getContentRect","widths","leftRightWidth","offsetWidth","bottomWidth","offsetHeight","sanitizeScrollbarWidth","getIsLeftRtlScrollbars","max","round","_isLeftRtlScrollbars","computeIsLeftRtlScrollbars","border","padding","overflow","direction","appendTo","children","res","remove","prop","parseFloat","isPrimaryMouseButton","ev","which","ctrlKey","getEvX","touches","originalEvent","pageX","getEvY","pageY","getEvIsTouch","type","preventSelection","on","preventDefault","allowSelection","off","intersectRects","rect1","rect2","min","constrainPoint","point","rect","getRectCenter","diffPoints","point1","point2","parseFieldSpecs","input","token","specs","tokens","split","isArray","charAt","field","substring","order","func","compareByFieldSpecs","obj1","obj2","fieldSpecs","obj1fallback","obj2fallback","cmp","compareByFieldSpec","fieldSpec","val1","val2","flexibleCompare","a","String","localeCompare","diffDayTime","duration","days","clone","stripTime","ms","time","diffDay","diffByUnit","unit","computeGreatestUnit","start","end","val","unitsDesc","computeRangeAs","isInt","computeDurationGreatestUnit","durationInput","isDuration","as","divideRangeByDuration","dur","months","durationHasTime","asMonths","abs","asDays","divideDurationByDuration","dur1","dur2","months1","months2","multiplyDuration","Boolean","hours","minutes","seconds","milliseconds","isNativeDate","toString","Date","isTimeString","str","log","args","_i","arguments","console","window","apply","warn","dayIDs","hasOwnPropMethod","mergeProps","propObjs","complexProps","complexObjs","j","props","dest","unshift","undefined","copyOwnProps","src","name_1","hasOwnProp","obj","applyAll","functions","thisObj","isFunction","ret","removeMatching","array","testFunc","removeCnt","splice","removeExact","exactVal","isArraysEqual","a0","a1","len","firstDefined","htmlEscape","replace","stripHtmlEntities","text","cssToStr","cssProps","statements","join","attrsToStr","attrs","parts","capitaliseFirstLetter","toUpperCase","slice","compareNumbers","proxy","methodName","method","debounce","wait","immediate","timeout","context","timestamp","result","later","last","setTimeout","callNow","moment_ext_1","UnzonedRange","startInput","endInput","isStart","isEnd","isMoment","stripZone","startMs","valueOf","endMs","invertRanges","ranges","constraintRange","dateRange","invertedRanges","sort","compareUnzonedRanges","intersect","otherRange","newRange","intersectsWith","containsRange","innerRange","containsDate","date","constrainDate","equals","range","getStart","default","utc","getEnd","range1","range2","tslib_1","ParsableModelMixin_1","Class_1","EventDefParser_1","EventSource","_super","calendar","_this","className","uid","uuid","parse","rawInput","source","applyProps","normalizeId","id","fetch","timezone","removeEventDefsById","eventDefId","removeAllEventDefs","getPrimitive","otherSource","parseEventDefs","rawEventDefs","eventDef","eventDefs","parseEventDef","calendarTransform","opt","sourceTransform","eventDataTransform","applyManualStandardProps","rawProps","defineStandardProps","copyVerbatimStandardProps","mixInto","color","backgroundColor","borderColor","textColor","editable","startEditable","durationEditable","rendering","overlap","constraint","allDayDefault","Mixin_1","guid","ListenerMixin","listenTo","other","arg","callback","eventName","getListenerNamespace","stopListeningTo","listenerId","EventDef_1","EventInstance_1","EventDateProfile_1","SingleEventDef","buildInstances","buildInstance","dateProfile","isAllDay","def","rezone","superSuccess","miscProps","allDay","util_1","ambigDateOfMonthRegex","ambigTimeOrZoneRegex","newMomentProto","fn","oldMomentProto","extend","momentProperties","oldMomentFormat","mom","formatStr","format","momentExt","makeMoment","parseAsUTC","parseZone","isAmbigTime","isAmbigZone","ambigMatch","isSingleString","exec","_ambigTime","_ambigZone","utcOffset","_fullCalendar","hasTime","week","weeks","weekCalc","_locale","_fullCalendar_weekCalc","isoWeek","dayHours","set","wasAmbigTime","hasZone","local","keepLocalTime","tzo","ComponentFootprint","unzonedRange","toLegacy","msToMoment","EmitterMixin","types","handler","_prepareIntercept","one","intercept","extra","trigger","triggerHandler","triggerWith","hasHandlers","hash","_data","Interaction","component","view","_getView","Mixin","destClass","getOwnPropertyNames","forEach","mixOver","UnzonedRange_1","EventDateProfile","buildUnzonedRange","forcedAllDay","forceEventDuration","isValid","isAfter","getDefaultEventEnd","isStandardProp","propName","DragListener_1","HitDragListener","options","handleInteractionStart","subjectRect","origPoint","subjectEl","hitsNeeded","computeScrollBounds","origHit","queryHit","subjectCenter","coordAdjust","handleDragStart","hit","handleHitOver","handleDrag","dx","dy","isHitsEqual","handleHitOut","handleDragEnd","handleHitDone","isOrig","handleInteractionEnd","isCancelled","hitsNotNeeded","handleScrollEnd","isDragging","releaseHits","prepareHits","hit0","hit1","isHitPropsWithin","subHit","superHit","version","internalApiVersion","date_formatting_1","formatDate","formatRange","queryMostGranularFormatUnit","locale_1","datepickerLocale","locale","getMomentLocaleData","populateInstanceComputableOptions","util_2","eventDefsToEventInstances","eventFootprintToComponentFootprint","eventInstanceToEventRange","eventInstanceToUnzonedRange","eventRangeToEventFootprint","EmitterMixin_1","ListenerMixin_1","Model_1","Model","Constraints_1","Constraints","DateProfileGenerator_1","DateProfileGenerator","ComponentFootprint_1","BusinessHourGenerator_1","BusinessHourGenerator","EventPeriod_1","EventPeriod","EventManager_1","EventManager","EventDef","EventDefMutation_1","EventDefMutation","EventDefParser","EventInstance","EventRange_1","EventRange","RecurringEventDef_1","RecurringEventDef","SingleEventDef_1","EventDefDateMutation_1","EventDefDateMutation","EventSourceParser_1","EventSourceParser","EventSource_1","ThemeRegistry_1","defineThemeSystem","getThemeSystemClass","EventInstanceGroup_1","EventInstanceGroup","ArrayEventSource_1","ArrayEventSource","FuncEventSource_1","FuncEventSource","JsonFeedEventSource_1","JsonFeedEventSource","EventFootprint_1","EventFootprint","Class","CoordCache_1","CoordCache","Iterator_1","Iterator","DragListener","HitDragListener_1","MouseFollower_1","MouseFollower","ParsableModelMixin","Popover_1","Popover","Promise_1","Promise","TaskQueue_1","TaskQueue","RenderQueue_1","RenderQueue","Scroller_1","Scroller","Theme_1","Theme","Component_1","Component","DateComponent_1","DateComponent","InteractiveDateComponent_1","InteractiveDateComponent","Calendar_1","Calendar","View_1","View","ViewRegistry_1","defineView","getViewConfig","DayTableMixin_1","DayTableMixin","BusinessHourRenderer_1","BusinessHourRenderer","EventRenderer_1","EventRenderer","FillRenderer_1","FillRenderer","HelperRenderer_1","HelperRenderer","ExternalDropping_1","ExternalDropping","EventResizing_1","EventResizing","EventPointing_1","EventPointing","EventDragging_1","EventDragging","DateSelecting_1","DateSelecting","DateClicking_1","DateClicking","Interaction_1","StandardInteractionsMixin_1","StandardInteractionsMixin","AgendaView_1","AgendaView","TimeGrid_1","TimeGrid","TimeGridEventRenderer_1","TimeGridEventRenderer","TimeGridFillRenderer_1","TimeGridFillRenderer","TimeGridHelperRenderer_1","TimeGridHelperRenderer","DayGrid_1","DayGrid","DayGridEventRenderer_1","DayGridEventRenderer","DayGridFillRenderer_1","DayGridFillRenderer","DayGridHelperRenderer_1","DayGridHelperRenderer","BasicView_1","BasicView","BasicViewDateProfileGenerator_1","BasicViewDateProfileGenerator","MonthView_1","MonthView","MonthViewDateProfileGenerator_1","MonthViewDateProfileGenerator","ListView_1","ListView","ListEventPointing_1","ListEventPointing","ListEventRenderer_1","ListEventRenderer","eventInstances","eventInstance","eventRange","eventFootprint","componentFootprint","getAllEventRanges","sliceNormalRenderRanges","map","sliceRenderRanges","isInverse","sliceInverseRenderRanges","slicedRange","slicedEventRanges","unzonedRanges","ownerDef","getEventDef","hasInverseRendering","explicitEventDef","PromiseStub","construct","executor","deferred","Deferred","promise","resolve","attachImmediatelyResolvingThen","reject","attachImmediatelyRejectingThen","then","onResolve","onReject","optionsManager","processIconOverride","iconOverrideOption","setIconOverride","iconOverrideHash","iconClassesCopy","buttonName","isPlainObject","iconClasses","applyIconOverridePrefix","prefix","iconOverridePrefix","indexOf","getClass","key","classes","getIconClass","baseIconClass","getCustomButtonIconClass","customButtonProps","iconOverrideCustomButtonOption","exportHooks","touchMouseIgnoreWait","globalEmitter","neededCount","GlobalEmitter","isTouching","mouseIgnoreDepth","bind","needed","unneeded","unbind","touchstart","handleTouchStart","touchcancel","handleTouchCancel","touchend","handleTouchEnd","mousedown","handleMouseDown","mousemove","handleMouseMove","mouseup","handleMouseUp","click","handleClick","selectstart","handleSelectStart","contextmenu","handleContextMenu","addEventListener","handleTouchMoveProxy","handleTouchMove","Event","passive","handleScrollProxy","handleScroll","removeEventListener","stopTouch","shouldIgnoreMouse","skipMouseIgnore","startTouchMouseIgnore","viewName","viewConfig","viewHash","views","options_1","localeOptionHash","locales","dpComputableOptions","buttonText","dpOptions","prev","prevText","next","nextText","today","currentText","monthYearFormat","showMonthAfterYear","yearSuffix","momComputableOptions","dayOfMonthFormat","momOptions","fcOptions","longDateFormat","isRTL","mediumTimeFormat","smallTimeFormat","extraSmallTimeFormat","hourFormat","noMeridiemTimeFormat","instanceComputableOptions","smallDayDateFormat","weekFormat","weekNumberTitle","smallWeekFormat","localeCode","dpLocaleCode","weekHeader","jqDatePicker","datepicker","regional","en","setDefaults","newFcOptions","mergeOptions","globalDefaults","localeData","englishDefaults","titleRangeSeparator","defaultTimedEventDuration","defaultAllDayEventDuration","nextDayThreshold","columnHeader","defaultView","aspectRatio","header","center","weekends","weekNumbers","weekNumberCalculation","scrollTime","minTime","maxTime","showNonCurrentDates","lazyFetching","startParam","endParam","timezoneParam","prevYear","nextYear","year","month","day","allDayText","agendaEventMinHeight","theme","dragOpacity","dragRevertDuration","dragScroll","unselectAuto","dropAccept","eventOrder","eventLimit","eventLimitText","eventLimitClick","dayPopoverFormat","handleWindowResize","windowResizeDelay","longPressDelay","rtlDefaults","buttonIcons","themeButtonIcons","complexOptions","optionObjs","getEventLegacy","members","SubClass","mixin","eventInput","generateId","copy","rawId","getRendering","hasBgRendering","getConstraint","getOverlap","isStartExplicitlyEditable","isDurationExplicitlyEditable","isExplicitlyEditable","_id","applyMiscProps","title","url","sourceClasses","registerClass","EventSourceClass","eventSource","createFromRawProps","largeUnit","dateMutation","defMutation","dateProps","standardProps","verbatimStandardProps","createFromDiff","mutateSingle","origDateProfile","buildNewDateProfile","setDateMutation","isEmpty","clearEnd","forceTimed","forceAllDay","dateProfile0","dateProfile1","dateDelta","endDiff","endDelta","mutation","subtractDates","date1","date0","subtract","setDateDelta","setEndDelta","eventDateProfile","shouldRezone","startDelta","applyTimezone","setStartDelta","overflowX","overflowY","render","renderEl","applyOverflow","scrollEl","clear","setHeight","destroy","lockOverflow","scrollWidth","scrollHeight","getScrollTop","scrollTop","setScrollTop","getClientWidth","getClientHeight","GlobalEmitter_1","_view","_options","segSelector","dateSelectingClass","dateClicking","dateClickingClass","dateSelecting","eventPointingClass","eventPointing","eventDraggingClass","eventDragging","eventResizingClass","eventResizing","externalDroppingClass","externalDropping","setElement","bindToEl","bindAllSegHandlersToEl","removeElement","endInteractions","executeEventUnrender","bindGlobalHandlers","bindToDocument","unbindGlobalHandlers","unbindFromDocument","bindDateHandlerToEl","target","is","eventInteraction","bindSegHandlerToEl","segEl","currentTarget","seg","data","shouldIgnoreEventPointing","shouldIgnoreTouch","isSelected","selectedEvent","isResizing","canStartSelection","canStartResize","isEventDefDraggable","footprint","isEventDefResizable","canStartDrag","isEventDefSelected","interaction","isEventDefStartEditable","isEditable","isEventDefGenerallyEditable","isEventDefResizableFromStart","isEventDefResizableFromEnd","isResizable","diffDates","isEventInstanceGroupAllowed","eventInstanceGroup","eventFootprints","eventRangesToEventFootprints","validUnzonedRange","constraints","isExternalInstanceGroupAllowed","isSelectionFootprintAllowed","viewSpec","batchRenderDepth","initRenderQueue","initHiddenDays","dateProfileGenerator","dateProfileGeneratorClass","bindBaseRenderHandlers","eventOrderSpecs","renderQueue","event","onRenderQueueStart","onRenderQueueStop","startBatchRender","stopBatchRender","freezeContentHeight","addScroll","queryScroll","updateViewSize","popScroll","thawContentHeight","pause","resume","requestRender","namespace","actionType","queue","whenSizeUpdated","isRunning","computeTitle","currentRangeUnit","currentUnzonedRange","activeUnzonedRange","isRangeAllDay","computeTitleFormat","setDate","currentDateProfile","newDateProfile","build","unsetDate","unset","fetchInitialEvents","usesMinMaxTime","requestEvents","bindEventChanges","resetEvents","unbindEventChanges","setEvents","eventsPayload","unsetEvents","requestDateRender","executeDateRender","requestDateUnrender","executeDateUnrender","isDateInit","startNowIndicator","unselect","stopNowIndicator","triggerViewRender","triggerViewDestroy","publiclyTrigger","requestEventsRender","executeEventRender","triggerAfterEventsRendered","requestEventsUnrender","triggerBeforeEventsDestroyed","requestBusinessHoursRender","businessHourGenerator","renderBusinessHours","requestBusinessHoursUnrender","unrenderBusinessHours","processUnselect","handleDocumentMousedown","update","delay","getNowIndicatorUnit","initialNowDate","getNow","initialNowQueriedMs","startOf","nowIndicatorTimeoutID","nowIndicatorIntervalID","setInterval","updateNowIndicator","isDatesRendered","unrenderNowIndicator","renderNowIndicator","isNowIndicatorRendered","clearTimeout","clearInterval","updateSize","totalHeight","isAuto","isResize","scroll","queuedScroll","applyQueuedScroll","applyScroll","queryDateScroll","computeInitialDateScroll","applyDateScroll","reportEventDrop","eventMutation","eventManager","undoFunc","mutateEventsWithId","triggerEventDrop","reportExternalDrop","singleEventDef","isEvent","isSticky","ui","addEventDef","triggerExternalDrop","reportEventResize","resizeDelta","triggerEventResize","select","renderSelectionFootprint","reportSelection","triggerSelect","footprintToDateProfile","unrenderSelection","selectEventInstance","selectedEventInstance","unselectEventInstance","getEventSegs","processRangeUnselect","processEventUnselect","ignore","closest","triggerBaseRendered","triggerBaseUnrendered","triggerDayClick","dayEl","isDateInOtherMonth","getUnzonedRangeOption","parseUnzonedRange","hiddenDays","isHiddenDayHash","dayCnt","inArray","Error","trimHiddenDays","inputUnzonedRange","skipHiddenDays","isHiddenDay","inc","isExclusive","out","watch","deps","initialEvents","intervalStart","intervalEnd","fillRenderer","rangeUpdated","displayEventTime","displayEventEnd","eventTimeFormat","computeEventTimeFormat","computeDisplayEventTime","computeDisplayEventEnd","instanceGroup","eventRanges","_getDateProfile","bgRanges","fgRanges","renderBgRanges","renderFgRanges","unrender","unrenderBgRanges","unrenderFgRanges","segs","eventFootprintsToSegs","renderFgSegEls","renderFgSegs","fgSegs","unrenderFgSegs","renderBgSegs","bgSegs","unrenderBgSegs","getSegs","concat","renderSegs","getClasses","getBgClasses","getCss","getBgColor","filterEl","filterEventRenderEl","disableResizing","hasEventRenderHandlers","hasPublicHandlers","html","renderedSegs","beforeFgSegHtml","fgSegHtml","node","getSegClasses","isDraggable","legacy","custom","getTimeText","displayEnd","_getTimeText","classNames","objs","getStylingObjs","eventClassName","getSkinCss","getBorderColor","getTextColor","eventBackgroundColor","eventColor","eventBorderColor","eventTextColor","getFallbackStylingObjs","sortEventSegs","compareEventSegs","seg1","seg2","f1","f2","cf1","cf2","r1","r2","englishMoment","toISOString","PART_SEPARATOR","SPECIAL_TOKEN_MARKER","MAYBE_MARKER","MAYBE_REGEXP","RegExp","specialTokens","t","T","largeTokenMap","Y","M","W","w","D","renderFakeFormatString","getParsedFormatString","fakeFormatString","date2","separator","renderParsedFormat","parsedFormat","leftI","rightI","middleI","sameUnits","unzonedDate1","unzonedDate2","renderedParts1","renderFakeFormatStringParts","renderedParts2","leftStr","rightStr","middleStr1","middleStr2","middleStr","isSame","processMaybeMarkers","parsedFormatStrCache","parseFormatString","chunks","chunkFormatString","buildFakeFormatString","buildSameUnits","match","chunker","splitStringLiteral","maybe","chunk","tokenInfo","units","fakePart","fakeRender","fakeParts","m0","m1","candidate","best","_watchers","_props","applyGlobalWatchers","constructed","_globalWatchArgs","has","newProps","setProps","reset","oldProps","changeset","names","changedProps","changedCnt","depList","startFunc","stopFunc","unwatch","_watchDeps","watcher","teardown","queuedChangeCnt","depCnt","satisfyCnt","values","bindTuples","isCallingStop","onBeforeDepChange","depName","isOptional","onDepChange","flash","propDefs","proto","standardPropMap","manualProps","startTime","endTime","zonedDayStart","instanceStart","instanceEnd","unzonedDate","unzonedEnd","instances","isBefore","dowHash","setDow","dowNumbers","dow","msToUtcMoment","buildPrev","prevDate","dateIncrement","buildNext","nextDate","forceToValid","currentInfo","renderUnzonedRange","isDateAllDay","buildValidRange","buildCurrentRangeInfo","buildRenderRange","adjustActiveRange","buildDateIncrement","dayCount","durationUnit","buildRangeFromDuration","buildRangeFromDayCount","buildCustomVisibleRange","getFallbackDuration","dateIncrementInput","dateIncrementDuration","alignment","computeRes","customAlignment","runningCount","visibleUnzonedRange","fallback","events","setRawEventDefs","currentTimezone","StandardTheme_1","JqueryUiTheme_1","themeClassHash","themeName","themeClass","themeSetting","isHorizontal","isVertical","forcedOffsetParentEl","offsetParent","offsetParentEl","boundingRect","queryBoundingRect","buildElHorizontals","buildElVerticals","lefts","rights","tops","bottoms","ensureBuilt","getHorizontalIndex","leftOffset","getVerticalIndex","topOffset","getLeftOffset","leftIndex","getLeftPosition","getRightOffset","getRightPosition","getWidth","getTopOffset","topIndex","getTopPosition","getBottomOffset","getBottomPosition","getHeight","scrollParentEl","isPointInBounds","isLeftInBounds","isTopInBounds","isInteracting","isDistanceSurpassed","isDelayEnded","isTouch","isGeneric","shouldCancelTouchScroll","scrollAlwaysKills","isAutoScroll","scrollSensitivity","scrollSpeed","scrollIntervalMs","startInteraction","extraOptions","minDistance","distance","originX","originY","bindHandlers","initAutoScroll","startDelay","handleDistanceSurpassed","endInteraction","endDrag","delayTimeoutId","destroyAutoScroll","unbindHandlers","drag","handleMove","dragstop","touchmove","handleTouchScroll","startDrag","distanceSq","updateAutoScroll","initialEv","handleDelayEnd","handleDebouncedScroll","endAutoScroll","scrollBounds","topCloseness","bottomCloseness","leftCloseness","rightCloseness","sensitivity","bounds","topVel","leftVel","setScrollVel","scrollTopVel","scrollLeftVel","constrainScrollVel","scrollIntervalId","scrollLeft","scrollIntervalFunc","frac","updateDayTable","daysPerRow","firstDay","rowCnt","dayIndex","dayIndices","dayDates","breakOnWeeks","ceil","updateDayTableCols","colCnt","computeColCnt","colHeadFormat","computeColHeadFormat","getCellDate","row","col","getCellDayIndex","getCellRange","getColDayIndex","getDateDayIndex","dayOffset","sliceRangeByRow","rowFirst","rowLast","segFirst","segLast","normalRange","computeDayRange","rangeFirst","rangeLast","firstRowDayIndex","lastRowDayIndex","sliceRangeByDay","renderHeadHtml","renderHeadTrHtml","renderHeadIntroHtml","renderIntroHtml","renderHeadDateCellsHtml","htmls","renderHeadDateCellHtml","colspan","otherAttrs","innerHtml","isDateValid","getDayClasses","buildGotoAnchorHtml","forceOff","renderBgTrHtml","renderBgIntroHtml","renderBgCellsHtml","renderBgCellHtml","bookendCells","trEl","introHtml","append","prepend","buildEventInstanceGroup","hasAllDayBusinessHours","renderEventFootprints","fillSegTag","elsByFill","renderFootprint","componentFootprintToSegs","buildSegEls","attachSegEls","reportEls","buildSegHtml","nodes","eventRenderer","renderComponentFootprint","fabricateEventFootprint","renderEventDraggingFootprints","sourceSeg","renderEventResizingFootprints","extraClassNames","opacity","helperEls","dummyInstance","dummyEvent","handleMouseover","handleMouseout","mousedOverSeg","cellWeekNumbersVisible","bottomCoordPadding","isRigid","leftCol","rightCol","renderDates","renderGrid","unrenderDates","removeSegPopover","headContainerEl","renderDayRowHtml","cellEls","rowCoordCache","colCoordCache","getCellEl","getIsNumbersVisible","renderNumberTrHtml","getIsDayNumbersVisible","renderNumberIntroHtml","renderNumberCellsHtml","renderNumberCellHtml","weekCalcFirstDoW","isDayNumberVisible","firstDayOfWeek","getCellHit","getHitFootprint","getHitEl","getOwnEventSegs","popoverSegs","renderDrag","renderHighlight","helperRenderer","unrenderDrag","unrenderHighlight","renderEventResize","unrenderEventResize","segPopover","hide","limitRows","levelLimit","rowLevelLimit","rowStructs","unlimitRow","computeRowLevelLimit","limitRow","trHeight","rowEl","rowHeight","trEls","tbodyEl","iterInnerHeights","childNode","levelSegs","cellMatrix","limitedNodes","segsBelow","totalSegsBelow","colSegsBelow","td","rowspan","segMoreNodes","moreTd","moreWrap","moreLink","rowStruct","moreNodes","emptyCellsUntil","endCol","getCellSegs","renderMoreLink","segLevels","attr","after","moreEls","limitedEls","hiddenSegs","getMoreLinkText","clickOption","moreEl","allSegs","reslicedAllSegs","resliceDaySegs","reslicedHiddenSegs","showSegPopover","zoomTo","topEl","content","renderSegPopoverContent","parentEl","autoHide","viewportConstrain","triggerBeforeEventSegsDestroyed","show","triggerAfterEventSegsRendered","segContainer","dayDate","dayStart","dayEnd","dayRange","newSegs","num","startLevel","segMatrix","level","eventRendererClass","businessHourRendererClass","helperRendererClass","fillRendererClass","dayGrid","instantiateDayGrid","hasRigidRows","colWeekNumbersVisible","addChild","scroller","subclass","makeDayGridSubclass","dayGridClass","renderSkeleton","dayGridContainerEl","dayGridEl","renderSkeletonHtml","unrenderSkeleton","weekNumberStyleAttr","weekNumberWidth","scrollerHeight","headRowEl","computeScrollerHeight","setGridHeight","SuperClass","weekStart","weekday","_calendar","peerEventInstances","getPeerEventInstances","peerEventRanges","peerEventFootprints","constraintVal","overlapVal","eventAllowFunc","isFootprintAllowed","getEventInstancesWithoutId","selectAllowFunc","getEventInstances","subjectEventInstance","constraintFootprints","overlapEventFootprints","constraintValToFootprints","isFootprintWithinConstraints","collectOverlapEventFootprints","isOverlapsAllowedByFunc","isOverlapEventInstancesAllowed","footprintContainsFootprint","buildCurrentBusinessFootprints","parseEventDefToInstances","eventInstancesToFootprints","parseFootprints","getEventInstancesWithId","targetFootprint","footprintsIntersect","currentPeriod","eventRangeToEventFootprints","outerFootprint","innerFootprint","footprint0","footprint1","overlapFunc","overlapEventInstance","overlapEventDef","subjectLegacyInstance","BUSINESS_HOUR_EVENT_DEFAULTS","rawComplexDef","buildEventDefs","rawDefs","requireDow","defs","buildEventDef","rawDef","fullRawDef","pendingCnt","freezeDepth","stuntedReleaseCnt","releaseCnt","requestsByUid","eventDefsByUid","eventDefsById","eventInstanceGroupsById","isWithinRange","requestSources","sources","freeze","requestSource","thaw","request","status","addEventDefs","tryRelease","purgeSource","removeEventDef","purgeAllSources","completedCnt","getEventDefByUid","eventDefUid","getEventDefsById","addEventInstance","isEmptyObject","removeEventInstancesForDef","matchingInstances","currentEventInstance","release","whenReleased","stickySource","otherSources","force","setPeriod","addSource","removeSource","doomedSource","removeAllSources","refetchSource","refetchAllSources","getSources","multiQuerySources","matchInputs","matchingSources","querySources","matchInput","getSourceById","grep","isSourcesEquivalent","eventPeriod","unbindPeriod","bindPeriod","eventId","eventDefMutation","undoFuncs","buildMutatedEventInstanceGroup","defCopy","allInstances","source0","source1","StandardTheme","widget","widgetHeader","widgetContent","buttonGroup","button","cornerLeft","cornerRight","stateDefault","stateActive","stateDisabled","stateHover","stateDown","popoverHeader","popoverContent","headerRow","dayRow","listView","close","JqueryUiTheme","pushLoading","popLoading","ajaxSettings","onSuccess","success","onError","error","requestParams","buildRequestParams","ajax","AJAX_DEFAULTS","xhr","callbackRes","statusText","errorThrown","customRequestParams","params","dataType","cache","items","proxyCall","results","item","sourceEl","isFollowing","isHidden","isAnimating","y0","x0","topDelta","leftDelta","updatePosition","stop","shouldRevert","revertDuration","complete","top0","left0","animate","getEl","additionalClass","visibility","display","margin","zIndex","sourceOffset","documentMousedown","viewportTop","viewportLeft","viewportOffset","windowEl","viewportEl","q","isPaused","tryStart","getIsIdle","canRunNext","runRemaining","task","shift","runTask","waitsByNamespace","taskFunc","waitMs","waitNamespace","delayWait","clearWait","compoundTask","startWait","spawnWait","waitId","newTask","shouldAppend","hitsNeededDepth","childrenByUid","businessHourRenderer","child","removeChild","callChildren","_getCalendar","convertEventsPayloadToLegacyArray","getBusinessHourSegs","getOwnBusinessHourSegs","iterChildren","showEventsWithId","hideEventsWithId","renderedHelper","getSafeHitFootprint","eventFootprintToSegs","gotoOptions","finalOptions","JSON","stringify","getAllDayHtml","noThemeHighlight","currentRangeAs","startDay","endTimeMS","endDay","isMultiDayRange","legacyEvents","Toolbar_1","OptionsManager_1","ViewSpecManager_1","overrides","loadingLevel","ignoreUpdateViewSize","freezeContentHeightDepth","viewsByType","viewSpecManager","initMomentInternals","initCurrentDate","initEventManager","getView","triggerInfo","optHandler","option","newOptionHash","instantiateView","viewType","spec","getViewSpec","isValidViewType","changeView","dateOrRange","recordOverrides","visibleRange","currentDate","renderView","newDate","getUnitViewSpec","defaultDateInput","prevInfo","nextInfo","gotoDate","zonedDateInput","incrementDate","delta","getDate","contentEl","elementVisible","calcSize","initialRender","anchorEl","customAction","opts","themeSystem","widgetClass","businessHours","toggleClass","prependTo","initToolbars","renderHeader","renderFooter","resize","windowResizeProxy","windowResize","clearView","toolbarsManager","bindViewHandlers","setToolbarsTitle","updateToolbarButtons","unbindViewHandlers","newView","oldView","currentView","reinitView","getSuggestedViewHeight","suggestedViewHeight","isHeightAuto","_calcSize","contentHeightInput","heightInput","queryToolbarsHeight","forceFreezeContentHeight","computeHeaderOptions","footer","computeFooterOptions","extraClasses","layout","setToolbarOptions","now","todayInfo","reduce","accumulator","toolbar","toolbarHeight","zonedStartInput","zonedEndInput","buildSelectFootprint","_week","monthNames","_months","monthNamesShort","_monthsShort","dayNames","_weekdays","dayNamesShort","_weekdaysShort","localizeMoment","getIsAmbigTimezone","adjustedZonedDate","zonedDate","toArray","timeAdjust","asMilliseconds","ignoreEnd","humanizeDuration","humanize","rangeInput","rawSources","singleRawSource","rawSource","getEventEnd","zonedStart","rerenderEvents","refetchEvents","renderEvents","eventInputs","renderEvent","removeEvents","legacyQuery","legacyInstances","idMap","filterLegacyEventInstances","clientEvents","legacyEventInstances","updateEvents","eventPropsArray","updateEvent","eventProps","getEventSources","getEventSourceById","addEventSource","sourceInput","removeEventSources","sourceMultiQuery","removeEventSource","sourceQuery","refetchEventSources","defaults","legacyEventInstance","dragListener","dragstart","sortstart","accept","listenToExternalDrag","meta","getDraggedElMeta","interactionStart","hitOver","mutatedEventInstanceGroup","isAllowed","hitFootprint","computeExternalDrop","hitOut","hitDone","interactionEnd","stick","dataAttrPrefix","buildDragListener","resizeMutation","dragStart","segResizeStart","origHitFootprint","computeEventStartResizeMutation","computeEventEndResizeMutation","segResizeStop","startFootprint","endFootprint","origEventFootprint","origRange","getSelectionDelay","handleMousedown","settings","buildSelectListener","mouseFollower","segDragStart","origFootprint","computeEventDropMutation","segDragStop","computeEventDateMutation","getDelay","selectionFootprint","computeSelection","wholeFootprint","computeSelectionFootprint","dayClickHit","agendaTimeGridMethods","agendaDayGridMethods","AGENDA_ALL_DAY_EVENT_LIMIT","timeGrid","instantiateTimeGrid","timeGridClass","timeGridWrapEl","timeGridEl","axisStyleAttr","axisWidth","colEls","noScrollRowEls","bottomRuleEl","getTotalSlatHeight","computeTimeTop","dayEventsPayload","timedEventsPayload","groups","groupEventFootprintsByAllDay","timed","weekText","AGENDA_STOCK_SUB_DURATIONS","processOptions","sliceRangeByTimes","segRange","dayRanges","slotDuration","snapDuration","snapsPerSlot","labelFormat","labelInterval","computeLabelInterval","slotsPerLabel","renderSlats","renderColumns","unrenderColumns","slatContainerEl","renderSlatRowHtml","slatEls","slatCoordCache","slotDate","isLabeled","axisHtml","slotTime","slotIterator","renderContentSkeleton","unrenderContentSkeleton","skeletonEl","cellHtml","contentSkeletonEl","colContainerEls","helperContainerEls","fgContainerEls","bgContainerEls","highlightContainerEls","businessContainerEls","groupSegsByCol","segsByCol","attachSegsByCol","containerEls","computeDateTop","nowIndicatorEls","updateSegVerticals","businessSegs","startOfDayDate","slatIndex","slatRemainder","slatCoverage","computeSegVerticals","assignSegVerticals","eventMinHeight","generateSegVerticalCss","colIndex","slatTop","slatHeight","partial","localSnapIndex","snapIndex","snapTop","snapBottom","snap","computeSnapTime","renderFgSegsIntoContainers","updateFgSegCoords","timeText","fullTimeText","startTimeText","isResizableFromStart","isResizableFromEnd","skinCss","zonedEnd","computeFgSegHorizontals","assignFgSegHorizontals","levels","level0","buildSlotSegLevels","computeForwardSlotSegs","computeSlotSegPressures","computeFgSegForwardBack","seriesBackwardPressure","seriesBackwardCoord","forwardSegs","forwardCoord","sortForwardSegs","backwardCoord","compareForwardSegs","forwardPressure","generateFgSegHorizontalCss","shouldOverlap","computeSlotSegCollisions","k","forwardSeg","otherSegs","isSlotSegCollision","helperNodes","renderSegRows","rowNode","pop","segRows","groupSegRows","renderSegRow","rowSegs","tr","buildSegLevels","levelCnt","tbody","loneCellMatrix","parseInt","isDaySegCollision","compareDaySegCols","titleHtml","timeHtml","otherSeg","skeletonTopEl","skeletonTop","renderFillRow","startCol","toLowerCase","viewEnd","renderEmptyMessage","renderSegList","daySegs","segsByDay","groupSegsByDay","tableEl","dayHeaderHtml","empty","mainFormat","altFormat","bgColor","isDefaultPrevented","location","href","fullCalendar","_element","singleRes","element","removeData","Toolbar","toolbarOptions","viewsWithButtons","newToolbarOptions","sections","renderSection","sectionEl","buttonStr","calendarCustomButtons","calendarButtonTextOverrides","calendarButtonText","buttonGroupStr","groupEl","groupChildren","isOnlyButtons","buttonClick","buttonIcon","buttonInnerHtml","buttonClasses","buttonEl","buttonAriaAttr","buttonTextOverride","buttonTextDefault","hasClass","not","hover","first","updateTitle","activateButton","deactivateButton","disableButton","enableButton","getViewsWithButtons","OptionsManager","dynamicOverrides","compute","optionName","optionCnt","localeDefaults","dirDefaults","rawOptions","clearCache","ViewSpecManager","viewSpecCache","buildViewSpec","viewTypes","singleUnit","requestedViewType","viewOverrides","specChain","defaultsChain","overridesChain","buildViewSpecOptions","buildViewSpecButtonText","queryButtonText","buttonTextKey","Bootstrap3Theme_1","Bootstrap4Theme_1","Bootstrap3Theme","tableGrid","tableList","tableListHeading","popover","Bootstrap4Theme","fixedWeekCount","allDaySlot","slotEventOverlap","listDayFormat","noEventsMessage","listDayAltFormat","_vm","_h","$createElement","_c","_self","staticClass","_v","_m","staticRenderFns"],"mappings":"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AAUinB,EAA+BhU,GAKjDgU,EAA8B1nB,UAAUmyC,iBAAmB,SAAU7T,EAAqBD,EAAkBG,GACxG,IAAIuT,EAAqBr+B,EAAO1T,UAAUmyC,iBAAiBnzC,KAAK2B,KAAM29B,EAAqBD,EAAkBG,GACzG7zB,EAAQhK,KAAK4wC,cAAcQ,EAAmBrgC,QAAS8sB,GACvD5zB,EAAMjK,KAAK4wC,cAAcQ,EAAmBngC,MAAO4sB,GASvD,MAPI,iBAAiBn6B,KAAKg6B,KACtB1zB,EAAM22B,QAAQ,QAEV12B,EAAI+7C,WACJ/7C,EAAI9G,IAAI,EAAG,QAAQw9B,QAAQ,SAG5B,IAAIvlB,EAAe/I,QAAQrI,EAAOC,IAEtC8c,EApBuC,CAqBhDtH,EAAuBpN,SACzB1U,EAAQ0U,QAAU0U,GAIV,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACC,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CAEH,SAAUrpB,EAAQC,EAASM,GAEj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","file":"js/chunk-c67963b4.9f07fe31.js","sourcesContent":["/*!\n * FullCalendar v3.10.0\n * Docs & License: https://fullcalendar.io/\n * (c) 2018 Adam Shaw\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"moment\"), require(\"jquery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"moment\", \"jquery\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"FullCalendar\"] = factory(require(\"moment\"), require(\"jquery\"));\n\telse\n\t\troot[\"FullCalendar\"] = factory(root[\"moment\"], root[\"jQuery\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_0__, __WEBPACK_EXTERNAL_MODULE_3__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 256);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n/***/ }),\n/* 1 */,\n/* 2 */\n/***/ (function(module, exports) {\n\n/*\r\nderived from:\r\nhttps://github.com/Microsoft/tslib/blob/v1.6.0/tslib.js\r\n\nonly include the helpers we need, to keep down filesize\r\n*/\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b)\r\n if (b.hasOwnProperty(p))\r\n d[p] = b[p]; };\r\nexports.__extends = function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n};\r\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_3__;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\n/* FullCalendar-specific DOM Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Given the scrollbar widths of some other container, create borders/margins on rowEls in order to match the left\r\n// and right space that was offset by the scrollbars. A 1-pixel border first, then margin beyond that.\r\nfunction compensateScroll(rowEls, scrollbarWidths) {\r\n if (scrollbarWidths.left) {\r\n rowEls.css({\r\n 'border-left-width': 1,\r\n 'margin-left': scrollbarWidths.left - 1\r\n });\r\n }\r\n if (scrollbarWidths.right) {\r\n rowEls.css({\r\n 'border-right-width': 1,\r\n 'margin-right': scrollbarWidths.right - 1\r\n });\r\n }\r\n}\r\nexports.compensateScroll = compensateScroll;\r\n// Undoes compensateScroll and restores all borders/margins\r\nfunction uncompensateScroll(rowEls) {\r\n rowEls.css({\r\n 'margin-left': '',\r\n 'margin-right': '',\r\n 'border-left-width': '',\r\n 'border-right-width': ''\r\n });\r\n}\r\nexports.uncompensateScroll = uncompensateScroll;\r\n// Make the mouse cursor express that an event is not allowed in the current area\r\nfunction disableCursor() {\r\n $('body').addClass('fc-not-allowed');\r\n}\r\nexports.disableCursor = disableCursor;\r\n// Returns the mouse cursor to its original look\r\nfunction enableCursor() {\r\n $('body').removeClass('fc-not-allowed');\r\n}\r\nexports.enableCursor = enableCursor;\r\n// Given a total available height to fill, have `els` (essentially child rows) expand to accomodate.\r\n// By default, all elements that are shorter than the recommended height are expanded uniformly, not considering\r\n// any other els that are already too tall. if `shouldRedistribute` is on, it considers these tall rows and\r\n// reduces the available height.\r\nfunction distributeHeight(els, availableHeight, shouldRedistribute) {\r\n // *FLOORING NOTE*: we floor in certain places because zoom can give inaccurate floating-point dimensions,\r\n // and it is better to be shorter than taller, to avoid creating unnecessary scrollbars.\r\n var minOffset1 = Math.floor(availableHeight / els.length); // for non-last element\r\n var minOffset2 = Math.floor(availableHeight - minOffset1 * (els.length - 1)); // for last element *FLOORING NOTE*\r\n var flexEls = []; // elements that are allowed to expand. array of DOM nodes\r\n var flexOffsets = []; // amount of vertical space it takes up\r\n var flexHeights = []; // actual css height\r\n var usedHeight = 0;\r\n undistributeHeight(els); // give all elements their natural height\r\n // find elements that are below the recommended height (expandable).\r\n // important to query for heights in a single first pass (to avoid reflow oscillation).\r\n els.each(function (i, el) {\r\n var minOffset = i === els.length - 1 ? minOffset2 : minOffset1;\r\n var naturalOffset = $(el).outerHeight(true);\r\n if (naturalOffset < minOffset) {\r\n flexEls.push(el);\r\n flexOffsets.push(naturalOffset);\r\n flexHeights.push($(el).height());\r\n }\r\n else {\r\n // this element stretches past recommended height (non-expandable). mark the space as occupied.\r\n usedHeight += naturalOffset;\r\n }\r\n });\r\n // readjust the recommended height to only consider the height available to non-maxed-out rows.\r\n if (shouldRedistribute) {\r\n availableHeight -= usedHeight;\r\n minOffset1 = Math.floor(availableHeight / flexEls.length);\r\n minOffset2 = Math.floor(availableHeight - minOffset1 * (flexEls.length - 1)); // *FLOORING NOTE*\r\n }\r\n // assign heights to all expandable elements\r\n $(flexEls).each(function (i, el) {\r\n var minOffset = i === flexEls.length - 1 ? minOffset2 : minOffset1;\r\n var naturalOffset = flexOffsets[i];\r\n var naturalHeight = flexHeights[i];\r\n var newHeight = minOffset - (naturalOffset - naturalHeight); // subtract the margin/padding\r\n if (naturalOffset < minOffset) { // we check this again because redistribution might have changed things\r\n $(el).height(newHeight);\r\n }\r\n });\r\n}\r\nexports.distributeHeight = distributeHeight;\r\n// Undoes distrubuteHeight, restoring all els to their natural height\r\nfunction undistributeHeight(els) {\r\n els.height('');\r\n}\r\nexports.undistributeHeight = undistributeHeight;\r\n// Given `els`, a jQuery set of cells, find the cell with the largest natural width and set the widths of all the\r\n// cells to be that width.\r\n// PREREQUISITE: if you want a cell to take up width, it needs to have a single inner element w/ display:inline\r\nfunction matchCellWidths(els) {\r\n var maxInnerWidth = 0;\r\n els.find('> *').each(function (i, innerEl) {\r\n var innerWidth = $(innerEl).outerWidth();\r\n if (innerWidth > maxInnerWidth) {\r\n maxInnerWidth = innerWidth;\r\n }\r\n });\r\n maxInnerWidth++; // sometimes not accurate of width the text needs to stay on one line. insurance\r\n els.width(maxInnerWidth);\r\n return maxInnerWidth;\r\n}\r\nexports.matchCellWidths = matchCellWidths;\r\n// Given one element that resides inside another,\r\n// Subtracts the height of the inner element from the outer element.\r\nfunction subtractInnerElHeight(outerEl, innerEl) {\r\n var both = outerEl.add(innerEl);\r\n var diff;\r\n // effin' IE8/9/10/11 sometimes returns 0 for dimensions. this weird hack was the only thing that worked\r\n both.css({\r\n position: 'relative',\r\n left: -1 // ensure reflow in case the el was already relative. negative is less likely to cause new scroll\r\n });\r\n diff = outerEl.outerHeight() - innerEl.outerHeight(); // grab the dimensions\r\n both.css({ position: '', left: '' }); // undo hack\r\n return diff;\r\n}\r\nexports.subtractInnerElHeight = subtractInnerElHeight;\r\n/* Element Geom Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// borrowed from https://github.com/jquery/jquery-ui/blob/1.11.0/ui/core.js#L51\r\nfunction getScrollParent(el) {\r\n var position = el.css('position');\r\n var scrollParent = el.parents().filter(function () {\r\n var parent = $(this);\r\n return (/(auto|scroll)/).test(parent.css('overflow') + parent.css('overflow-y') + parent.css('overflow-x'));\r\n }).eq(0);\r\n return position === 'fixed' || !scrollParent.length ? $(el[0].ownerDocument || document) : scrollParent;\r\n}\r\nexports.getScrollParent = getScrollParent;\r\n// Queries the outer bounding area of a jQuery element.\r\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\r\n// Origin is optional.\r\nfunction getOuterRect(el, origin) {\r\n var offset = el.offset();\r\n var left = offset.left - (origin ? origin.left : 0);\r\n var top = offset.top - (origin ? origin.top : 0);\r\n return {\r\n left: left,\r\n right: left + el.outerWidth(),\r\n top: top,\r\n bottom: top + el.outerHeight()\r\n };\r\n}\r\nexports.getOuterRect = getOuterRect;\r\n// Queries the area within the margin/border/scrollbars of a jQuery element. Does not go within the padding.\r\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\r\n// Origin is optional.\r\n// WARNING: given element can't have borders\r\n// NOTE: should use clientLeft/clientTop, but very unreliable cross-browser.\r\nfunction getClientRect(el, origin) {\r\n var offset = el.offset();\r\n var scrollbarWidths = getScrollbarWidths(el);\r\n var left = offset.left + getCssFloat(el, 'border-left-width') + scrollbarWidths.left - (origin ? origin.left : 0);\r\n var top = offset.top + getCssFloat(el, 'border-top-width') + scrollbarWidths.top - (origin ? origin.top : 0);\r\n return {\r\n left: left,\r\n right: left + el[0].clientWidth,\r\n top: top,\r\n bottom: top + el[0].clientHeight // clientHeight includes padding but NOT scrollbars\r\n };\r\n}\r\nexports.getClientRect = getClientRect;\r\n// Queries the area within the margin/border/padding of a jQuery element. Assumed not to have scrollbars.\r\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\r\n// Origin is optional.\r\nfunction getContentRect(el, origin) {\r\n var offset = el.offset(); // just outside of border, margin not included\r\n var left = offset.left + getCssFloat(el, 'border-left-width') + getCssFloat(el, 'padding-left') -\r\n (origin ? origin.left : 0);\r\n var top = offset.top + getCssFloat(el, 'border-top-width') + getCssFloat(el, 'padding-top') -\r\n (origin ? origin.top : 0);\r\n return {\r\n left: left,\r\n right: left + el.width(),\r\n top: top,\r\n bottom: top + el.height()\r\n };\r\n}\r\nexports.getContentRect = getContentRect;\r\n// Returns the computed left/right/top/bottom scrollbar widths for the given jQuery element.\r\n// WARNING: given element can't have borders (which will cause offsetWidth/offsetHeight to be larger).\r\n// NOTE: should use clientLeft/clientTop, but very unreliable cross-browser.\r\nfunction getScrollbarWidths(el) {\r\n var leftRightWidth = el[0].offsetWidth - el[0].clientWidth;\r\n var bottomWidth = el[0].offsetHeight - el[0].clientHeight;\r\n var widths;\r\n leftRightWidth = sanitizeScrollbarWidth(leftRightWidth);\r\n bottomWidth = sanitizeScrollbarWidth(bottomWidth);\r\n widths = { left: 0, right: 0, top: 0, bottom: bottomWidth };\r\n if (getIsLeftRtlScrollbars() && el.css('direction') === 'rtl') { // is the scrollbar on the left side?\r\n widths.left = leftRightWidth;\r\n }\r\n else {\r\n widths.right = leftRightWidth;\r\n }\r\n return widths;\r\n}\r\nexports.getScrollbarWidths = getScrollbarWidths;\r\n// The scrollbar width computations in getScrollbarWidths are sometimes flawed when it comes to\r\n// retina displays, rounding, and IE11. Massage them into a usable value.\r\nfunction sanitizeScrollbarWidth(width) {\r\n width = Math.max(0, width); // no negatives\r\n width = Math.round(width);\r\n return width;\r\n}\r\n// Logic for determining if, when the element is right-to-left, the scrollbar appears on the left side\r\nvar _isLeftRtlScrollbars = null;\r\nfunction getIsLeftRtlScrollbars() {\r\n if (_isLeftRtlScrollbars === null) {\r\n _isLeftRtlScrollbars = computeIsLeftRtlScrollbars();\r\n }\r\n return _isLeftRtlScrollbars;\r\n}\r\nfunction computeIsLeftRtlScrollbars() {\r\n var el = $('
')\r\n .css({\r\n position: 'absolute',\r\n top: -1000,\r\n left: 0,\r\n border: 0,\r\n padding: 0,\r\n overflow: 'scroll',\r\n direction: 'rtl'\r\n })\r\n .appendTo('body');\r\n var innerEl = el.children();\r\n var res = innerEl.offset().left > el.offset().left; // is the inner div shifted to accommodate a left scrollbar?\r\n el.remove();\r\n return res;\r\n}\r\n// Retrieves a jQuery element's computed CSS value as a floating-point number.\r\n// If the queried value is non-numeric (ex: IE can return \"medium\" for border width), will just return zero.\r\nfunction getCssFloat(el, prop) {\r\n return parseFloat(el.css(prop)) || 0;\r\n}\r\n/* Mouse / Touch Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac)\r\nfunction isPrimaryMouseButton(ev) {\r\n return ev.which === 1 && !ev.ctrlKey;\r\n}\r\nexports.isPrimaryMouseButton = isPrimaryMouseButton;\r\nfunction getEvX(ev) {\r\n var touches = ev.originalEvent.touches;\r\n // on mobile FF, pageX for touch events is present, but incorrect,\r\n // so, look at touch coordinates first.\r\n if (touches && touches.length) {\r\n return touches[0].pageX;\r\n }\r\n return ev.pageX;\r\n}\r\nexports.getEvX = getEvX;\r\nfunction getEvY(ev) {\r\n var touches = ev.originalEvent.touches;\r\n // on mobile FF, pageX for touch events is present, but incorrect,\r\n // so, look at touch coordinates first.\r\n if (touches && touches.length) {\r\n return touches[0].pageY;\r\n }\r\n return ev.pageY;\r\n}\r\nexports.getEvY = getEvY;\r\nfunction getEvIsTouch(ev) {\r\n return /^touch/.test(ev.type);\r\n}\r\nexports.getEvIsTouch = getEvIsTouch;\r\nfunction preventSelection(el) {\r\n el.addClass('fc-unselectable')\r\n .on('selectstart', preventDefault);\r\n}\r\nexports.preventSelection = preventSelection;\r\nfunction allowSelection(el) {\r\n el.removeClass('fc-unselectable')\r\n .off('selectstart', preventDefault);\r\n}\r\nexports.allowSelection = allowSelection;\r\n// Stops a mouse/touch event from doing it's native browser action\r\nfunction preventDefault(ev) {\r\n ev.preventDefault();\r\n}\r\nexports.preventDefault = preventDefault;\r\n/* General Geometry Utils\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false\r\nfunction intersectRects(rect1, rect2) {\r\n var res = {\r\n left: Math.max(rect1.left, rect2.left),\r\n right: Math.min(rect1.right, rect2.right),\r\n top: Math.max(rect1.top, rect2.top),\r\n bottom: Math.min(rect1.bottom, rect2.bottom)\r\n };\r\n if (res.left < res.right && res.top < res.bottom) {\r\n return res;\r\n }\r\n return false;\r\n}\r\nexports.intersectRects = intersectRects;\r\n// Returns a new point that will have been moved to reside within the given rectangle\r\nfunction constrainPoint(point, rect) {\r\n return {\r\n left: Math.min(Math.max(point.left, rect.left), rect.right),\r\n top: Math.min(Math.max(point.top, rect.top), rect.bottom)\r\n };\r\n}\r\nexports.constrainPoint = constrainPoint;\r\n// Returns a point that is the center of the given rectangle\r\nfunction getRectCenter(rect) {\r\n return {\r\n left: (rect.left + rect.right) / 2,\r\n top: (rect.top + rect.bottom) / 2\r\n };\r\n}\r\nexports.getRectCenter = getRectCenter;\r\n// Subtracts point2's coordinates from point1's coordinates, returning a delta\r\nfunction diffPoints(point1, point2) {\r\n return {\r\n left: point1.left - point2.left,\r\n top: point1.top - point2.top\r\n };\r\n}\r\nexports.diffPoints = diffPoints;\r\n/* Object Ordering by Field\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nfunction parseFieldSpecs(input) {\r\n var specs = [];\r\n var tokens = [];\r\n var i;\r\n var token;\r\n if (typeof input === 'string') {\r\n tokens = input.split(/\\s*,\\s*/);\r\n }\r\n else if (typeof input === 'function') {\r\n tokens = [input];\r\n }\r\n else if ($.isArray(input)) {\r\n tokens = input;\r\n }\r\n for (i = 0; i < tokens.length; i++) {\r\n token = tokens[i];\r\n if (typeof token === 'string') {\r\n specs.push(token.charAt(0) === '-' ?\r\n { field: token.substring(1), order: -1 } :\r\n { field: token, order: 1 });\r\n }\r\n else if (typeof token === 'function') {\r\n specs.push({ func: token });\r\n }\r\n }\r\n return specs;\r\n}\r\nexports.parseFieldSpecs = parseFieldSpecs;\r\nfunction compareByFieldSpecs(obj1, obj2, fieldSpecs, obj1fallback, obj2fallback) {\r\n var i;\r\n var cmp;\r\n for (i = 0; i < fieldSpecs.length; i++) {\r\n cmp = compareByFieldSpec(obj1, obj2, fieldSpecs[i], obj1fallback, obj2fallback);\r\n if (cmp) {\r\n return cmp;\r\n }\r\n }\r\n return 0;\r\n}\r\nexports.compareByFieldSpecs = compareByFieldSpecs;\r\nfunction compareByFieldSpec(obj1, obj2, fieldSpec, obj1fallback, obj2fallback) {\r\n if (fieldSpec.func) {\r\n return fieldSpec.func(obj1, obj2);\r\n }\r\n var val1 = obj1[fieldSpec.field];\r\n var val2 = obj2[fieldSpec.field];\r\n if (val1 == null && obj1fallback) {\r\n val1 = obj1fallback[fieldSpec.field];\r\n }\r\n if (val2 == null && obj2fallback) {\r\n val2 = obj2fallback[fieldSpec.field];\r\n }\r\n return flexibleCompare(val1, val2) * (fieldSpec.order || 1);\r\n}\r\nexports.compareByFieldSpec = compareByFieldSpec;\r\nfunction flexibleCompare(a, b) {\r\n if (!a && !b) {\r\n return 0;\r\n }\r\n if (b == null) {\r\n return -1;\r\n }\r\n if (a == null) {\r\n return 1;\r\n }\r\n if ($.type(a) === 'string' || $.type(b) === 'string') {\r\n return String(a).localeCompare(String(b));\r\n }\r\n return a - b;\r\n}\r\nexports.flexibleCompare = flexibleCompare;\r\n/* Date Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nexports.dayIDs = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\r\nexports.unitsDesc = ['year', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond']; // descending\r\n// Diffs the two moments into a Duration where full-days are recorded first, then the remaining time.\r\n// Moments will have their timezones normalized.\r\nfunction diffDayTime(a, b) {\r\n return moment.duration({\r\n days: a.clone().stripTime().diff(b.clone().stripTime(), 'days'),\r\n ms: a.time() - b.time() // time-of-day from day start. disregards timezone\r\n });\r\n}\r\nexports.diffDayTime = diffDayTime;\r\n// Diffs the two moments via their start-of-day (regardless of timezone). Produces whole-day durations.\r\nfunction diffDay(a, b) {\r\n return moment.duration({\r\n days: a.clone().stripTime().diff(b.clone().stripTime(), 'days')\r\n });\r\n}\r\nexports.diffDay = diffDay;\r\n// Diffs two moments, producing a duration, made of a whole-unit-increment of the given unit. Uses rounding.\r\nfunction diffByUnit(a, b, unit) {\r\n return moment.duration(Math.round(a.diff(b, unit, true)), // returnFloat=true\r\n unit);\r\n}\r\nexports.diffByUnit = diffByUnit;\r\n// Computes the unit name of the largest whole-unit period of time.\r\n// For example, 48 hours will be \"days\" whereas 49 hours will be \"hours\".\r\n// Accepts start/end, a range object, or an original duration object.\r\nfunction computeGreatestUnit(start, end) {\r\n var i;\r\n var unit;\r\n var val;\r\n for (i = 0; i < exports.unitsDesc.length; i++) {\r\n unit = exports.unitsDesc[i];\r\n val = computeRangeAs(unit, start, end);\r\n if (val >= 1 && isInt(val)) {\r\n break;\r\n }\r\n }\r\n return unit; // will be \"milliseconds\" if nothing else matches\r\n}\r\nexports.computeGreatestUnit = computeGreatestUnit;\r\n// like computeGreatestUnit, but has special abilities to interpret the source input for clues\r\nfunction computeDurationGreatestUnit(duration, durationInput) {\r\n var unit = computeGreatestUnit(duration);\r\n // prevent days:7 from being interpreted as a week\r\n if (unit === 'week' && typeof durationInput === 'object' && durationInput.days) {\r\n unit = 'day';\r\n }\r\n return unit;\r\n}\r\nexports.computeDurationGreatestUnit = computeDurationGreatestUnit;\r\n// Computes the number of units (like \"hours\") in the given range.\r\n// Range can be a {start,end} object, separate start/end args, or a Duration.\r\n// Results are based on Moment's .as() and .diff() methods, so results can depend on internal handling\r\n// of month-diffing logic (which tends to vary from version to version).\r\nfunction computeRangeAs(unit, start, end) {\r\n if (end != null) { // given start, end\r\n return end.diff(start, unit, true);\r\n }\r\n else if (moment.isDuration(start)) { // given duration\r\n return start.as(unit);\r\n }\r\n else { // given { start, end } range object\r\n return start.end.diff(start.start, unit, true);\r\n }\r\n}\r\n// Intelligently divides a range (specified by a start/end params) by a duration\r\nfunction divideRangeByDuration(start, end, dur) {\r\n var months;\r\n if (durationHasTime(dur)) {\r\n return (end - start) / dur;\r\n }\r\n months = dur.asMonths();\r\n if (Math.abs(months) >= 1 && isInt(months)) {\r\n return end.diff(start, 'months', true) / months;\r\n }\r\n return end.diff(start, 'days', true) / dur.asDays();\r\n}\r\nexports.divideRangeByDuration = divideRangeByDuration;\r\n// Intelligently divides one duration by another\r\nfunction divideDurationByDuration(dur1, dur2) {\r\n var months1;\r\n var months2;\r\n if (durationHasTime(dur1) || durationHasTime(dur2)) {\r\n return dur1 / dur2;\r\n }\r\n months1 = dur1.asMonths();\r\n months2 = dur2.asMonths();\r\n if (Math.abs(months1) >= 1 && isInt(months1) &&\r\n Math.abs(months2) >= 1 && isInt(months2)) {\r\n return months1 / months2;\r\n }\r\n return dur1.asDays() / dur2.asDays();\r\n}\r\nexports.divideDurationByDuration = divideDurationByDuration;\r\n// Intelligently multiplies a duration by a number\r\nfunction multiplyDuration(dur, n) {\r\n var months;\r\n if (durationHasTime(dur)) {\r\n return moment.duration(dur * n);\r\n }\r\n months = dur.asMonths();\r\n if (Math.abs(months) >= 1 && isInt(months)) {\r\n return moment.duration({ months: months * n });\r\n }\r\n return moment.duration({ days: dur.asDays() * n });\r\n}\r\nexports.multiplyDuration = multiplyDuration;\r\n// Returns a boolean about whether the given duration has any time parts (hours/minutes/seconds/ms)\r\nfunction durationHasTime(dur) {\r\n return Boolean(dur.hours() || dur.minutes() || dur.seconds() || dur.milliseconds());\r\n}\r\nexports.durationHasTime = durationHasTime;\r\nfunction isNativeDate(input) {\r\n return Object.prototype.toString.call(input) === '[object Date]' || input instanceof Date;\r\n}\r\nexports.isNativeDate = isNativeDate;\r\n// Returns a boolean about whether the given input is a time string, like \"06:40:00\" or \"06:00\"\r\nfunction isTimeString(str) {\r\n return typeof str === 'string' &&\r\n /^\\d+\\:\\d+(?:\\:\\d+\\.?(?:\\d{3})?)?$/.test(str);\r\n}\r\nexports.isTimeString = isTimeString;\r\n/* Logging and Debug\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nfunction log() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var console = window.console;\r\n if (console && console.log) {\r\n return console.log.apply(console, args);\r\n }\r\n}\r\nexports.log = log;\r\nfunction warn() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var console = window.console;\r\n if (console && console.warn) {\r\n return console.warn.apply(console, args);\r\n }\r\n else {\r\n return log.apply(null, args);\r\n }\r\n}\r\nexports.warn = warn;\r\n/* General Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar hasOwnPropMethod = {}.hasOwnProperty;\r\n// Merges an array of objects into a single object.\r\n// The second argument allows for an array of property names who's object values will be merged together.\r\nfunction mergeProps(propObjs, complexProps) {\r\n var dest = {};\r\n var i;\r\n var name;\r\n var complexObjs;\r\n var j;\r\n var val;\r\n var props;\r\n if (complexProps) {\r\n for (i = 0; i < complexProps.length; i++) {\r\n name = complexProps[i];\r\n complexObjs = [];\r\n // collect the trailing object values, stopping when a non-object is discovered\r\n for (j = propObjs.length - 1; j >= 0; j--) {\r\n val = propObjs[j][name];\r\n if (typeof val === 'object') {\r\n complexObjs.unshift(val);\r\n }\r\n else if (val !== undefined) {\r\n dest[name] = val; // if there were no objects, this value will be used\r\n break;\r\n }\r\n }\r\n // if the trailing values were objects, use the merged value\r\n if (complexObjs.length) {\r\n dest[name] = mergeProps(complexObjs);\r\n }\r\n }\r\n }\r\n // copy values into the destination, going from last to first\r\n for (i = propObjs.length - 1; i >= 0; i--) {\r\n props = propObjs[i];\r\n for (name in props) {\r\n if (!(name in dest)) { // if already assigned by previous props or complex props, don't reassign\r\n dest[name] = props[name];\r\n }\r\n }\r\n }\r\n return dest;\r\n}\r\nexports.mergeProps = mergeProps;\r\nfunction copyOwnProps(src, dest) {\r\n for (var name_1 in src) {\r\n if (hasOwnProp(src, name_1)) {\r\n dest[name_1] = src[name_1];\r\n }\r\n }\r\n}\r\nexports.copyOwnProps = copyOwnProps;\r\nfunction hasOwnProp(obj, name) {\r\n return hasOwnPropMethod.call(obj, name);\r\n}\r\nexports.hasOwnProp = hasOwnProp;\r\nfunction applyAll(functions, thisObj, args) {\r\n if ($.isFunction(functions)) {\r\n functions = [functions];\r\n }\r\n if (functions) {\r\n var i = void 0;\r\n var ret = void 0;\r\n for (i = 0; i < functions.length; i++) {\r\n ret = functions[i].apply(thisObj, args) || ret;\r\n }\r\n return ret;\r\n }\r\n}\r\nexports.applyAll = applyAll;\r\nfunction removeMatching(array, testFunc) {\r\n var removeCnt = 0;\r\n var i = 0;\r\n while (i < array.length) {\r\n if (testFunc(array[i])) { // truthy value means *remove*\r\n array.splice(i, 1);\r\n removeCnt++;\r\n }\r\n else {\r\n i++;\r\n }\r\n }\r\n return removeCnt;\r\n}\r\nexports.removeMatching = removeMatching;\r\nfunction removeExact(array, exactVal) {\r\n var removeCnt = 0;\r\n var i = 0;\r\n while (i < array.length) {\r\n if (array[i] === exactVal) {\r\n array.splice(i, 1);\r\n removeCnt++;\r\n }\r\n else {\r\n i++;\r\n }\r\n }\r\n return removeCnt;\r\n}\r\nexports.removeExact = removeExact;\r\nfunction isArraysEqual(a0, a1) {\r\n var len = a0.length;\r\n var i;\r\n if (len == null || len !== a1.length) { // not array? or not same length?\r\n return false;\r\n }\r\n for (i = 0; i < len; i++) {\r\n if (a0[i] !== a1[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nexports.isArraysEqual = isArraysEqual;\r\nfunction firstDefined() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n for (var i = 0; i < args.length; i++) {\r\n if (args[i] !== undefined) {\r\n return args[i];\r\n }\r\n }\r\n}\r\nexports.firstDefined = firstDefined;\r\nfunction htmlEscape(s) {\r\n return (s + '').replace(/&/g, '&')\r\n .replace(//g, '>')\r\n .replace(/'/g, ''')\r\n .replace(/\"/g, '"')\r\n .replace(/\\n/g, '
');\r\n}\r\nexports.htmlEscape = htmlEscape;\r\nfunction stripHtmlEntities(text) {\r\n return text.replace(/&.*?;/g, '');\r\n}\r\nexports.stripHtmlEntities = stripHtmlEntities;\r\n// Given a hash of CSS properties, returns a string of CSS.\r\n// Uses property names as-is (no camel-case conversion). Will not make statements for null/undefined values.\r\nfunction cssToStr(cssProps) {\r\n var statements = [];\r\n $.each(cssProps, function (name, val) {\r\n if (val != null) {\r\n statements.push(name + ':' + val);\r\n }\r\n });\r\n return statements.join(';');\r\n}\r\nexports.cssToStr = cssToStr;\r\n// Given an object hash of HTML attribute names to values,\r\n// generates a string that can be injected between < > in HTML\r\nfunction attrsToStr(attrs) {\r\n var parts = [];\r\n $.each(attrs, function (name, val) {\r\n if (val != null) {\r\n parts.push(name + '=\"' + htmlEscape(val) + '\"');\r\n }\r\n });\r\n return parts.join(' ');\r\n}\r\nexports.attrsToStr = attrsToStr;\r\nfunction capitaliseFirstLetter(str) {\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n}\r\nexports.capitaliseFirstLetter = capitaliseFirstLetter;\r\nfunction compareNumbers(a, b) {\r\n return a - b;\r\n}\r\nexports.compareNumbers = compareNumbers;\r\nfunction isInt(n) {\r\n return n % 1 === 0;\r\n}\r\nexports.isInt = isInt;\r\n// Returns a method bound to the given object context.\r\n// Just like one of the jQuery.proxy signatures, but without the undesired behavior of treating the same method with\r\n// different contexts as identical when binding/unbinding events.\r\nfunction proxy(obj, methodName) {\r\n var method = obj[methodName];\r\n return function () {\r\n return method.apply(obj, arguments);\r\n };\r\n}\r\nexports.proxy = proxy;\r\n// Returns a function, that, as long as it continues to be invoked, will not\r\n// be triggered. The function will be called after it stops being called for\r\n// N milliseconds. If `immediate` is passed, trigger the function on the\r\n// leading edge, instead of the trailing.\r\n// https://github.com/jashkenas/underscore/blob/1.6.0/underscore.js#L714\r\nfunction debounce(func, wait, immediate) {\r\n if (immediate === void 0) { immediate = false; }\r\n var timeout;\r\n var args;\r\n var context;\r\n var timestamp;\r\n var result;\r\n var later = function () {\r\n var last = +new Date() - timestamp;\r\n if (last < wait) {\r\n timeout = setTimeout(later, wait - last);\r\n }\r\n else {\r\n timeout = null;\r\n if (!immediate) {\r\n result = func.apply(context, args);\r\n context = args = null;\r\n }\r\n }\r\n };\r\n return function () {\r\n context = this;\r\n args = arguments;\r\n timestamp = +new Date();\r\n var callNow = immediate && !timeout;\r\n if (!timeout) {\r\n timeout = setTimeout(later, wait);\r\n }\r\n if (callNow) {\r\n result = func.apply(context, args);\r\n context = args = null;\r\n }\r\n return result;\r\n };\r\n}\r\nexports.debounce = debounce;\r\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar UnzonedRange = /** @class */ (function () {\r\n function UnzonedRange(startInput, endInput) {\r\n // TODO: move these into footprint.\r\n // Especially, doesn't make sense for null startMs/endMs.\r\n this.isStart = true;\r\n this.isEnd = true;\r\n if (moment.isMoment(startInput)) {\r\n startInput = startInput.clone().stripZone();\r\n }\r\n if (moment.isMoment(endInput)) {\r\n endInput = endInput.clone().stripZone();\r\n }\r\n if (startInput) {\r\n this.startMs = startInput.valueOf();\r\n }\r\n if (endInput) {\r\n this.endMs = endInput.valueOf();\r\n }\r\n }\r\n /*\r\n SIDEEFFECT: will mutate eventRanges.\r\n Will return a new array result.\r\n Only works for non-open-ended ranges.\r\n */\r\n UnzonedRange.invertRanges = function (ranges, constraintRange) {\r\n var invertedRanges = [];\r\n var startMs = constraintRange.startMs; // the end of the previous range. the start of the new range\r\n var i;\r\n var dateRange;\r\n // ranges need to be in order. required for our date-walking algorithm\r\n ranges.sort(compareUnzonedRanges);\r\n for (i = 0; i < ranges.length; i++) {\r\n dateRange = ranges[i];\r\n // add the span of time before the event (if there is any)\r\n if (dateRange.startMs > startMs) { // compare millisecond time (skip any ambig logic)\r\n invertedRanges.push(new UnzonedRange(startMs, dateRange.startMs));\r\n }\r\n if (dateRange.endMs > startMs) {\r\n startMs = dateRange.endMs;\r\n }\r\n }\r\n // add the span of time after the last event (if there is any)\r\n if (startMs < constraintRange.endMs) { // compare millisecond time (skip any ambig logic)\r\n invertedRanges.push(new UnzonedRange(startMs, constraintRange.endMs));\r\n }\r\n return invertedRanges;\r\n };\r\n UnzonedRange.prototype.intersect = function (otherRange) {\r\n var startMs = this.startMs;\r\n var endMs = this.endMs;\r\n var newRange = null;\r\n if (otherRange.startMs != null) {\r\n if (startMs == null) {\r\n startMs = otherRange.startMs;\r\n }\r\n else {\r\n startMs = Math.max(startMs, otherRange.startMs);\r\n }\r\n }\r\n if (otherRange.endMs != null) {\r\n if (endMs == null) {\r\n endMs = otherRange.endMs;\r\n }\r\n else {\r\n endMs = Math.min(endMs, otherRange.endMs);\r\n }\r\n }\r\n if (startMs == null || endMs == null || startMs < endMs) {\r\n newRange = new UnzonedRange(startMs, endMs);\r\n newRange.isStart = this.isStart && startMs === this.startMs;\r\n newRange.isEnd = this.isEnd && endMs === this.endMs;\r\n }\r\n return newRange;\r\n };\r\n UnzonedRange.prototype.intersectsWith = function (otherRange) {\r\n return (this.endMs == null || otherRange.startMs == null || this.endMs > otherRange.startMs) &&\r\n (this.startMs == null || otherRange.endMs == null || this.startMs < otherRange.endMs);\r\n };\r\n UnzonedRange.prototype.containsRange = function (innerRange) {\r\n return (this.startMs == null || (innerRange.startMs != null && innerRange.startMs >= this.startMs)) &&\r\n (this.endMs == null || (innerRange.endMs != null && innerRange.endMs <= this.endMs));\r\n };\r\n // `date` can be a moment, a Date, or a millisecond time.\r\n UnzonedRange.prototype.containsDate = function (date) {\r\n var ms = date.valueOf();\r\n return (this.startMs == null || ms >= this.startMs) &&\r\n (this.endMs == null || ms < this.endMs);\r\n };\r\n // If the given date is not within the given range, move it inside.\r\n // (If it's past the end, make it one millisecond before the end).\r\n // `date` can be a moment, a Date, or a millisecond time.\r\n // Returns a MS-time.\r\n UnzonedRange.prototype.constrainDate = function (date) {\r\n var ms = date.valueOf();\r\n if (this.startMs != null && ms < this.startMs) {\r\n ms = this.startMs;\r\n }\r\n if (this.endMs != null && ms >= this.endMs) {\r\n ms = this.endMs - 1;\r\n }\r\n return ms;\r\n };\r\n UnzonedRange.prototype.equals = function (otherRange) {\r\n return this.startMs === otherRange.startMs && this.endMs === otherRange.endMs;\r\n };\r\n UnzonedRange.prototype.clone = function () {\r\n var range = new UnzonedRange(this.startMs, this.endMs);\r\n range.isStart = this.isStart;\r\n range.isEnd = this.isEnd;\r\n return range;\r\n };\r\n // Returns an ambig-zoned moment from startMs.\r\n // BEWARE: returned moment is not localized.\r\n // Formatting and start-of-week will be default.\r\n UnzonedRange.prototype.getStart = function () {\r\n if (this.startMs != null) {\r\n return moment_ext_1.default.utc(this.startMs).stripZone();\r\n }\r\n return null;\r\n };\r\n // Returns an ambig-zoned moment from startMs.\r\n // BEWARE: returned moment is not localized.\r\n // Formatting and start-of-week will be default.\r\n UnzonedRange.prototype.getEnd = function () {\r\n if (this.endMs != null) {\r\n return moment_ext_1.default.utc(this.endMs).stripZone();\r\n }\r\n return null;\r\n };\r\n UnzonedRange.prototype.as = function (unit) {\r\n return moment.utc(this.endMs).diff(moment.utc(this.startMs), unit, true);\r\n };\r\n return UnzonedRange;\r\n}());\r\nexports.default = UnzonedRange;\r\n/*\r\nOnly works for non-open-ended ranges.\r\n*/\r\nfunction compareUnzonedRanges(range1, range2) {\r\n return range1.startMs - range2.startMs; // earlier ranges go first\r\n}\r\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar ParsableModelMixin_1 = __webpack_require__(52);\r\nvar Class_1 = __webpack_require__(35);\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nvar EventSource = /** @class */ (function (_super) {\r\n tslib_1.__extends(EventSource, _super);\r\n // can we do away with calendar? at least for the abstract?\r\n // useful for buildEventDef\r\n function EventSource(calendar) {\r\n var _this = _super.call(this) || this;\r\n _this.calendar = calendar;\r\n _this.className = [];\r\n _this.uid = String(EventSource.uuid++);\r\n return _this;\r\n }\r\n /*\r\n rawInput can be any data type!\r\n */\r\n EventSource.parse = function (rawInput, calendar) {\r\n var source = new this(calendar);\r\n if (typeof rawInput === 'object') {\r\n if (source.applyProps(rawInput)) {\r\n return source;\r\n }\r\n }\r\n return false;\r\n };\r\n EventSource.normalizeId = function (id) {\r\n if (id) {\r\n return String(id);\r\n }\r\n return null;\r\n };\r\n EventSource.prototype.fetch = function (start, end, timezone) {\r\n // subclasses must implement. must return a promise.\r\n };\r\n EventSource.prototype.removeEventDefsById = function (eventDefId) {\r\n // optional for subclasses to implement\r\n };\r\n EventSource.prototype.removeAllEventDefs = function () {\r\n // optional for subclasses to implement\r\n };\r\n /*\r\n For compairing/matching\r\n */\r\n EventSource.prototype.getPrimitive = function (otherSource) {\r\n // subclasses must implement\r\n };\r\n EventSource.prototype.parseEventDefs = function (rawEventDefs) {\r\n var i;\r\n var eventDef;\r\n var eventDefs = [];\r\n for (i = 0; i < rawEventDefs.length; i++) {\r\n eventDef = this.parseEventDef(rawEventDefs[i]);\r\n if (eventDef) {\r\n eventDefs.push(eventDef);\r\n }\r\n }\r\n return eventDefs;\r\n };\r\n EventSource.prototype.parseEventDef = function (rawInput) {\r\n var calendarTransform = this.calendar.opt('eventDataTransform');\r\n var sourceTransform = this.eventDataTransform;\r\n if (calendarTransform) {\r\n rawInput = calendarTransform(rawInput, this.calendar);\r\n }\r\n if (sourceTransform) {\r\n rawInput = sourceTransform(rawInput, this.calendar);\r\n }\r\n return EventDefParser_1.default.parse(rawInput, this);\r\n };\r\n EventSource.prototype.applyManualStandardProps = function (rawProps) {\r\n if (rawProps.id != null) {\r\n this.id = EventSource.normalizeId(rawProps.id);\r\n }\r\n // TODO: converge with EventDef\r\n if ($.isArray(rawProps.className)) {\r\n this.className = rawProps.className;\r\n }\r\n else if (typeof rawProps.className === 'string') {\r\n this.className = rawProps.className.split(/\\s+/);\r\n }\r\n return true;\r\n };\r\n EventSource.uuid = 0;\r\n EventSource.defineStandardProps = ParsableModelMixin_1.default.defineStandardProps;\r\n EventSource.copyVerbatimStandardProps = ParsableModelMixin_1.default.copyVerbatimStandardProps;\r\n return EventSource;\r\n}(Class_1.default));\r\nexports.default = EventSource;\r\nParsableModelMixin_1.default.mixInto(EventSource);\r\n// Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nEventSource.defineStandardProps({\r\n // manually process...\r\n id: false,\r\n className: false,\r\n // automatically transfer...\r\n color: true,\r\n backgroundColor: true,\r\n borderColor: true,\r\n textColor: true,\r\n editable: true,\r\n startEditable: true,\r\n durationEditable: true,\r\n rendering: true,\r\n overlap: true,\r\n constraint: true,\r\n allDayDefault: true,\r\n eventDataTransform: true\r\n});\r\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\r\nUtility methods for easily listening to events on another object,\r\nand more importantly, easily unlistening from them.\r\n\nUSAGE:\r\n import { default as ListenerMixin, ListenerInterface } from './ListenerMixin'\r\nin class:\r\n listenTo: ListenerInterface['listenTo']\r\n stopListeningTo: ListenerInterface['stopListeningTo']\r\nafter class:\r\n ListenerMixin.mixInto(TheClass)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar guid = 0;\r\nvar ListenerMixin = /** @class */ (function (_super) {\r\n tslib_1.__extends(ListenerMixin, _super);\r\n function ListenerMixin() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n /*\r\n Given an `other` object that has on/off methods, bind the given `callback` to an event by the given name.\r\n The `callback` will be called with the `this` context of the object that .listenTo is being called on.\r\n Can be called:\r\n .listenTo(other, eventName, callback)\r\n OR\r\n .listenTo(other, {\r\n eventName1: callback1,\r\n eventName2: callback2\r\n })\r\n */\r\n ListenerMixin.prototype.listenTo = function (other, arg, callback) {\r\n if (typeof arg === 'object') { // given dictionary of callbacks\r\n for (var eventName in arg) {\r\n if (arg.hasOwnProperty(eventName)) {\r\n this.listenTo(other, eventName, arg[eventName]);\r\n }\r\n }\r\n }\r\n else if (typeof arg === 'string') {\r\n other.on(arg + '.' + this.getListenerNamespace(), // use event namespacing to identify this object\r\n $.proxy(callback, this) // always use `this` context\r\n // the usually-undesired jQuery guid behavior doesn't matter,\r\n // because we always unbind via namespace\r\n );\r\n }\r\n };\r\n /*\r\n Causes the current object to stop listening to events on the `other` object.\r\n `eventName` is optional. If omitted, will stop listening to ALL events on `other`.\r\n */\r\n ListenerMixin.prototype.stopListeningTo = function (other, eventName) {\r\n other.off((eventName || '') + '.' + this.getListenerNamespace());\r\n };\r\n /*\r\n Returns a string, unique to this object, to be used for event namespacing\r\n */\r\n ListenerMixin.prototype.getListenerNamespace = function () {\r\n if (this.listenerId == null) {\r\n this.listenerId = guid++;\r\n }\r\n return '_listener' + this.listenerId;\r\n };\r\n return ListenerMixin;\r\n}(Mixin_1.default));\r\nexports.default = ListenerMixin;\r\n\n\n/***/ }),\n/* 8 */,\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar EventDef_1 = __webpack_require__(37);\r\nvar EventInstance_1 = __webpack_require__(53);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar SingleEventDef = /** @class */ (function (_super) {\r\n tslib_1.__extends(SingleEventDef, _super);\r\n function SingleEventDef() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n /*\r\n Will receive start/end params, but will be ignored.\r\n */\r\n SingleEventDef.prototype.buildInstances = function () {\r\n return [this.buildInstance()];\r\n };\r\n SingleEventDef.prototype.buildInstance = function () {\r\n return new EventInstance_1.default(this, // definition\r\n this.dateProfile);\r\n };\r\n SingleEventDef.prototype.isAllDay = function () {\r\n return this.dateProfile.isAllDay();\r\n };\r\n SingleEventDef.prototype.clone = function () {\r\n var def = _super.prototype.clone.call(this);\r\n def.dateProfile = this.dateProfile;\r\n return def;\r\n };\r\n SingleEventDef.prototype.rezone = function () {\r\n var calendar = this.source.calendar;\r\n var dateProfile = this.dateProfile;\r\n this.dateProfile = new EventDateProfile_1.default(calendar.moment(dateProfile.start), dateProfile.end ? calendar.moment(dateProfile.end) : null, calendar);\r\n };\r\n /*\r\n NOTE: if super-method fails, should still attempt to apply\r\n */\r\n SingleEventDef.prototype.applyManualStandardProps = function (rawProps) {\r\n var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);\r\n var dateProfile = EventDateProfile_1.default.parse(rawProps, this.source); // returns null on failure\r\n if (dateProfile) {\r\n this.dateProfile = dateProfile;\r\n // make sure `date` shows up in the legacy event objects as-is\r\n if (rawProps.date != null) {\r\n this.miscProps.date = rawProps.date;\r\n }\r\n return superSuccess;\r\n }\r\n else {\r\n return false;\r\n }\r\n };\r\n return SingleEventDef;\r\n}(EventDef_1.default));\r\nexports.default = SingleEventDef;\r\n// Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nSingleEventDef.defineStandardProps({\r\n start: false,\r\n date: false,\r\n end: false,\r\n allDay: false\r\n});\r\n\n\n/***/ }),\n/* 10 */,\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ambigDateOfMonthRegex = /^\\s*\\d{4}-\\d\\d$/;\r\nvar ambigTimeOrZoneRegex = /^\\s*\\d{4}-(?:(\\d\\d-\\d\\d)|(W\\d\\d$)|(W\\d\\d-\\d)|(\\d\\d\\d))((T| )(\\d\\d(:\\d\\d(:\\d\\d(\\.\\d+)?)?)?)?)?$/;\r\nvar newMomentProto = moment.fn; // where we will attach our new methods\r\nexports.newMomentProto = newMomentProto;\r\nvar oldMomentProto = $.extend({}, newMomentProto); // copy of original moment methods\r\nexports.oldMomentProto = oldMomentProto;\r\n// tell momentjs to transfer these properties upon clone\r\nvar momentProperties = moment.momentProperties;\r\nmomentProperties.push('_fullCalendar');\r\nmomentProperties.push('_ambigTime');\r\nmomentProperties.push('_ambigZone');\r\n/*\r\nCall this if you want Moment's original format method to be used\r\n*/\r\nfunction oldMomentFormat(mom, formatStr) {\r\n return oldMomentProto.format.call(mom, formatStr); // oldMomentProto defined in moment-ext.js\r\n}\r\nexports.oldMomentFormat = oldMomentFormat;\r\n// Creating\r\n// -------------------------------------------------------------------------------------------------\r\n// Creates a new moment, similar to the vanilla moment(...) constructor, but with\r\n// extra features (ambiguous time, enhanced formatting). When given an existing moment,\r\n// it will function as a clone (and retain the zone of the moment). Anything else will\r\n// result in a moment in the local zone.\r\nvar momentExt = function () {\r\n return makeMoment(arguments);\r\n};\r\nexports.default = momentExt;\r\n// Sames as momentExt, but forces the resulting moment to be in the UTC timezone.\r\nmomentExt.utc = function () {\r\n var mom = makeMoment(arguments, true);\r\n // Force it into UTC because makeMoment doesn't guarantee it\r\n // (if given a pre-existing moment for example)\r\n if (mom.hasTime()) { // don't give ambiguously-timed moments a UTC zone\r\n mom.utc();\r\n }\r\n return mom;\r\n};\r\n// Same as momentExt, but when given an ISO8601 string, the timezone offset is preserved.\r\n// ISO8601 strings with no timezone offset will become ambiguously zoned.\r\nmomentExt.parseZone = function () {\r\n return makeMoment(arguments, true, true);\r\n};\r\n// Builds an enhanced moment from args. When given an existing moment, it clones. When given a\r\n// native Date, or called with no arguments (the current time), the resulting moment will be local.\r\n// Anything else needs to be \"parsed\" (a string or an array), and will be affected by:\r\n// parseAsUTC - if there is no zone information, should we parse the input in UTC?\r\n// parseZone - if there is zone information, should we force the zone of the moment?\r\nfunction makeMoment(args, parseAsUTC, parseZone) {\r\n if (parseAsUTC === void 0) { parseAsUTC = false; }\r\n if (parseZone === void 0) { parseZone = false; }\r\n var input = args[0];\r\n var isSingleString = args.length === 1 && typeof input === 'string';\r\n var isAmbigTime;\r\n var isAmbigZone;\r\n var ambigMatch;\r\n var mom;\r\n if (moment.isMoment(input) || util_1.isNativeDate(input) || input === undefined) {\r\n mom = moment.apply(null, args);\r\n }\r\n else { // \"parsing\" is required\r\n isAmbigTime = false;\r\n isAmbigZone = false;\r\n if (isSingleString) {\r\n if (ambigDateOfMonthRegex.test(input)) {\r\n // accept strings like '2014-05', but convert to the first of the month\r\n input += '-01';\r\n args = [input]; // for when we pass it on to moment's constructor\r\n isAmbigTime = true;\r\n isAmbigZone = true;\r\n }\r\n else if ((ambigMatch = ambigTimeOrZoneRegex.exec(input))) {\r\n isAmbigTime = !ambigMatch[5]; // no time part?\r\n isAmbigZone = true;\r\n }\r\n }\r\n else if ($.isArray(input)) {\r\n // arrays have no timezone information, so assume ambiguous zone\r\n isAmbigZone = true;\r\n }\r\n // otherwise, probably a string with a format\r\n if (parseAsUTC || isAmbigTime) {\r\n mom = moment.utc.apply(moment, args);\r\n }\r\n else {\r\n mom = moment.apply(null, args);\r\n }\r\n if (isAmbigTime) {\r\n mom._ambigTime = true;\r\n mom._ambigZone = true; // ambiguous time always means ambiguous zone\r\n }\r\n else if (parseZone) { // let's record the inputted zone somehow\r\n if (isAmbigZone) {\r\n mom._ambigZone = true;\r\n }\r\n else if (isSingleString) {\r\n mom.utcOffset(input); // if not a valid zone, will assign UTC\r\n }\r\n }\r\n }\r\n mom._fullCalendar = true; // flag for extended functionality\r\n return mom;\r\n}\r\n// Week Number\r\n// -------------------------------------------------------------------------------------------------\r\n// Returns the week number, considering the locale's custom week number calcuation\r\n// `weeks` is an alias for `week`\r\nnewMomentProto.week = newMomentProto.weeks = function (input) {\r\n var weekCalc = this._locale._fullCalendar_weekCalc;\r\n if (input == null && typeof weekCalc === 'function') { // custom function only works for getter\r\n return weekCalc(this);\r\n }\r\n else if (weekCalc === 'ISO') {\r\n return oldMomentProto.isoWeek.apply(this, arguments); // ISO getter/setter\r\n }\r\n return oldMomentProto.week.apply(this, arguments); // local getter/setter\r\n};\r\n// Time-of-day\r\n// -------------------------------------------------------------------------------------------------\r\n// GETTER\r\n// Returns a Duration with the hours/minutes/seconds/ms values of the moment.\r\n// If the moment has an ambiguous time, a duration of 00:00 will be returned.\r\n//\r\n// SETTER\r\n// You can supply a Duration, a Moment, or a Duration-like argument.\r\n// When setting the time, and the moment has an ambiguous time, it then becomes unambiguous.\r\nnewMomentProto.time = function (time) {\r\n // Fallback to the original method (if there is one) if this moment wasn't created via FullCalendar.\r\n // `time` is a generic enough method name where this precaution is necessary to avoid collisions w/ other plugins.\r\n if (!this._fullCalendar) {\r\n return oldMomentProto.time.apply(this, arguments);\r\n }\r\n if (time == null) { // getter\r\n return moment.duration({\r\n hours: this.hours(),\r\n minutes: this.minutes(),\r\n seconds: this.seconds(),\r\n milliseconds: this.milliseconds()\r\n });\r\n }\r\n else { // setter\r\n this._ambigTime = false; // mark that the moment now has a time\r\n if (!moment.isDuration(time) && !moment.isMoment(time)) {\r\n time = moment.duration(time);\r\n }\r\n // The day value should cause overflow (so 24 hours becomes 00:00:00 of next day).\r\n // Only for Duration times, not Moment times.\r\n var dayHours = 0;\r\n if (moment.isDuration(time)) {\r\n dayHours = Math.floor(time.asDays()) * 24;\r\n }\r\n // We need to set the individual fields.\r\n // Can't use startOf('day') then add duration. In case of DST at start of day.\r\n return this.hours(dayHours + time.hours())\r\n .minutes(time.minutes())\r\n .seconds(time.seconds())\r\n .milliseconds(time.milliseconds());\r\n }\r\n};\r\n// Converts the moment to UTC, stripping out its time-of-day and timezone offset,\r\n// but preserving its YMD. A moment with a stripped time will display no time\r\n// nor timezone offset when .format() is called.\r\nnewMomentProto.stripTime = function () {\r\n if (!this._ambigTime) {\r\n this.utc(true); // keepLocalTime=true (for keeping *date* value)\r\n // set time to zero\r\n this.set({\r\n hours: 0,\r\n minutes: 0,\r\n seconds: 0,\r\n ms: 0\r\n });\r\n // Mark the time as ambiguous. This needs to happen after the .utc() call, which might call .utcOffset(),\r\n // which clears all ambig flags.\r\n this._ambigTime = true;\r\n this._ambigZone = true; // if ambiguous time, also ambiguous timezone offset\r\n }\r\n return this; // for chaining\r\n};\r\n// Returns if the moment has a non-ambiguous time (boolean)\r\nnewMomentProto.hasTime = function () {\r\n return !this._ambigTime;\r\n};\r\n// Timezone\r\n// -------------------------------------------------------------------------------------------------\r\n// Converts the moment to UTC, stripping out its timezone offset, but preserving its\r\n// YMD and time-of-day. A moment with a stripped timezone offset will display no\r\n// timezone offset when .format() is called.\r\nnewMomentProto.stripZone = function () {\r\n var wasAmbigTime;\r\n if (!this._ambigZone) {\r\n wasAmbigTime = this._ambigTime;\r\n this.utc(true); // keepLocalTime=true (for keeping date and time values)\r\n // the above call to .utc()/.utcOffset() unfortunately might clear the ambig flags, so restore\r\n this._ambigTime = wasAmbigTime || false;\r\n // Mark the zone as ambiguous. This needs to happen after the .utc() call, which might call .utcOffset(),\r\n // which clears the ambig flags.\r\n this._ambigZone = true;\r\n }\r\n return this; // for chaining\r\n};\r\n// Returns of the moment has a non-ambiguous timezone offset (boolean)\r\nnewMomentProto.hasZone = function () {\r\n return !this._ambigZone;\r\n};\r\n// implicitly marks a zone\r\nnewMomentProto.local = function (keepLocalTime) {\r\n // for when converting from ambiguously-zoned to local,\r\n // keep the time values when converting from UTC -> local\r\n oldMomentProto.local.call(this, this._ambigZone || keepLocalTime);\r\n // ensure non-ambiguous\r\n // this probably already happened via local() -> utcOffset(), but don't rely on Moment's internals\r\n this._ambigTime = false;\r\n this._ambigZone = false;\r\n return this; // for chaining\r\n};\r\n// implicitly marks a zone\r\nnewMomentProto.utc = function (keepLocalTime) {\r\n oldMomentProto.utc.call(this, keepLocalTime);\r\n // ensure non-ambiguous\r\n // this probably already happened via utc() -> utcOffset(), but don't rely on Moment's internals\r\n this._ambigTime = false;\r\n this._ambigZone = false;\r\n return this;\r\n};\r\n// implicitly marks a zone (will probably get called upon .utc() and .local())\r\nnewMomentProto.utcOffset = function (tzo) {\r\n if (tzo != null) { // setter\r\n // these assignments needs to happen before the original zone method is called.\r\n // I forget why, something to do with a browser crash.\r\n this._ambigTime = false;\r\n this._ambigZone = false;\r\n }\r\n return oldMomentProto.utcOffset.apply(this, arguments);\r\n};\r\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*\r\nMeant to be immutable\r\n*/\r\nvar ComponentFootprint = /** @class */ (function () {\r\n function ComponentFootprint(unzonedRange, isAllDay) {\r\n this.isAllDay = false; // component can choose to ignore this\r\n this.unzonedRange = unzonedRange;\r\n this.isAllDay = isAllDay;\r\n }\r\n /*\r\n Only works for non-open-ended ranges.\r\n */\r\n ComponentFootprint.prototype.toLegacy = function (calendar) {\r\n return {\r\n start: calendar.msToMoment(this.unzonedRange.startMs, this.isAllDay),\r\n end: calendar.msToMoment(this.unzonedRange.endMs, this.isAllDay)\r\n };\r\n };\r\n return ComponentFootprint;\r\n}());\r\nexports.default = ComponentFootprint;\r\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\r\nUSAGE:\r\n import { default as EmitterMixin, EmitterInterface } from './EmitterMixin'\r\nin class:\r\n on: EmitterInterface['on']\r\n one: EmitterInterface['one']\r\n off: EmitterInterface['off']\r\n trigger: EmitterInterface['trigger']\r\n triggerWith: EmitterInterface['triggerWith']\r\n hasHandlers: EmitterInterface['hasHandlers']\r\nafter class:\r\n EmitterMixin.mixInto(TheClass)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar EmitterMixin = /** @class */ (function (_super) {\r\n tslib_1.__extends(EmitterMixin, _super);\r\n function EmitterMixin() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n // jQuery-ification via $(this) allows a non-DOM object to have\r\n // the same event handling capabilities (including namespaces).\r\n EmitterMixin.prototype.on = function (types, handler) {\r\n $(this).on(types, this._prepareIntercept(handler));\r\n return this; // for chaining\r\n };\r\n EmitterMixin.prototype.one = function (types, handler) {\r\n $(this).one(types, this._prepareIntercept(handler));\r\n return this; // for chaining\r\n };\r\n EmitterMixin.prototype._prepareIntercept = function (handler) {\r\n // handlers are always called with an \"event\" object as their first param.\r\n // sneak the `this` context and arguments into the extra parameter object\r\n // and forward them on to the original handler.\r\n var intercept = function (ev, extra) {\r\n return handler.apply(extra.context || this, extra.args || []);\r\n };\r\n // mimick jQuery's internal \"proxy\" system (risky, I know)\r\n // causing all functions with the same .guid to appear to be the same.\r\n // https://github.com/jquery/jquery/blob/2.2.4/src/core.js#L448\r\n // this is needed for calling .off with the original non-intercept handler.\r\n if (!handler.guid) {\r\n handler.guid = $.guid++;\r\n }\r\n intercept.guid = handler.guid;\r\n return intercept;\r\n };\r\n EmitterMixin.prototype.off = function (types, handler) {\r\n $(this).off(types, handler);\r\n return this; // for chaining\r\n };\r\n EmitterMixin.prototype.trigger = function (types) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n // pass in \"extra\" info to the intercept\r\n $(this).triggerHandler(types, { args: args });\r\n return this; // for chaining\r\n };\r\n EmitterMixin.prototype.triggerWith = function (types, context, args) {\r\n // `triggerHandler` is less reliant on the DOM compared to `trigger`.\r\n // pass in \"extra\" info to the intercept.\r\n $(this).triggerHandler(types, { context: context, args: args });\r\n return this; // for chaining\r\n };\r\n EmitterMixin.prototype.hasHandlers = function (type) {\r\n var hash = $._data(this, 'events'); // http://blog.jquery.com/2012/08/09/jquery-1-8-released/\r\n return hash && hash[type] && hash[type].length > 0;\r\n };\r\n return EmitterMixin;\r\n}(Mixin_1.default));\r\nexports.default = EmitterMixin;\r\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Interaction = /** @class */ (function () {\r\n function Interaction(component) {\r\n this.view = component._getView();\r\n this.component = component;\r\n }\r\n Interaction.prototype.opt = function (name) {\r\n return this.view.opt(name);\r\n };\r\n Interaction.prototype.end = function () {\r\n // subclasses can implement\r\n };\r\n return Interaction;\r\n}());\r\nexports.default = Interaction;\r\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Mixin = /** @class */ (function () {\r\n function Mixin() {\r\n }\r\n Mixin.mixInto = function (destClass) {\r\n var _this = this;\r\n Object.getOwnPropertyNames(this.prototype).forEach(function (name) {\r\n if (!destClass.prototype[name]) { // if destination class doesn't already define it\r\n destClass.prototype[name] = _this.prototype[name];\r\n }\r\n });\r\n };\r\n /*\r\n will override existing methods\r\n TODO: remove! not used anymore\r\n */\r\n Mixin.mixOver = function (destClass) {\r\n var _this = this;\r\n Object.getOwnPropertyNames(this.prototype).forEach(function (name) {\r\n destClass.prototype[name] = _this.prototype[name];\r\n });\r\n };\r\n return Mixin;\r\n}());\r\nexports.default = Mixin;\r\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\n/*\r\nMeant to be immutable\r\n*/\r\nvar EventDateProfile = /** @class */ (function () {\r\n function EventDateProfile(start, end, calendar) {\r\n this.start = start;\r\n this.end = end || null;\r\n this.unzonedRange = this.buildUnzonedRange(calendar);\r\n }\r\n /*\r\n Needs an EventSource object\r\n */\r\n EventDateProfile.parse = function (rawProps, source) {\r\n var startInput = rawProps.start || rawProps.date;\r\n var endInput = rawProps.end;\r\n if (!startInput) {\r\n return false;\r\n }\r\n var calendar = source.calendar;\r\n var start = calendar.moment(startInput);\r\n var end = endInput ? calendar.moment(endInput) : null;\r\n var forcedAllDay = rawProps.allDay;\r\n var forceEventDuration = calendar.opt('forceEventDuration');\r\n if (!start.isValid()) {\r\n return false;\r\n }\r\n if (forcedAllDay == null) {\r\n forcedAllDay = source.allDayDefault;\r\n if (forcedAllDay == null) {\r\n forcedAllDay = calendar.opt('allDayDefault');\r\n }\r\n }\r\n if (forcedAllDay === true) {\r\n start.stripTime();\r\n if (end) {\r\n end.stripTime();\r\n }\r\n }\r\n else if (forcedAllDay === false) {\r\n if (!start.hasTime()) {\r\n start.time(0);\r\n }\r\n if (end && !end.hasTime()) {\r\n end.time(0);\r\n }\r\n }\r\n if (end && (!end.isValid() || !end.isAfter(start))) {\r\n end = null;\r\n }\r\n if (!end && forceEventDuration) {\r\n end = calendar.getDefaultEventEnd(!start.hasTime(), start);\r\n }\r\n return new EventDateProfile(start, end, calendar);\r\n };\r\n EventDateProfile.isStandardProp = function (propName) {\r\n return propName === 'start' || propName === 'date' || propName === 'end' || propName === 'allDay';\r\n };\r\n EventDateProfile.prototype.isAllDay = function () {\r\n return !(this.start.hasTime() || (this.end && this.end.hasTime()));\r\n };\r\n /*\r\n Needs a Calendar object\r\n */\r\n EventDateProfile.prototype.buildUnzonedRange = function (calendar) {\r\n var startMs = this.start.clone().stripZone().valueOf();\r\n var endMs = this.getEnd(calendar).stripZone().valueOf();\r\n return new UnzonedRange_1.default(startMs, endMs);\r\n };\r\n /*\r\n Needs a Calendar object\r\n */\r\n EventDateProfile.prototype.getEnd = function (calendar) {\r\n return this.end ?\r\n this.end.clone() :\r\n // derive the end from the start and allDay. compute allDay if necessary\r\n calendar.getDefaultEventEnd(this.isAllDay(), this.start);\r\n };\r\n return EventDateProfile;\r\n}());\r\nexports.default = EventDateProfile;\r\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar DragListener_1 = __webpack_require__(59);\r\n/* Tracks mouse movements over a component and raises events about which hit the mouse is over.\r\n------------------------------------------------------------------------------------------------------------------------\r\noptions:\r\n- subjectEl\r\n- subjectCenter\r\n*/\r\nvar HitDragListener = /** @class */ (function (_super) {\r\n tslib_1.__extends(HitDragListener, _super);\r\n function HitDragListener(component, options) {\r\n var _this = _super.call(this, options) || this;\r\n _this.component = component;\r\n return _this;\r\n }\r\n // Called when drag listening starts (but a real drag has not necessarily began).\r\n // ev might be undefined if dragging was started manually.\r\n HitDragListener.prototype.handleInteractionStart = function (ev) {\r\n var subjectEl = this.subjectEl;\r\n var subjectRect;\r\n var origPoint;\r\n var point;\r\n this.component.hitsNeeded();\r\n this.computeScrollBounds(); // for autoscroll\r\n if (ev) {\r\n origPoint = { left: util_1.getEvX(ev), top: util_1.getEvY(ev) };\r\n point = origPoint;\r\n // constrain the point to bounds of the element being dragged\r\n if (subjectEl) {\r\n subjectRect = util_1.getOuterRect(subjectEl); // used for centering as well\r\n point = util_1.constrainPoint(point, subjectRect);\r\n }\r\n this.origHit = this.queryHit(point.left, point.top);\r\n // treat the center of the subject as the collision point?\r\n if (subjectEl && this.options.subjectCenter) {\r\n // only consider the area the subject overlaps the hit. best for large subjects.\r\n // TODO: skip this if hit didn't supply left/right/top/bottom\r\n if (this.origHit) {\r\n subjectRect = util_1.intersectRects(this.origHit, subjectRect) ||\r\n subjectRect; // in case there is no intersection\r\n }\r\n point = util_1.getRectCenter(subjectRect);\r\n }\r\n this.coordAdjust = util_1.diffPoints(point, origPoint); // point - origPoint\r\n }\r\n else {\r\n this.origHit = null;\r\n this.coordAdjust = null;\r\n }\r\n // call the super-method. do it after origHit has been computed\r\n _super.prototype.handleInteractionStart.call(this, ev);\r\n };\r\n // Called when the actual drag has started\r\n HitDragListener.prototype.handleDragStart = function (ev) {\r\n var hit;\r\n _super.prototype.handleDragStart.call(this, ev);\r\n // might be different from this.origHit if the min-distance is large\r\n hit = this.queryHit(util_1.getEvX(ev), util_1.getEvY(ev));\r\n // report the initial hit the mouse is over\r\n // especially important if no min-distance and drag starts immediately\r\n if (hit) {\r\n this.handleHitOver(hit);\r\n }\r\n };\r\n // Called when the drag moves\r\n HitDragListener.prototype.handleDrag = function (dx, dy, ev) {\r\n var hit;\r\n _super.prototype.handleDrag.call(this, dx, dy, ev);\r\n hit = this.queryHit(util_1.getEvX(ev), util_1.getEvY(ev));\r\n if (!isHitsEqual(hit, this.hit)) { // a different hit than before?\r\n if (this.hit) {\r\n this.handleHitOut();\r\n }\r\n if (hit) {\r\n this.handleHitOver(hit);\r\n }\r\n }\r\n };\r\n // Called when dragging has been stopped\r\n HitDragListener.prototype.handleDragEnd = function (ev) {\r\n this.handleHitDone();\r\n _super.prototype.handleDragEnd.call(this, ev);\r\n };\r\n // Called when a the mouse has just moved over a new hit\r\n HitDragListener.prototype.handleHitOver = function (hit) {\r\n var isOrig = isHitsEqual(hit, this.origHit);\r\n this.hit = hit;\r\n this.trigger('hitOver', this.hit, isOrig, this.origHit);\r\n };\r\n // Called when the mouse has just moved out of a hit\r\n HitDragListener.prototype.handleHitOut = function () {\r\n if (this.hit) {\r\n this.trigger('hitOut', this.hit);\r\n this.handleHitDone();\r\n this.hit = null;\r\n }\r\n };\r\n // Called after a hitOut. Also called before a dragStop\r\n HitDragListener.prototype.handleHitDone = function () {\r\n if (this.hit) {\r\n this.trigger('hitDone', this.hit);\r\n }\r\n };\r\n // Called when the interaction ends, whether there was a real drag or not\r\n HitDragListener.prototype.handleInteractionEnd = function (ev, isCancelled) {\r\n _super.prototype.handleInteractionEnd.call(this, ev, isCancelled);\r\n this.origHit = null;\r\n this.hit = null;\r\n this.component.hitsNotNeeded();\r\n };\r\n // Called when scrolling has stopped, whether through auto scroll, or the user scrolling\r\n HitDragListener.prototype.handleScrollEnd = function () {\r\n _super.prototype.handleScrollEnd.call(this);\r\n // hits' absolute positions will be in new places after a user's scroll.\r\n // HACK for recomputing.\r\n if (this.isDragging) {\r\n this.component.releaseHits();\r\n this.component.prepareHits();\r\n }\r\n };\r\n // Gets the hit underneath the coordinates for the given mouse event\r\n HitDragListener.prototype.queryHit = function (left, top) {\r\n if (this.coordAdjust) {\r\n left += this.coordAdjust.left;\r\n top += this.coordAdjust.top;\r\n }\r\n return this.component.queryHit(left, top);\r\n };\r\n return HitDragListener;\r\n}(DragListener_1.default));\r\nexports.default = HitDragListener;\r\n// Returns `true` if the hits are identically equal. `false` otherwise. Must be from the same component.\r\n// Two null values will be considered equal, as two \"out of the component\" states are the same.\r\nfunction isHitsEqual(hit0, hit1) {\r\n if (!hit0 && !hit1) {\r\n return true;\r\n }\r\n if (hit0 && hit1) {\r\n return hit0.component === hit1.component &&\r\n isHitPropsWithin(hit0, hit1) &&\r\n isHitPropsWithin(hit1, hit0); // ensures all props are identical\r\n }\r\n return false;\r\n}\r\n// Returns true if all of subHit's non-standard properties are within superHit\r\nfunction isHitPropsWithin(subHit, superHit) {\r\n for (var propName in subHit) {\r\n if (!/^(component|left|right|top|bottom)$/.test(propName)) {\r\n if (subHit[propName] !== superHit[propName]) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n}\r\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.version = '3.10.0';\r\n// When introducing internal API incompatibilities (where fullcalendar plugins would break),\r\n// the minor version of the calendar should be upped (ex: 2.7.2 -> 2.8.0)\r\n// and the below integer should be incremented.\r\nexports.internalApiVersion = 12;\r\nvar util_1 = __webpack_require__(4);\r\nexports.applyAll = util_1.applyAll;\r\nexports.debounce = util_1.debounce;\r\nexports.isInt = util_1.isInt;\r\nexports.htmlEscape = util_1.htmlEscape;\r\nexports.cssToStr = util_1.cssToStr;\r\nexports.proxy = util_1.proxy;\r\nexports.capitaliseFirstLetter = util_1.capitaliseFirstLetter;\r\nexports.getOuterRect = util_1.getOuterRect;\r\nexports.getClientRect = util_1.getClientRect;\r\nexports.getContentRect = util_1.getContentRect;\r\nexports.getScrollbarWidths = util_1.getScrollbarWidths;\r\nexports.preventDefault = util_1.preventDefault;\r\nexports.parseFieldSpecs = util_1.parseFieldSpecs;\r\nexports.compareByFieldSpecs = util_1.compareByFieldSpecs;\r\nexports.compareByFieldSpec = util_1.compareByFieldSpec;\r\nexports.flexibleCompare = util_1.flexibleCompare;\r\nexports.computeGreatestUnit = util_1.computeGreatestUnit;\r\nexports.divideRangeByDuration = util_1.divideRangeByDuration;\r\nexports.divideDurationByDuration = util_1.divideDurationByDuration;\r\nexports.multiplyDuration = util_1.multiplyDuration;\r\nexports.durationHasTime = util_1.durationHasTime;\r\nexports.log = util_1.log;\r\nexports.warn = util_1.warn;\r\nexports.removeExact = util_1.removeExact;\r\nexports.intersectRects = util_1.intersectRects;\r\nexports.allowSelection = util_1.allowSelection;\r\nexports.attrsToStr = util_1.attrsToStr;\r\nexports.compareNumbers = util_1.compareNumbers;\r\nexports.compensateScroll = util_1.compensateScroll;\r\nexports.computeDurationGreatestUnit = util_1.computeDurationGreatestUnit;\r\nexports.constrainPoint = util_1.constrainPoint;\r\nexports.copyOwnProps = util_1.copyOwnProps;\r\nexports.diffByUnit = util_1.diffByUnit;\r\nexports.diffDay = util_1.diffDay;\r\nexports.diffDayTime = util_1.diffDayTime;\r\nexports.diffPoints = util_1.diffPoints;\r\nexports.disableCursor = util_1.disableCursor;\r\nexports.distributeHeight = util_1.distributeHeight;\r\nexports.enableCursor = util_1.enableCursor;\r\nexports.firstDefined = util_1.firstDefined;\r\nexports.getEvIsTouch = util_1.getEvIsTouch;\r\nexports.getEvX = util_1.getEvX;\r\nexports.getEvY = util_1.getEvY;\r\nexports.getRectCenter = util_1.getRectCenter;\r\nexports.getScrollParent = util_1.getScrollParent;\r\nexports.hasOwnProp = util_1.hasOwnProp;\r\nexports.isArraysEqual = util_1.isArraysEqual;\r\nexports.isNativeDate = util_1.isNativeDate;\r\nexports.isPrimaryMouseButton = util_1.isPrimaryMouseButton;\r\nexports.isTimeString = util_1.isTimeString;\r\nexports.matchCellWidths = util_1.matchCellWidths;\r\nexports.mergeProps = util_1.mergeProps;\r\nexports.preventSelection = util_1.preventSelection;\r\nexports.removeMatching = util_1.removeMatching;\r\nexports.stripHtmlEntities = util_1.stripHtmlEntities;\r\nexports.subtractInnerElHeight = util_1.subtractInnerElHeight;\r\nexports.uncompensateScroll = util_1.uncompensateScroll;\r\nexports.undistributeHeight = util_1.undistributeHeight;\r\nexports.dayIDs = util_1.dayIDs;\r\nexports.unitsDesc = util_1.unitsDesc;\r\nvar date_formatting_1 = __webpack_require__(49);\r\nexports.formatDate = date_formatting_1.formatDate;\r\nexports.formatRange = date_formatting_1.formatRange;\r\nexports.queryMostGranularFormatUnit = date_formatting_1.queryMostGranularFormatUnit;\r\nvar locale_1 = __webpack_require__(32);\r\nexports.datepickerLocale = locale_1.datepickerLocale;\r\nexports.locale = locale_1.locale;\r\nexports.getMomentLocaleData = locale_1.getMomentLocaleData;\r\nexports.populateInstanceComputableOptions = locale_1.populateInstanceComputableOptions;\r\nvar util_2 = __webpack_require__(19);\r\nexports.eventDefsToEventInstances = util_2.eventDefsToEventInstances;\r\nexports.eventFootprintToComponentFootprint = util_2.eventFootprintToComponentFootprint;\r\nexports.eventInstanceToEventRange = util_2.eventInstanceToEventRange;\r\nexports.eventInstanceToUnzonedRange = util_2.eventInstanceToUnzonedRange;\r\nexports.eventRangeToEventFootprint = util_2.eventRangeToEventFootprint;\r\nvar moment_ext_1 = __webpack_require__(11);\r\nexports.moment = moment_ext_1.default;\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nexports.EmitterMixin = EmitterMixin_1.default;\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nexports.ListenerMixin = ListenerMixin_1.default;\r\nvar Model_1 = __webpack_require__(51);\r\nexports.Model = Model_1.default;\r\nvar Constraints_1 = __webpack_require__(217);\r\nexports.Constraints = Constraints_1.default;\r\nvar DateProfileGenerator_1 = __webpack_require__(55);\r\nexports.DateProfileGenerator = DateProfileGenerator_1.default;\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nexports.UnzonedRange = UnzonedRange_1.default;\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nexports.ComponentFootprint = ComponentFootprint_1.default;\r\nvar BusinessHourGenerator_1 = __webpack_require__(218);\r\nexports.BusinessHourGenerator = BusinessHourGenerator_1.default;\r\nvar EventPeriod_1 = __webpack_require__(219);\r\nexports.EventPeriod = EventPeriod_1.default;\r\nvar EventManager_1 = __webpack_require__(220);\r\nexports.EventManager = EventManager_1.default;\r\nvar EventDef_1 = __webpack_require__(37);\r\nexports.EventDef = EventDef_1.default;\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nexports.EventDefMutation = EventDefMutation_1.default;\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nexports.EventDefParser = EventDefParser_1.default;\r\nvar EventInstance_1 = __webpack_require__(53);\r\nexports.EventInstance = EventInstance_1.default;\r\nvar EventRange_1 = __webpack_require__(50);\r\nexports.EventRange = EventRange_1.default;\r\nvar RecurringEventDef_1 = __webpack_require__(54);\r\nexports.RecurringEventDef = RecurringEventDef_1.default;\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nexports.SingleEventDef = SingleEventDef_1.default;\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nexports.EventDefDateMutation = EventDefDateMutation_1.default;\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nexports.EventDateProfile = EventDateProfile_1.default;\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nexports.EventSourceParser = EventSourceParser_1.default;\r\nvar EventSource_1 = __webpack_require__(6);\r\nexports.EventSource = EventSource_1.default;\r\nvar ThemeRegistry_1 = __webpack_require__(57);\r\nexports.defineThemeSystem = ThemeRegistry_1.defineThemeSystem;\r\nexports.getThemeSystemClass = ThemeRegistry_1.getThemeSystemClass;\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nexports.EventInstanceGroup = EventInstanceGroup_1.default;\r\nvar ArrayEventSource_1 = __webpack_require__(56);\r\nexports.ArrayEventSource = ArrayEventSource_1.default;\r\nvar FuncEventSource_1 = __webpack_require__(223);\r\nexports.FuncEventSource = FuncEventSource_1.default;\r\nvar JsonFeedEventSource_1 = __webpack_require__(224);\r\nexports.JsonFeedEventSource = JsonFeedEventSource_1.default;\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nexports.EventFootprint = EventFootprint_1.default;\r\nvar Class_1 = __webpack_require__(35);\r\nexports.Class = Class_1.default;\r\nvar Mixin_1 = __webpack_require__(15);\r\nexports.Mixin = Mixin_1.default;\r\nvar CoordCache_1 = __webpack_require__(58);\r\nexports.CoordCache = CoordCache_1.default;\r\nvar Iterator_1 = __webpack_require__(225);\r\nexports.Iterator = Iterator_1.default;\r\nvar DragListener_1 = __webpack_require__(59);\r\nexports.DragListener = DragListener_1.default;\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nexports.HitDragListener = HitDragListener_1.default;\r\nvar MouseFollower_1 = __webpack_require__(226);\r\nexports.MouseFollower = MouseFollower_1.default;\r\nvar ParsableModelMixin_1 = __webpack_require__(52);\r\nexports.ParsableModelMixin = ParsableModelMixin_1.default;\r\nvar Popover_1 = __webpack_require__(227);\r\nexports.Popover = Popover_1.default;\r\nvar Promise_1 = __webpack_require__(21);\r\nexports.Promise = Promise_1.default;\r\nvar TaskQueue_1 = __webpack_require__(228);\r\nexports.TaskQueue = TaskQueue_1.default;\r\nvar RenderQueue_1 = __webpack_require__(229);\r\nexports.RenderQueue = RenderQueue_1.default;\r\nvar Scroller_1 = __webpack_require__(41);\r\nexports.Scroller = Scroller_1.default;\r\nvar Theme_1 = __webpack_require__(22);\r\nexports.Theme = Theme_1.default;\r\nvar Component_1 = __webpack_require__(230);\r\nexports.Component = Component_1.default;\r\nvar DateComponent_1 = __webpack_require__(231);\r\nexports.DateComponent = DateComponent_1.default;\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nexports.InteractiveDateComponent = InteractiveDateComponent_1.default;\r\nvar Calendar_1 = __webpack_require__(232);\r\nexports.Calendar = Calendar_1.default;\r\nvar View_1 = __webpack_require__(43);\r\nexports.View = View_1.default;\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nexports.defineView = ViewRegistry_1.defineView;\r\nexports.getViewConfig = ViewRegistry_1.getViewConfig;\r\nvar DayTableMixin_1 = __webpack_require__(60);\r\nexports.DayTableMixin = DayTableMixin_1.default;\r\nvar BusinessHourRenderer_1 = __webpack_require__(61);\r\nexports.BusinessHourRenderer = BusinessHourRenderer_1.default;\r\nvar EventRenderer_1 = __webpack_require__(44);\r\nexports.EventRenderer = EventRenderer_1.default;\r\nvar FillRenderer_1 = __webpack_require__(62);\r\nexports.FillRenderer = FillRenderer_1.default;\r\nvar HelperRenderer_1 = __webpack_require__(63);\r\nexports.HelperRenderer = HelperRenderer_1.default;\r\nvar ExternalDropping_1 = __webpack_require__(233);\r\nexports.ExternalDropping = ExternalDropping_1.default;\r\nvar EventResizing_1 = __webpack_require__(234);\r\nexports.EventResizing = EventResizing_1.default;\r\nvar EventPointing_1 = __webpack_require__(64);\r\nexports.EventPointing = EventPointing_1.default;\r\nvar EventDragging_1 = __webpack_require__(235);\r\nexports.EventDragging = EventDragging_1.default;\r\nvar DateSelecting_1 = __webpack_require__(236);\r\nexports.DateSelecting = DateSelecting_1.default;\r\nvar DateClicking_1 = __webpack_require__(237);\r\nexports.DateClicking = DateClicking_1.default;\r\nvar Interaction_1 = __webpack_require__(14);\r\nexports.Interaction = Interaction_1.default;\r\nvar StandardInteractionsMixin_1 = __webpack_require__(65);\r\nexports.StandardInteractionsMixin = StandardInteractionsMixin_1.default;\r\nvar AgendaView_1 = __webpack_require__(238);\r\nexports.AgendaView = AgendaView_1.default;\r\nvar TimeGrid_1 = __webpack_require__(239);\r\nexports.TimeGrid = TimeGrid_1.default;\r\nvar TimeGridEventRenderer_1 = __webpack_require__(240);\r\nexports.TimeGridEventRenderer = TimeGridEventRenderer_1.default;\r\nvar TimeGridFillRenderer_1 = __webpack_require__(242);\r\nexports.TimeGridFillRenderer = TimeGridFillRenderer_1.default;\r\nvar TimeGridHelperRenderer_1 = __webpack_require__(241);\r\nexports.TimeGridHelperRenderer = TimeGridHelperRenderer_1.default;\r\nvar DayGrid_1 = __webpack_require__(66);\r\nexports.DayGrid = DayGrid_1.default;\r\nvar DayGridEventRenderer_1 = __webpack_require__(243);\r\nexports.DayGridEventRenderer = DayGridEventRenderer_1.default;\r\nvar DayGridFillRenderer_1 = __webpack_require__(245);\r\nexports.DayGridFillRenderer = DayGridFillRenderer_1.default;\r\nvar DayGridHelperRenderer_1 = __webpack_require__(244);\r\nexports.DayGridHelperRenderer = DayGridHelperRenderer_1.default;\r\nvar BasicView_1 = __webpack_require__(67);\r\nexports.BasicView = BasicView_1.default;\r\nvar BasicViewDateProfileGenerator_1 = __webpack_require__(68);\r\nexports.BasicViewDateProfileGenerator = BasicViewDateProfileGenerator_1.default;\r\nvar MonthView_1 = __webpack_require__(246);\r\nexports.MonthView = MonthView_1.default;\r\nvar MonthViewDateProfileGenerator_1 = __webpack_require__(247);\r\nexports.MonthViewDateProfileGenerator = MonthViewDateProfileGenerator_1.default;\r\nvar ListView_1 = __webpack_require__(248);\r\nexports.ListView = ListView_1.default;\r\nvar ListEventPointing_1 = __webpack_require__(250);\r\nexports.ListEventPointing = ListEventPointing_1.default;\r\nvar ListEventRenderer_1 = __webpack_require__(249);\r\nexports.ListEventRenderer = ListEventRenderer_1.default;\r\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventRange_1 = __webpack_require__(50);\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nfunction eventDefsToEventInstances(eventDefs, unzonedRange) {\r\n var eventInstances = [];\r\n var i;\r\n for (i = 0; i < eventDefs.length; i++) {\r\n eventInstances.push.apply(eventInstances, // append\r\n eventDefs[i].buildInstances(unzonedRange));\r\n }\r\n return eventInstances;\r\n}\r\nexports.eventDefsToEventInstances = eventDefsToEventInstances;\r\nfunction eventInstanceToEventRange(eventInstance) {\r\n return new EventRange_1.default(eventInstance.dateProfile.unzonedRange, eventInstance.def, eventInstance);\r\n}\r\nexports.eventInstanceToEventRange = eventInstanceToEventRange;\r\nfunction eventRangeToEventFootprint(eventRange) {\r\n return new EventFootprint_1.default(new ComponentFootprint_1.default(eventRange.unzonedRange, eventRange.eventDef.isAllDay()), eventRange.eventDef, eventRange.eventInstance // might not exist\r\n );\r\n}\r\nexports.eventRangeToEventFootprint = eventRangeToEventFootprint;\r\nfunction eventInstanceToUnzonedRange(eventInstance) {\r\n return eventInstance.dateProfile.unzonedRange;\r\n}\r\nexports.eventInstanceToUnzonedRange = eventInstanceToUnzonedRange;\r\nfunction eventFootprintToComponentFootprint(eventFootprint) {\r\n return eventFootprint.componentFootprint;\r\n}\r\nexports.eventFootprintToComponentFootprint = eventFootprintToComponentFootprint;\r\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar util_1 = __webpack_require__(19);\r\nvar EventRange_1 = __webpack_require__(50);\r\n/*\r\nIt's expected that there will be at least one EventInstance,\r\nOR that an explicitEventDef is assigned.\r\n*/\r\nvar EventInstanceGroup = /** @class */ (function () {\r\n function EventInstanceGroup(eventInstances) {\r\n this.eventInstances = eventInstances || [];\r\n }\r\n EventInstanceGroup.prototype.getAllEventRanges = function (constraintRange) {\r\n if (constraintRange) {\r\n return this.sliceNormalRenderRanges(constraintRange);\r\n }\r\n else {\r\n return this.eventInstances.map(util_1.eventInstanceToEventRange);\r\n }\r\n };\r\n EventInstanceGroup.prototype.sliceRenderRanges = function (constraintRange) {\r\n if (this.isInverse()) {\r\n return this.sliceInverseRenderRanges(constraintRange);\r\n }\r\n else {\r\n return this.sliceNormalRenderRanges(constraintRange);\r\n }\r\n };\r\n EventInstanceGroup.prototype.sliceNormalRenderRanges = function (constraintRange) {\r\n var eventInstances = this.eventInstances;\r\n var i;\r\n var eventInstance;\r\n var slicedRange;\r\n var slicedEventRanges = [];\r\n for (i = 0; i < eventInstances.length; i++) {\r\n eventInstance = eventInstances[i];\r\n slicedRange = eventInstance.dateProfile.unzonedRange.intersect(constraintRange);\r\n if (slicedRange) {\r\n slicedEventRanges.push(new EventRange_1.default(slicedRange, eventInstance.def, eventInstance));\r\n }\r\n }\r\n return slicedEventRanges;\r\n };\r\n EventInstanceGroup.prototype.sliceInverseRenderRanges = function (constraintRange) {\r\n var unzonedRanges = this.eventInstances.map(util_1.eventInstanceToUnzonedRange);\r\n var ownerDef = this.getEventDef();\r\n unzonedRanges = UnzonedRange_1.default.invertRanges(unzonedRanges, constraintRange);\r\n return unzonedRanges.map(function (unzonedRange) {\r\n return new EventRange_1.default(unzonedRange, ownerDef); // don't give an EventInstance\r\n });\r\n };\r\n EventInstanceGroup.prototype.isInverse = function () {\r\n return this.getEventDef().hasInverseRendering();\r\n };\r\n EventInstanceGroup.prototype.getEventDef = function () {\r\n return this.explicitEventDef || this.eventInstances[0].def;\r\n };\r\n return EventInstanceGroup;\r\n}());\r\nexports.default = EventInstanceGroup;\r\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar PromiseStub = {\r\n construct: function (executor) {\r\n var deferred = $.Deferred();\r\n var promise = deferred.promise();\r\n if (typeof executor === 'function') {\r\n executor(function (val) {\r\n deferred.resolve(val);\r\n attachImmediatelyResolvingThen(promise, val);\r\n }, function () {\r\n deferred.reject();\r\n attachImmediatelyRejectingThen(promise);\r\n });\r\n }\r\n return promise;\r\n },\r\n resolve: function (val) {\r\n var deferred = $.Deferred().resolve(val);\r\n var promise = deferred.promise();\r\n attachImmediatelyResolvingThen(promise, val);\r\n return promise;\r\n },\r\n reject: function () {\r\n var deferred = $.Deferred().reject();\r\n var promise = deferred.promise();\r\n attachImmediatelyRejectingThen(promise);\r\n return promise;\r\n }\r\n};\r\nexports.default = PromiseStub;\r\nfunction attachImmediatelyResolvingThen(promise, val) {\r\n promise.then = function (onResolve) {\r\n if (typeof onResolve === 'function') {\r\n return PromiseStub.resolve(onResolve(val));\r\n }\r\n return promise;\r\n };\r\n}\r\nfunction attachImmediatelyRejectingThen(promise) {\r\n promise.then = function (onResolve, onReject) {\r\n if (typeof onReject === 'function') {\r\n onReject();\r\n }\r\n return promise;\r\n };\r\n}\r\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar Theme = /** @class */ (function () {\r\n function Theme(optionsManager) {\r\n this.optionsManager = optionsManager;\r\n this.processIconOverride();\r\n }\r\n Theme.prototype.processIconOverride = function () {\r\n if (this.iconOverrideOption) {\r\n this.setIconOverride(this.optionsManager.get(this.iconOverrideOption));\r\n }\r\n };\r\n Theme.prototype.setIconOverride = function (iconOverrideHash) {\r\n var iconClassesCopy;\r\n var buttonName;\r\n if ($.isPlainObject(iconOverrideHash)) {\r\n iconClassesCopy = $.extend({}, this.iconClasses);\r\n for (buttonName in iconOverrideHash) {\r\n iconClassesCopy[buttonName] = this.applyIconOverridePrefix(iconOverrideHash[buttonName]);\r\n }\r\n this.iconClasses = iconClassesCopy;\r\n }\r\n else if (iconOverrideHash === false) {\r\n this.iconClasses = {};\r\n }\r\n };\r\n Theme.prototype.applyIconOverridePrefix = function (className) {\r\n var prefix = this.iconOverridePrefix;\r\n if (prefix && className.indexOf(prefix) !== 0) { // if not already present\r\n className = prefix + className;\r\n }\r\n return className;\r\n };\r\n Theme.prototype.getClass = function (key) {\r\n return this.classes[key] || '';\r\n };\r\n Theme.prototype.getIconClass = function (buttonName) {\r\n var className = this.iconClasses[buttonName];\r\n if (className) {\r\n return this.baseIconClass + ' ' + className;\r\n }\r\n return '';\r\n };\r\n Theme.prototype.getCustomButtonIconClass = function (customButtonProps) {\r\n var className;\r\n if (this.iconOverrideCustomButtonOption) {\r\n className = customButtonProps[this.iconOverrideCustomButtonOption];\r\n if (className) {\r\n return this.baseIconClass + ' ' + this.applyIconOverridePrefix(className);\r\n }\r\n }\r\n return '';\r\n };\r\n return Theme;\r\n}());\r\nexports.default = Theme;\r\nTheme.prototype.classes = {};\r\nTheme.prototype.iconClasses = {};\r\nTheme.prototype.baseIconClass = '';\r\nTheme.prototype.iconOverridePrefix = '';\r\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar exportHooks = __webpack_require__(18);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nexportHooks.touchMouseIgnoreWait = 500;\r\nvar globalEmitter = null;\r\nvar neededCount = 0;\r\n/*\r\nListens to document and window-level user-interaction events, like touch events and mouse events,\r\nand fires these events as-is to whoever is observing a GlobalEmitter.\r\nBest when used as a singleton via GlobalEmitter.get()\r\n\nNormalizes mouse/touch events. For examples:\r\n- ignores the the simulated mouse events that happen after a quick tap: mousemove+mousedown+mouseup+click\r\n- compensates for various buggy scenarios where a touchend does not fire\r\n*/\r\nvar GlobalEmitter = /** @class */ (function () {\r\n function GlobalEmitter() {\r\n this.isTouching = false;\r\n this.mouseIgnoreDepth = 0;\r\n }\r\n // gets the singleton\r\n GlobalEmitter.get = function () {\r\n if (!globalEmitter) {\r\n globalEmitter = new GlobalEmitter();\r\n globalEmitter.bind();\r\n }\r\n return globalEmitter;\r\n };\r\n // called when an object knows it will need a GlobalEmitter in the near future.\r\n GlobalEmitter.needed = function () {\r\n GlobalEmitter.get(); // ensures globalEmitter\r\n neededCount++;\r\n };\r\n // called when the object that originally called needed() doesn't need a GlobalEmitter anymore.\r\n GlobalEmitter.unneeded = function () {\r\n neededCount--;\r\n if (!neededCount) { // nobody else needs it\r\n globalEmitter.unbind();\r\n globalEmitter = null;\r\n }\r\n };\r\n GlobalEmitter.prototype.bind = function () {\r\n var _this = this;\r\n this.listenTo($(document), {\r\n touchstart: this.handleTouchStart,\r\n touchcancel: this.handleTouchCancel,\r\n touchend: this.handleTouchEnd,\r\n mousedown: this.handleMouseDown,\r\n mousemove: this.handleMouseMove,\r\n mouseup: this.handleMouseUp,\r\n click: this.handleClick,\r\n selectstart: this.handleSelectStart,\r\n contextmenu: this.handleContextMenu\r\n });\r\n // because we need to call preventDefault\r\n // because https://www.chromestatus.com/features/5093566007214080\r\n // TODO: investigate performance because this is a global handler\r\n window.addEventListener('touchmove', this.handleTouchMoveProxy = function (ev) {\r\n _this.handleTouchMove($.Event(ev));\r\n }, { passive: false } // allows preventDefault()\r\n );\r\n // attach a handler to get called when ANY scroll action happens on the page.\r\n // this was impossible to do with normal on/off because 'scroll' doesn't bubble.\r\n // http://stackoverflow.com/a/32954565/96342\r\n window.addEventListener('scroll', this.handleScrollProxy = function (ev) {\r\n _this.handleScroll($.Event(ev));\r\n }, true // useCapture\r\n );\r\n };\r\n GlobalEmitter.prototype.unbind = function () {\r\n this.stopListeningTo($(document));\r\n window.removeEventListener('touchmove', this.handleTouchMoveProxy, { passive: false } // use same options as addEventListener\r\n );\r\n window.removeEventListener('scroll', this.handleScrollProxy, true // useCapture\r\n );\r\n };\r\n // Touch Handlers\r\n // -----------------------------------------------------------------------------------------------------------------\r\n GlobalEmitter.prototype.handleTouchStart = function (ev) {\r\n // if a previous touch interaction never ended with a touchend, then implicitly end it,\r\n // but since a new touch interaction is about to begin, don't start the mouse ignore period.\r\n this.stopTouch(ev, true); // skipMouseIgnore=true\r\n this.isTouching = true;\r\n this.trigger('touchstart', ev);\r\n };\r\n GlobalEmitter.prototype.handleTouchMove = function (ev) {\r\n if (this.isTouching) {\r\n this.trigger('touchmove', ev);\r\n }\r\n };\r\n GlobalEmitter.prototype.handleTouchCancel = function (ev) {\r\n if (this.isTouching) {\r\n this.trigger('touchcancel', ev);\r\n // Have touchcancel fire an artificial touchend. That way, handlers won't need to listen to both.\r\n // If touchend fires later, it won't have any effect b/c isTouching will be false.\r\n this.stopTouch(ev);\r\n }\r\n };\r\n GlobalEmitter.prototype.handleTouchEnd = function (ev) {\r\n this.stopTouch(ev);\r\n };\r\n // Mouse Handlers\r\n // -----------------------------------------------------------------------------------------------------------------\r\n GlobalEmitter.prototype.handleMouseDown = function (ev) {\r\n if (!this.shouldIgnoreMouse()) {\r\n this.trigger('mousedown', ev);\r\n }\r\n };\r\n GlobalEmitter.prototype.handleMouseMove = function (ev) {\r\n if (!this.shouldIgnoreMouse()) {\r\n this.trigger('mousemove', ev);\r\n }\r\n };\r\n GlobalEmitter.prototype.handleMouseUp = function (ev) {\r\n if (!this.shouldIgnoreMouse()) {\r\n this.trigger('mouseup', ev);\r\n }\r\n };\r\n GlobalEmitter.prototype.handleClick = function (ev) {\r\n if (!this.shouldIgnoreMouse()) {\r\n this.trigger('click', ev);\r\n }\r\n };\r\n // Misc Handlers\r\n // -----------------------------------------------------------------------------------------------------------------\r\n GlobalEmitter.prototype.handleSelectStart = function (ev) {\r\n this.trigger('selectstart', ev);\r\n };\r\n GlobalEmitter.prototype.handleContextMenu = function (ev) {\r\n this.trigger('contextmenu', ev);\r\n };\r\n GlobalEmitter.prototype.handleScroll = function (ev) {\r\n this.trigger('scroll', ev);\r\n };\r\n // Utils\r\n // -----------------------------------------------------------------------------------------------------------------\r\n GlobalEmitter.prototype.stopTouch = function (ev, skipMouseIgnore) {\r\n if (skipMouseIgnore === void 0) { skipMouseIgnore = false; }\r\n if (this.isTouching) {\r\n this.isTouching = false;\r\n this.trigger('touchend', ev);\r\n if (!skipMouseIgnore) {\r\n this.startTouchMouseIgnore();\r\n }\r\n }\r\n };\r\n GlobalEmitter.prototype.startTouchMouseIgnore = function () {\r\n var _this = this;\r\n var wait = exportHooks.touchMouseIgnoreWait;\r\n if (wait) {\r\n this.mouseIgnoreDepth++;\r\n setTimeout(function () {\r\n _this.mouseIgnoreDepth--;\r\n }, wait);\r\n }\r\n };\r\n GlobalEmitter.prototype.shouldIgnoreMouse = function () {\r\n return this.isTouching || Boolean(this.mouseIgnoreDepth);\r\n };\r\n return GlobalEmitter;\r\n}());\r\nexports.default = GlobalEmitter;\r\nListenerMixin_1.default.mixInto(GlobalEmitter);\r\nEmitterMixin_1.default.mixInto(GlobalEmitter);\r\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar exportHooks = __webpack_require__(18);\r\nexports.viewHash = {};\r\nexportHooks.views = exports.viewHash;\r\nfunction defineView(viewName, viewConfig) {\r\n exports.viewHash[viewName] = viewConfig;\r\n}\r\nexports.defineView = defineView;\r\nfunction getViewConfig(viewName) {\r\n return exports.viewHash[viewName];\r\n}\r\nexports.getViewConfig = getViewConfig;\r\n\n\n/***/ }),\n/* 25 */,\n/* 26 */,\n/* 27 */,\n/* 28 */,\n/* 29 */,\n/* 30 */,\n/* 31 */,\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar exportHooks = __webpack_require__(18);\r\nvar options_1 = __webpack_require__(33);\r\nvar util_1 = __webpack_require__(4);\r\nexports.localeOptionHash = {};\r\nexportHooks.locales = exports.localeOptionHash;\r\n// NOTE: can't guarantee any of these computations will run because not every locale has datepicker\r\n// configs, so make sure there are English fallbacks for these in the defaults file.\r\nvar dpComputableOptions = {\r\n buttonText: function (dpOptions) {\r\n return {\r\n // the translations sometimes wrongly contain HTML entities\r\n prev: util_1.stripHtmlEntities(dpOptions.prevText),\r\n next: util_1.stripHtmlEntities(dpOptions.nextText),\r\n today: util_1.stripHtmlEntities(dpOptions.currentText)\r\n };\r\n },\r\n // Produces format strings like \"MMMM YYYY\" -> \"September 2014\"\r\n monthYearFormat: function (dpOptions) {\r\n return dpOptions.showMonthAfterYear ?\r\n 'YYYY[' + dpOptions.yearSuffix + '] MMMM' :\r\n 'MMMM YYYY[' + dpOptions.yearSuffix + ']';\r\n }\r\n};\r\nvar momComputableOptions = {\r\n // Produces format strings like \"ddd M/D\" -> \"Fri 9/15\"\r\n dayOfMonthFormat: function (momOptions, fcOptions) {\r\n var format = momOptions.longDateFormat('l'); // for the format like \"M/D/YYYY\"\r\n // strip the year off the edge, as well as other misc non-whitespace chars\r\n format = format.replace(/^Y+[^\\w\\s]*|[^\\w\\s]*Y+$/g, '');\r\n if (fcOptions.isRTL) {\r\n format += ' ddd'; // for RTL, add day-of-week to end\r\n }\r\n else {\r\n format = 'ddd ' + format; // for LTR, add day-of-week to beginning\r\n }\r\n return format;\r\n },\r\n // Produces format strings like \"h:mma\" -> \"6:00pm\"\r\n mediumTimeFormat: function (momOptions) {\r\n return momOptions.longDateFormat('LT')\r\n .replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\r\n },\r\n // Produces format strings like \"h(:mm)a\" -> \"6pm\" / \"6:30pm\"\r\n smallTimeFormat: function (momOptions) {\r\n return momOptions.longDateFormat('LT')\r\n .replace(':mm', '(:mm)')\r\n .replace(/(\\Wmm)$/, '($1)') // like above, but for foreign locales\r\n .replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\r\n },\r\n // Produces format strings like \"h(:mm)t\" -> \"6p\" / \"6:30p\"\r\n extraSmallTimeFormat: function (momOptions) {\r\n return momOptions.longDateFormat('LT')\r\n .replace(':mm', '(:mm)')\r\n .replace(/(\\Wmm)$/, '($1)') // like above, but for foreign locales\r\n .replace(/\\s*a$/i, 't'); // convert to AM/PM/am/pm to lowercase one-letter. remove any spaces beforehand\r\n },\r\n // Produces format strings like \"ha\" / \"H\" -> \"6pm\" / \"18\"\r\n hourFormat: function (momOptions) {\r\n return momOptions.longDateFormat('LT')\r\n .replace(':mm', '')\r\n .replace(/(\\Wmm)$/, '') // like above, but for foreign locales\r\n .replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\r\n },\r\n // Produces format strings like \"h:mm\" -> \"6:30\" (with no AM/PM)\r\n noMeridiemTimeFormat: function (momOptions) {\r\n return momOptions.longDateFormat('LT')\r\n .replace(/\\s*a$/i, ''); // remove trailing AM/PM\r\n }\r\n};\r\n// options that should be computed off live calendar options (considers override options)\r\n// TODO: best place for this? related to locale?\r\n// TODO: flipping text based on isRTL is a bad idea because the CSS `direction` might want to handle it\r\nvar instanceComputableOptions = {\r\n // Produces format strings for results like \"Mo 16\"\r\n smallDayDateFormat: function (options) {\r\n return options.isRTL ?\r\n 'D dd' :\r\n 'dd D';\r\n },\r\n // Produces format strings for results like \"Wk 5\"\r\n weekFormat: function (options) {\r\n return options.isRTL ?\r\n 'w[ ' + options.weekNumberTitle + ']' :\r\n '[' + options.weekNumberTitle + ' ]w';\r\n },\r\n // Produces format strings for results like \"Wk5\"\r\n smallWeekFormat: function (options) {\r\n return options.isRTL ?\r\n 'w[' + options.weekNumberTitle + ']' :\r\n '[' + options.weekNumberTitle + ']w';\r\n }\r\n};\r\n// TODO: make these computable properties in optionsManager\r\nfunction populateInstanceComputableOptions(options) {\r\n $.each(instanceComputableOptions, function (name, func) {\r\n if (options[name] == null) {\r\n options[name] = func(options);\r\n }\r\n });\r\n}\r\nexports.populateInstanceComputableOptions = populateInstanceComputableOptions;\r\n// Initialize jQuery UI datepicker translations while using some of the translations\r\n// Will set this as the default locales for datepicker.\r\nfunction datepickerLocale(localeCode, dpLocaleCode, dpOptions) {\r\n // get the FullCalendar internal option hash for this locale. create if necessary\r\n var fcOptions = exports.localeOptionHash[localeCode] || (exports.localeOptionHash[localeCode] = {});\r\n // transfer some simple options from datepicker to fc\r\n fcOptions.isRTL = dpOptions.isRTL;\r\n fcOptions.weekNumberTitle = dpOptions.weekHeader;\r\n // compute some more complex options from datepicker\r\n $.each(dpComputableOptions, function (name, func) {\r\n fcOptions[name] = func(dpOptions);\r\n });\r\n var jqDatePicker = $.datepicker;\r\n // is jQuery UI Datepicker is on the page?\r\n if (jqDatePicker) {\r\n // Register the locale data.\r\n // FullCalendar and MomentJS use locale codes like \"pt-br\" but Datepicker\r\n // does it like \"pt-BR\" or if it doesn't have the locale, maybe just \"pt\".\r\n // Make an alias so the locale can be referenced either way.\r\n jqDatePicker.regional[dpLocaleCode] =\r\n jqDatePicker.regional[localeCode] = // alias\r\n dpOptions;\r\n // Alias 'en' to the default locale data. Do this every time.\r\n jqDatePicker.regional.en = jqDatePicker.regional[''];\r\n // Set as Datepicker's global defaults.\r\n jqDatePicker.setDefaults(dpOptions);\r\n }\r\n}\r\nexports.datepickerLocale = datepickerLocale;\r\n// Sets FullCalendar-specific translations. Will set the locales as the global default.\r\nfunction locale(localeCode, newFcOptions) {\r\n var fcOptions;\r\n var momOptions;\r\n // get the FullCalendar internal option hash for this locale. create if necessary\r\n fcOptions = exports.localeOptionHash[localeCode] || (exports.localeOptionHash[localeCode] = {});\r\n // provided new options for this locales? merge them in\r\n if (newFcOptions) {\r\n fcOptions = exports.localeOptionHash[localeCode] = options_1.mergeOptions([fcOptions, newFcOptions]);\r\n }\r\n // compute locale options that weren't defined.\r\n // always do this. newFcOptions can be undefined when initializing from i18n file,\r\n // so no way to tell if this is an initialization or a default-setting.\r\n momOptions = getMomentLocaleData(localeCode); // will fall back to en\r\n $.each(momComputableOptions, function (name, func) {\r\n if (fcOptions[name] == null) {\r\n fcOptions[name] = (func)(momOptions, fcOptions);\r\n }\r\n });\r\n // set it as the default locale for FullCalendar\r\n options_1.globalDefaults.locale = localeCode;\r\n}\r\nexports.locale = locale;\r\n// Returns moment's internal locale data. If doesn't exist, returns English.\r\nfunction getMomentLocaleData(localeCode) {\r\n return moment.localeData(localeCode) || moment.localeData('en');\r\n}\r\nexports.getMomentLocaleData = getMomentLocaleData;\r\n// Initialize English by forcing computation of moment-derived options.\r\n// Also, sets it as the default.\r\nlocale('en', options_1.englishDefaults);\r\n\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar util_1 = __webpack_require__(4);\r\nexports.globalDefaults = {\r\n titleRangeSeparator: ' \\u2013 ',\r\n monthYearFormat: 'MMMM YYYY',\r\n defaultTimedEventDuration: '02:00:00',\r\n defaultAllDayEventDuration: { days: 1 },\r\n forceEventDuration: false,\r\n nextDayThreshold: '09:00:00',\r\n // display\r\n columnHeader: true,\r\n defaultView: 'month',\r\n aspectRatio: 1.35,\r\n header: {\r\n left: 'title',\r\n center: '',\r\n right: 'today prev,next'\r\n },\r\n weekends: true,\r\n weekNumbers: false,\r\n weekNumberTitle: 'W',\r\n weekNumberCalculation: 'local',\r\n // editable: false,\r\n // nowIndicator: false,\r\n scrollTime: '06:00:00',\r\n minTime: '00:00:00',\r\n maxTime: '24:00:00',\r\n showNonCurrentDates: true,\r\n // event ajax\r\n lazyFetching: true,\r\n startParam: 'start',\r\n endParam: 'end',\r\n timezoneParam: 'timezone',\r\n timezone: false,\r\n // allDayDefault: undefined,\r\n // locale\r\n locale: null,\r\n isRTL: false,\r\n buttonText: {\r\n prev: 'prev',\r\n next: 'next',\r\n prevYear: 'prev year',\r\n nextYear: 'next year',\r\n year: 'year',\r\n today: 'today',\r\n month: 'month',\r\n week: 'week',\r\n day: 'day'\r\n },\r\n // buttonIcons: null,\r\n allDayText: 'all-day',\r\n // allows setting a min-height to the event segment to prevent short events overlapping each other\r\n agendaEventMinHeight: 0,\r\n // jquery-ui theming\r\n theme: false,\r\n // themeButtonIcons: null,\r\n // eventResizableFromStart: false,\r\n dragOpacity: .75,\r\n dragRevertDuration: 500,\r\n dragScroll: true,\r\n // selectable: false,\r\n unselectAuto: true,\r\n // selectMinDistance: 0,\r\n dropAccept: '*',\r\n eventOrder: 'title',\r\n // eventRenderWait: null,\r\n eventLimit: false,\r\n eventLimitText: 'more',\r\n eventLimitClick: 'popover',\r\n dayPopoverFormat: 'LL',\r\n handleWindowResize: true,\r\n windowResizeDelay: 100,\r\n longPressDelay: 1000\r\n};\r\nexports.englishDefaults = {\r\n dayPopoverFormat: 'dddd, MMMM D'\r\n};\r\nexports.rtlDefaults = {\r\n header: {\r\n left: 'next,prev today',\r\n center: '',\r\n right: 'title'\r\n },\r\n buttonIcons: {\r\n prev: 'right-single-arrow',\r\n next: 'left-single-arrow',\r\n prevYear: 'right-double-arrow',\r\n nextYear: 'left-double-arrow'\r\n },\r\n themeButtonIcons: {\r\n prev: 'circle-triangle-e',\r\n next: 'circle-triangle-w',\r\n nextYear: 'seek-prev',\r\n prevYear: 'seek-next'\r\n }\r\n};\r\nvar complexOptions = [\r\n 'header',\r\n 'footer',\r\n 'buttonText',\r\n 'buttonIcons',\r\n 'themeButtonIcons'\r\n];\r\n// Merges an array of option objects into a single object\r\nfunction mergeOptions(optionObjs) {\r\n return util_1.mergeProps(optionObjs, complexOptions);\r\n}\r\nexports.mergeOptions = mergeOptions;\r\n\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventFootprint = /** @class */ (function () {\r\n function EventFootprint(componentFootprint, eventDef, eventInstance) {\r\n this.componentFootprint = componentFootprint;\r\n this.eventDef = eventDef;\r\n if (eventInstance) {\r\n this.eventInstance = eventInstance;\r\n }\r\n }\r\n EventFootprint.prototype.getEventLegacy = function () {\r\n return (this.eventInstance || this.eventDef).toLegacy();\r\n };\r\n return EventFootprint;\r\n}());\r\nexports.default = EventFootprint;\r\n\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\n// Class that all other classes will inherit from\r\nvar Class = /** @class */ (function () {\r\n function Class() {\r\n }\r\n // Called on a class to create a subclass.\r\n // LIMITATION: cannot provide a constructor!\r\n Class.extend = function (members) {\r\n var SubClass = /** @class */ (function (_super) {\r\n tslib_1.__extends(SubClass, _super);\r\n function SubClass() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n return SubClass;\r\n }(this));\r\n util_1.copyOwnProps(members, SubClass.prototype);\r\n return SubClass;\r\n };\r\n // Adds new member variables/methods to the class's prototype.\r\n // Can be called with another class, or a plain object hash containing new members.\r\n Class.mixin = function (members) {\r\n util_1.copyOwnProps(members, this.prototype);\r\n };\r\n return Class;\r\n}());\r\nexports.default = Class;\r\n\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar RecurringEventDef_1 = __webpack_require__(54);\r\nexports.default = {\r\n parse: function (eventInput, source) {\r\n if (util_1.isTimeString(eventInput.start) || moment.isDuration(eventInput.start) ||\r\n util_1.isTimeString(eventInput.end) || moment.isDuration(eventInput.end)) {\r\n return RecurringEventDef_1.default.parse(eventInput, source);\r\n }\r\n else {\r\n return SingleEventDef_1.default.parse(eventInput, source);\r\n }\r\n }\r\n};\r\n\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar ParsableModelMixin_1 = __webpack_require__(52);\r\nvar EventDef = /** @class */ (function () {\r\n function EventDef(source) {\r\n this.source = source;\r\n this.className = [];\r\n this.miscProps = {};\r\n }\r\n EventDef.parse = function (rawInput, source) {\r\n var def = new this(source);\r\n if (def.applyProps(rawInput)) {\r\n return def;\r\n }\r\n return false;\r\n };\r\n EventDef.normalizeId = function (id) {\r\n return String(id);\r\n };\r\n EventDef.generateId = function () {\r\n return '_fc' + (EventDef.uuid++);\r\n };\r\n EventDef.prototype.clone = function () {\r\n var copy = new this.constructor(this.source);\r\n copy.id = this.id;\r\n copy.rawId = this.rawId;\r\n copy.uid = this.uid; // not really unique anymore :(\r\n EventDef.copyVerbatimStandardProps(this, copy);\r\n copy.className = this.className.slice(); // copy\r\n copy.miscProps = $.extend({}, this.miscProps);\r\n return copy;\r\n };\r\n EventDef.prototype.hasInverseRendering = function () {\r\n return this.getRendering() === 'inverse-background';\r\n };\r\n EventDef.prototype.hasBgRendering = function () {\r\n var rendering = this.getRendering();\r\n return rendering === 'inverse-background' || rendering === 'background';\r\n };\r\n EventDef.prototype.getRendering = function () {\r\n if (this.rendering != null) {\r\n return this.rendering;\r\n }\r\n return this.source.rendering;\r\n };\r\n EventDef.prototype.getConstraint = function () {\r\n if (this.constraint != null) {\r\n return this.constraint;\r\n }\r\n if (this.source.constraint != null) {\r\n return this.source.constraint;\r\n }\r\n return this.source.calendar.opt('eventConstraint'); // what about View option?\r\n };\r\n EventDef.prototype.getOverlap = function () {\r\n if (this.overlap != null) {\r\n return this.overlap;\r\n }\r\n if (this.source.overlap != null) {\r\n return this.source.overlap;\r\n }\r\n return this.source.calendar.opt('eventOverlap'); // what about View option?\r\n };\r\n EventDef.prototype.isStartExplicitlyEditable = function () {\r\n if (this.startEditable != null) {\r\n return this.startEditable;\r\n }\r\n return this.source.startEditable;\r\n };\r\n EventDef.prototype.isDurationExplicitlyEditable = function () {\r\n if (this.durationEditable != null) {\r\n return this.durationEditable;\r\n }\r\n return this.source.durationEditable;\r\n };\r\n EventDef.prototype.isExplicitlyEditable = function () {\r\n if (this.editable != null) {\r\n return this.editable;\r\n }\r\n return this.source.editable;\r\n };\r\n EventDef.prototype.toLegacy = function () {\r\n var obj = $.extend({}, this.miscProps);\r\n obj._id = this.uid;\r\n obj.source = this.source;\r\n obj.className = this.className.slice(); // copy\r\n obj.allDay = this.isAllDay();\r\n if (this.rawId != null) {\r\n obj.id = this.rawId;\r\n }\r\n EventDef.copyVerbatimStandardProps(this, obj);\r\n return obj;\r\n };\r\n EventDef.prototype.applyManualStandardProps = function (rawProps) {\r\n if (rawProps.id != null) {\r\n this.id = EventDef.normalizeId((this.rawId = rawProps.id));\r\n }\r\n else {\r\n this.id = EventDef.generateId();\r\n }\r\n if (rawProps._id != null) { // accept this prop, even tho somewhat internal\r\n this.uid = String(rawProps._id);\r\n }\r\n else {\r\n this.uid = EventDef.generateId();\r\n }\r\n // TODO: converge with EventSource\r\n if ($.isArray(rawProps.className)) {\r\n this.className = rawProps.className;\r\n }\r\n if (typeof rawProps.className === 'string') {\r\n this.className = rawProps.className.split(/\\s+/);\r\n }\r\n return true;\r\n };\r\n EventDef.prototype.applyMiscProps = function (rawProps) {\r\n $.extend(this.miscProps, rawProps);\r\n };\r\n EventDef.uuid = 0;\r\n EventDef.defineStandardProps = ParsableModelMixin_1.default.defineStandardProps;\r\n EventDef.copyVerbatimStandardProps = ParsableModelMixin_1.default.copyVerbatimStandardProps;\r\n return EventDef;\r\n}());\r\nexports.default = EventDef;\r\nParsableModelMixin_1.default.mixInto(EventDef);\r\nEventDef.defineStandardProps({\r\n // not automatically assigned (`false`)\r\n _id: false,\r\n id: false,\r\n className: false,\r\n source: false,\r\n // automatically assigned (`true`)\r\n title: true,\r\n url: true,\r\n rendering: true,\r\n constraint: true,\r\n overlap: true,\r\n editable: true,\r\n startEditable: true,\r\n durationEditable: true,\r\n color: true,\r\n backgroundColor: true,\r\n borderColor: true,\r\n textColor: true\r\n});\r\n\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.default = {\r\n sourceClasses: [],\r\n registerClass: function (EventSourceClass) {\r\n this.sourceClasses.unshift(EventSourceClass); // give highest priority\r\n },\r\n parse: function (rawInput, calendar) {\r\n var sourceClasses = this.sourceClasses;\r\n var i;\r\n var eventSource;\r\n for (i = 0; i < sourceClasses.length; i++) {\r\n eventSource = sourceClasses[i].parse(rawInput, calendar);\r\n if (eventSource) {\r\n return eventSource;\r\n }\r\n }\r\n }\r\n};\r\n\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar EventDef_1 = __webpack_require__(37);\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventDefMutation = /** @class */ (function () {\r\n function EventDefMutation() {\r\n }\r\n EventDefMutation.createFromRawProps = function (eventInstance, rawProps, largeUnit) {\r\n var eventDef = eventInstance.def;\r\n var dateProps = {};\r\n var standardProps = {};\r\n var miscProps = {};\r\n var verbatimStandardProps = {};\r\n var eventDefId = null;\r\n var className = null;\r\n var propName;\r\n var dateProfile;\r\n var dateMutation;\r\n var defMutation;\r\n for (propName in rawProps) {\r\n if (EventDateProfile_1.default.isStandardProp(propName)) {\r\n dateProps[propName] = rawProps[propName];\r\n }\r\n else if (eventDef.isStandardProp(propName)) {\r\n standardProps[propName] = rawProps[propName];\r\n }\r\n else if (eventDef.miscProps[propName] !== rawProps[propName]) { // only if changed\r\n miscProps[propName] = rawProps[propName];\r\n }\r\n }\r\n dateProfile = EventDateProfile_1.default.parse(dateProps, eventDef.source);\r\n if (dateProfile) { // no failure?\r\n dateMutation = EventDefDateMutation_1.default.createFromDiff(eventInstance.dateProfile, dateProfile, largeUnit);\r\n }\r\n if (standardProps.id !== eventDef.id) {\r\n eventDefId = standardProps.id; // only apply if there's a change\r\n }\r\n if (!util_1.isArraysEqual(standardProps.className, eventDef.className)) {\r\n className = standardProps.className; // only apply if there's a change\r\n }\r\n EventDef_1.default.copyVerbatimStandardProps(standardProps, // src\r\n verbatimStandardProps // dest\r\n );\r\n defMutation = new EventDefMutation();\r\n defMutation.eventDefId = eventDefId;\r\n defMutation.className = className;\r\n defMutation.verbatimStandardProps = verbatimStandardProps;\r\n defMutation.miscProps = miscProps;\r\n if (dateMutation) {\r\n defMutation.dateMutation = dateMutation;\r\n }\r\n return defMutation;\r\n };\r\n /*\r\n eventDef assumed to be a SingleEventDef.\r\n returns an undo function.\r\n */\r\n EventDefMutation.prototype.mutateSingle = function (eventDef) {\r\n var origDateProfile;\r\n if (this.dateMutation) {\r\n origDateProfile = eventDef.dateProfile;\r\n eventDef.dateProfile = this.dateMutation.buildNewDateProfile(origDateProfile, eventDef.source.calendar);\r\n }\r\n // can't undo\r\n // TODO: more DRY with EventDef::applyManualStandardProps\r\n if (this.eventDefId != null) {\r\n eventDef.id = EventDef_1.default.normalizeId((eventDef.rawId = this.eventDefId));\r\n }\r\n // can't undo\r\n // TODO: more DRY with EventDef::applyManualStandardProps\r\n if (this.className) {\r\n eventDef.className = this.className;\r\n }\r\n // can't undo\r\n if (this.verbatimStandardProps) {\r\n SingleEventDef_1.default.copyVerbatimStandardProps(this.verbatimStandardProps, // src\r\n eventDef // dest\r\n );\r\n }\r\n // can't undo\r\n if (this.miscProps) {\r\n eventDef.applyMiscProps(this.miscProps);\r\n }\r\n if (origDateProfile) {\r\n return function () {\r\n eventDef.dateProfile = origDateProfile;\r\n };\r\n }\r\n else {\r\n return function () { };\r\n }\r\n };\r\n EventDefMutation.prototype.setDateMutation = function (dateMutation) {\r\n if (dateMutation && !dateMutation.isEmpty()) {\r\n this.dateMutation = dateMutation;\r\n }\r\n else {\r\n this.dateMutation = null;\r\n }\r\n };\r\n EventDefMutation.prototype.isEmpty = function () {\r\n return !this.dateMutation;\r\n };\r\n return EventDefMutation;\r\n}());\r\nexports.default = EventDefMutation;\r\n\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar EventDefDateMutation = /** @class */ (function () {\r\n function EventDefDateMutation() {\r\n this.clearEnd = false;\r\n this.forceTimed = false;\r\n this.forceAllDay = false;\r\n }\r\n EventDefDateMutation.createFromDiff = function (dateProfile0, dateProfile1, largeUnit) {\r\n var clearEnd = dateProfile0.end && !dateProfile1.end;\r\n var forceTimed = dateProfile0.isAllDay() && !dateProfile1.isAllDay();\r\n var forceAllDay = !dateProfile0.isAllDay() && dateProfile1.isAllDay();\r\n var dateDelta;\r\n var endDiff;\r\n var endDelta;\r\n var mutation;\r\n // subtracts the dates in the appropriate way, returning a duration\r\n function subtractDates(date1, date0) {\r\n if (largeUnit) {\r\n return util_1.diffByUnit(date1, date0, largeUnit); // poorly named\r\n }\r\n else if (dateProfile1.isAllDay()) {\r\n return util_1.diffDay(date1, date0); // poorly named\r\n }\r\n else {\r\n return util_1.diffDayTime(date1, date0); // poorly named\r\n }\r\n }\r\n dateDelta = subtractDates(dateProfile1.start, dateProfile0.start);\r\n if (dateProfile1.end) {\r\n // use unzonedRanges because dateProfile0.end might be null\r\n endDiff = subtractDates(dateProfile1.unzonedRange.getEnd(), dateProfile0.unzonedRange.getEnd());\r\n endDelta = endDiff.subtract(dateDelta);\r\n }\r\n mutation = new EventDefDateMutation();\r\n mutation.clearEnd = clearEnd;\r\n mutation.forceTimed = forceTimed;\r\n mutation.forceAllDay = forceAllDay;\r\n mutation.setDateDelta(dateDelta);\r\n mutation.setEndDelta(endDelta);\r\n return mutation;\r\n };\r\n /*\r\n returns an undo function.\r\n */\r\n EventDefDateMutation.prototype.buildNewDateProfile = function (eventDateProfile, calendar) {\r\n var start = eventDateProfile.start.clone();\r\n var end = null;\r\n var shouldRezone = false;\r\n if (eventDateProfile.end && !this.clearEnd) {\r\n end = eventDateProfile.end.clone();\r\n }\r\n else if (this.endDelta && !end) {\r\n end = calendar.getDefaultEventEnd(eventDateProfile.isAllDay(), start);\r\n }\r\n if (this.forceTimed) {\r\n shouldRezone = true;\r\n if (!start.hasTime()) {\r\n start.time(0);\r\n }\r\n if (end && !end.hasTime()) {\r\n end.time(0);\r\n }\r\n }\r\n else if (this.forceAllDay) {\r\n if (start.hasTime()) {\r\n start.stripTime();\r\n }\r\n if (end && end.hasTime()) {\r\n end.stripTime();\r\n }\r\n }\r\n if (this.dateDelta) {\r\n shouldRezone = true;\r\n start.add(this.dateDelta);\r\n if (end) {\r\n end.add(this.dateDelta);\r\n }\r\n }\r\n // do this before adding startDelta to start, so we can work off of start\r\n if (this.endDelta) {\r\n shouldRezone = true;\r\n end.add(this.endDelta);\r\n }\r\n if (this.startDelta) {\r\n shouldRezone = true;\r\n start.add(this.startDelta);\r\n }\r\n if (shouldRezone) {\r\n start = calendar.applyTimezone(start);\r\n if (end) {\r\n end = calendar.applyTimezone(end);\r\n }\r\n }\r\n // TODO: okay to access calendar option?\r\n if (!end && calendar.opt('forceEventDuration')) {\r\n end = calendar.getDefaultEventEnd(eventDateProfile.isAllDay(), start);\r\n }\r\n return new EventDateProfile_1.default(start, end, calendar);\r\n };\r\n EventDefDateMutation.prototype.setDateDelta = function (dateDelta) {\r\n if (dateDelta && dateDelta.valueOf()) {\r\n this.dateDelta = dateDelta;\r\n }\r\n else {\r\n this.dateDelta = null;\r\n }\r\n };\r\n EventDefDateMutation.prototype.setStartDelta = function (startDelta) {\r\n if (startDelta && startDelta.valueOf()) {\r\n this.startDelta = startDelta;\r\n }\r\n else {\r\n this.startDelta = null;\r\n }\r\n };\r\n EventDefDateMutation.prototype.setEndDelta = function (endDelta) {\r\n if (endDelta && endDelta.valueOf()) {\r\n this.endDelta = endDelta;\r\n }\r\n else {\r\n this.endDelta = null;\r\n }\r\n };\r\n EventDefDateMutation.prototype.isEmpty = function () {\r\n return !this.clearEnd && !this.forceTimed && !this.forceAllDay &&\r\n !this.dateDelta && !this.startDelta && !this.endDelta;\r\n };\r\n return EventDefDateMutation;\r\n}());\r\nexports.default = EventDefDateMutation;\r\n\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Class_1 = __webpack_require__(35);\r\n/*\r\nEmbodies a div that has potential scrollbars\r\n*/\r\nvar Scroller = /** @class */ (function (_super) {\r\n tslib_1.__extends(Scroller, _super);\r\n function Scroller(options) {\r\n var _this = _super.call(this) || this;\r\n options = options || {};\r\n _this.overflowX = options.overflowX || options.overflow || 'auto';\r\n _this.overflowY = options.overflowY || options.overflow || 'auto';\r\n return _this;\r\n }\r\n Scroller.prototype.render = function () {\r\n this.el = this.renderEl();\r\n this.applyOverflow();\r\n };\r\n Scroller.prototype.renderEl = function () {\r\n return (this.scrollEl = $('
'));\r\n };\r\n // sets to natural height, unlocks overflow\r\n Scroller.prototype.clear = function () {\r\n this.setHeight('auto');\r\n this.applyOverflow();\r\n };\r\n Scroller.prototype.destroy = function () {\r\n this.el.remove();\r\n };\r\n // Overflow\r\n // -----------------------------------------------------------------------------------------------------------------\r\n Scroller.prototype.applyOverflow = function () {\r\n this.scrollEl.css({\r\n 'overflow-x': this.overflowX,\r\n 'overflow-y': this.overflowY\r\n });\r\n };\r\n // Causes any 'auto' overflow values to resolves to 'scroll' or 'hidden'.\r\n // Useful for preserving scrollbar widths regardless of future resizes.\r\n // Can pass in scrollbarWidths for optimization.\r\n Scroller.prototype.lockOverflow = function (scrollbarWidths) {\r\n var overflowX = this.overflowX;\r\n var overflowY = this.overflowY;\r\n scrollbarWidths = scrollbarWidths || this.getScrollbarWidths();\r\n if (overflowX === 'auto') {\r\n overflowX = (scrollbarWidths.top || scrollbarWidths.bottom || // horizontal scrollbars?\r\n // OR scrolling pane with massless scrollbars?\r\n this.scrollEl[0].scrollWidth - 1 > this.scrollEl[0].clientWidth\r\n // subtract 1 because of IE off-by-one issue\r\n ) ? 'scroll' : 'hidden';\r\n }\r\n if (overflowY === 'auto') {\r\n overflowY = (scrollbarWidths.left || scrollbarWidths.right || // vertical scrollbars?\r\n // OR scrolling pane with massless scrollbars?\r\n this.scrollEl[0].scrollHeight - 1 > this.scrollEl[0].clientHeight\r\n // subtract 1 because of IE off-by-one issue\r\n ) ? 'scroll' : 'hidden';\r\n }\r\n this.scrollEl.css({ 'overflow-x': overflowX, 'overflow-y': overflowY });\r\n };\r\n // Getters / Setters\r\n // -----------------------------------------------------------------------------------------------------------------\r\n Scroller.prototype.setHeight = function (height) {\r\n this.scrollEl.height(height);\r\n };\r\n Scroller.prototype.getScrollTop = function () {\r\n return this.scrollEl.scrollTop();\r\n };\r\n Scroller.prototype.setScrollTop = function (top) {\r\n this.scrollEl.scrollTop(top);\r\n };\r\n Scroller.prototype.getClientWidth = function () {\r\n return this.scrollEl[0].clientWidth;\r\n };\r\n Scroller.prototype.getClientHeight = function () {\r\n return this.scrollEl[0].clientHeight;\r\n };\r\n Scroller.prototype.getScrollbarWidths = function () {\r\n return util_1.getScrollbarWidths(this.scrollEl);\r\n };\r\n return Scroller;\r\n}(Class_1.default));\r\nexports.default = Scroller;\r\n\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar DateComponent_1 = __webpack_require__(231);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar InteractiveDateComponent = /** @class */ (function (_super) {\r\n tslib_1.__extends(InteractiveDateComponent, _super);\r\n function InteractiveDateComponent(_view, _options) {\r\n var _this = _super.call(this, _view, _options) || this;\r\n // self-config, overridable by subclasses\r\n _this.segSelector = '.fc-event-container > *'; // what constitutes an event element?\r\n if (_this.dateSelectingClass) {\r\n _this.dateClicking = new _this.dateClickingClass(_this);\r\n }\r\n if (_this.dateSelectingClass) {\r\n _this.dateSelecting = new _this.dateSelectingClass(_this);\r\n }\r\n if (_this.eventPointingClass) {\r\n _this.eventPointing = new _this.eventPointingClass(_this);\r\n }\r\n if (_this.eventDraggingClass && _this.eventPointing) {\r\n _this.eventDragging = new _this.eventDraggingClass(_this, _this.eventPointing);\r\n }\r\n if (_this.eventResizingClass && _this.eventPointing) {\r\n _this.eventResizing = new _this.eventResizingClass(_this, _this.eventPointing);\r\n }\r\n if (_this.externalDroppingClass) {\r\n _this.externalDropping = new _this.externalDroppingClass(_this);\r\n }\r\n return _this;\r\n }\r\n // Sets the container element that the view should render inside of, does global DOM-related initializations,\r\n // and renders all the non-date-related content inside.\r\n InteractiveDateComponent.prototype.setElement = function (el) {\r\n _super.prototype.setElement.call(this, el);\r\n if (this.dateClicking) {\r\n this.dateClicking.bindToEl(el);\r\n }\r\n if (this.dateSelecting) {\r\n this.dateSelecting.bindToEl(el);\r\n }\r\n this.bindAllSegHandlersToEl(el);\r\n };\r\n InteractiveDateComponent.prototype.removeElement = function () {\r\n this.endInteractions();\r\n _super.prototype.removeElement.call(this);\r\n };\r\n InteractiveDateComponent.prototype.executeEventUnrender = function () {\r\n this.endInteractions();\r\n _super.prototype.executeEventUnrender.call(this);\r\n };\r\n InteractiveDateComponent.prototype.bindGlobalHandlers = function () {\r\n _super.prototype.bindGlobalHandlers.call(this);\r\n if (this.externalDropping) {\r\n this.externalDropping.bindToDocument();\r\n }\r\n };\r\n InteractiveDateComponent.prototype.unbindGlobalHandlers = function () {\r\n _super.prototype.unbindGlobalHandlers.call(this);\r\n if (this.externalDropping) {\r\n this.externalDropping.unbindFromDocument();\r\n }\r\n };\r\n InteractiveDateComponent.prototype.bindDateHandlerToEl = function (el, name, handler) {\r\n var _this = this;\r\n // attach a handler to the grid's root element.\r\n // jQuery will take care of unregistering them when removeElement gets called.\r\n this.el.on(name, function (ev) {\r\n if (!$(ev.target).is(_this.segSelector + ':not(.fc-helper),' + // directly on an event element\r\n _this.segSelector + ':not(.fc-helper) *,' + // within an event element\r\n '.fc-more,' + // a \"more..\" link\r\n 'a[data-goto]' // a clickable nav link\r\n )) {\r\n return handler.call(_this, ev);\r\n }\r\n });\r\n };\r\n InteractiveDateComponent.prototype.bindAllSegHandlersToEl = function (el) {\r\n [\r\n this.eventPointing,\r\n this.eventDragging,\r\n this.eventResizing\r\n ].forEach(function (eventInteraction) {\r\n if (eventInteraction) {\r\n eventInteraction.bindToEl(el);\r\n }\r\n });\r\n };\r\n InteractiveDateComponent.prototype.bindSegHandlerToEl = function (el, name, handler) {\r\n var _this = this;\r\n el.on(name, this.segSelector, function (ev) {\r\n var segEl = $(ev.currentTarget);\r\n if (!segEl.is('.fc-helper')) {\r\n var seg = segEl.data('fc-seg'); // grab segment data. put there by View::renderEventsPayload\r\n if (seg && !_this.shouldIgnoreEventPointing()) {\r\n return handler.call(_this, seg, ev); // context will be the Grid\r\n }\r\n }\r\n });\r\n };\r\n InteractiveDateComponent.prototype.shouldIgnoreMouse = function () {\r\n // HACK\r\n // This will still work even though bindDateHandlerToEl doesn't use GlobalEmitter.\r\n return GlobalEmitter_1.default.get().shouldIgnoreMouse();\r\n };\r\n InteractiveDateComponent.prototype.shouldIgnoreTouch = function () {\r\n var view = this._getView();\r\n // On iOS (and Android?) when a new selection is initiated overtop another selection,\r\n // the touchend never fires because the elements gets removed mid-touch-interaction (my theory).\r\n // HACK: simply don't allow this to happen.\r\n // ALSO: prevent selection when an *event* is already raised.\r\n return view.isSelected || view.selectedEvent;\r\n };\r\n InteractiveDateComponent.prototype.shouldIgnoreEventPointing = function () {\r\n // only call the handlers if there is not a drag/resize in progress\r\n return (this.eventDragging && this.eventDragging.isDragging) ||\r\n (this.eventResizing && this.eventResizing.isResizing);\r\n };\r\n InteractiveDateComponent.prototype.canStartSelection = function (seg, ev) {\r\n return util_1.getEvIsTouch(ev) &&\r\n !this.canStartResize(seg, ev) &&\r\n (this.isEventDefDraggable(seg.footprint.eventDef) ||\r\n this.isEventDefResizable(seg.footprint.eventDef));\r\n };\r\n InteractiveDateComponent.prototype.canStartDrag = function (seg, ev) {\r\n return !this.canStartResize(seg, ev) &&\r\n this.isEventDefDraggable(seg.footprint.eventDef);\r\n };\r\n InteractiveDateComponent.prototype.canStartResize = function (seg, ev) {\r\n var view = this._getView();\r\n var eventDef = seg.footprint.eventDef;\r\n return (!util_1.getEvIsTouch(ev) || view.isEventDefSelected(eventDef)) &&\r\n this.isEventDefResizable(eventDef) &&\r\n $(ev.target).is('.fc-resizer');\r\n };\r\n // Kills all in-progress dragging.\r\n // Useful for when public API methods that result in re-rendering are invoked during a drag.\r\n // Also useful for when touch devices misbehave and don't fire their touchend.\r\n InteractiveDateComponent.prototype.endInteractions = function () {\r\n [\r\n this.dateClicking,\r\n this.dateSelecting,\r\n this.eventPointing,\r\n this.eventDragging,\r\n this.eventResizing\r\n ].forEach(function (interaction) {\r\n if (interaction) {\r\n interaction.end();\r\n }\r\n });\r\n };\r\n // Event Drag-n-Drop\r\n // ---------------------------------------------------------------------------------------------------------------\r\n // Computes if the given event is allowed to be dragged by the user\r\n InteractiveDateComponent.prototype.isEventDefDraggable = function (eventDef) {\r\n return this.isEventDefStartEditable(eventDef);\r\n };\r\n InteractiveDateComponent.prototype.isEventDefStartEditable = function (eventDef) {\r\n var isEditable = eventDef.isStartExplicitlyEditable();\r\n if (isEditable == null) {\r\n isEditable = this.opt('eventStartEditable');\r\n if (isEditable == null) {\r\n isEditable = this.isEventDefGenerallyEditable(eventDef);\r\n }\r\n }\r\n return isEditable;\r\n };\r\n InteractiveDateComponent.prototype.isEventDefGenerallyEditable = function (eventDef) {\r\n var isEditable = eventDef.isExplicitlyEditable();\r\n if (isEditable == null) {\r\n isEditable = this.opt('editable');\r\n }\r\n return isEditable;\r\n };\r\n // Event Resizing\r\n // ---------------------------------------------------------------------------------------------------------------\r\n // Computes if the given event is allowed to be resized from its starting edge\r\n InteractiveDateComponent.prototype.isEventDefResizableFromStart = function (eventDef) {\r\n return this.opt('eventResizableFromStart') && this.isEventDefResizable(eventDef);\r\n };\r\n // Computes if the given event is allowed to be resized from its ending edge\r\n InteractiveDateComponent.prototype.isEventDefResizableFromEnd = function (eventDef) {\r\n return this.isEventDefResizable(eventDef);\r\n };\r\n // Computes if the given event is allowed to be resized by the user at all\r\n InteractiveDateComponent.prototype.isEventDefResizable = function (eventDef) {\r\n var isResizable = eventDef.isDurationExplicitlyEditable();\r\n if (isResizable == null) {\r\n isResizable = this.opt('eventDurationEditable');\r\n if (isResizable == null) {\r\n isResizable = this.isEventDefGenerallyEditable(eventDef);\r\n }\r\n }\r\n return isResizable;\r\n };\r\n // Event Mutation / Constraints\r\n // ---------------------------------------------------------------------------------------------------------------\r\n // Diffs the two dates, returning a duration, based on granularity of the grid\r\n // TODO: port isTimeScale into this system?\r\n InteractiveDateComponent.prototype.diffDates = function (a, b) {\r\n if (this.largeUnit) {\r\n return util_1.diffByUnit(a, b, this.largeUnit);\r\n }\r\n else {\r\n return util_1.diffDayTime(a, b);\r\n }\r\n };\r\n // is it allowed, in relation to the view's validRange?\r\n // NOTE: very similar to isExternalInstanceGroupAllowed\r\n InteractiveDateComponent.prototype.isEventInstanceGroupAllowed = function (eventInstanceGroup) {\r\n var view = this._getView();\r\n var dateProfile = this.dateProfile;\r\n var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\r\n var i;\r\n for (i = 0; i < eventFootprints.length; i++) {\r\n // TODO: just use getAllEventRanges directly\r\n if (!dateProfile.validUnzonedRange.containsRange(eventFootprints[i].componentFootprint.unzonedRange)) {\r\n return false;\r\n }\r\n }\r\n return view.calendar.constraints.isEventInstanceGroupAllowed(eventInstanceGroup);\r\n };\r\n // NOTE: very similar to isEventInstanceGroupAllowed\r\n // when it's a completely anonymous external drag, no event.\r\n InteractiveDateComponent.prototype.isExternalInstanceGroupAllowed = function (eventInstanceGroup) {\r\n var view = this._getView();\r\n var dateProfile = this.dateProfile;\r\n var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\r\n var i;\r\n for (i = 0; i < eventFootprints.length; i++) {\r\n if (!dateProfile.validUnzonedRange.containsRange(eventFootprints[i].componentFootprint.unzonedRange)) {\r\n return false;\r\n }\r\n }\r\n for (i = 0; i < eventFootprints.length; i++) {\r\n // treat it as a selection\r\n // TODO: pass in eventInstanceGroup instead\r\n // because we don't want calendar's constraint system to depend on a component's\r\n // determination of footprints.\r\n if (!view.calendar.constraints.isSelectionFootprintAllowed(eventFootprints[i].componentFootprint)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n return InteractiveDateComponent;\r\n}(DateComponent_1.default));\r\nexports.default = InteractiveDateComponent;\r\n\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar RenderQueue_1 = __webpack_require__(229);\r\nvar DateProfileGenerator_1 = __webpack_require__(55);\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\n/* An abstract class from which other views inherit from\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar View = /** @class */ (function (_super) {\r\n tslib_1.__extends(View, _super);\r\n function View(calendar, viewSpec) {\r\n var _this = _super.call(this, null, viewSpec.options) || this;\r\n _this.batchRenderDepth = 0;\r\n _this.isSelected = false; // boolean whether a range of time is user-selected or not\r\n _this.calendar = calendar;\r\n _this.viewSpec = viewSpec;\r\n // shortcuts\r\n _this.type = viewSpec.type;\r\n // .name is deprecated\r\n _this.name = _this.type;\r\n _this.initRenderQueue();\r\n _this.initHiddenDays();\r\n _this.dateProfileGenerator = new _this.dateProfileGeneratorClass(_this);\r\n _this.bindBaseRenderHandlers();\r\n _this.eventOrderSpecs = util_1.parseFieldSpecs(_this.opt('eventOrder'));\r\n // legacy\r\n if (_this['initialize']) {\r\n _this['initialize']();\r\n }\r\n return _this;\r\n }\r\n View.prototype._getView = function () {\r\n return this;\r\n };\r\n // Retrieves an option with the given name\r\n View.prototype.opt = function (name) {\r\n return this.options[name];\r\n };\r\n /* Render Queue\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n View.prototype.initRenderQueue = function () {\r\n this.renderQueue = new RenderQueue_1.default({\r\n event: this.opt('eventRenderWait')\r\n });\r\n this.renderQueue.on('start', this.onRenderQueueStart.bind(this));\r\n this.renderQueue.on('stop', this.onRenderQueueStop.bind(this));\r\n this.on('before:change', this.startBatchRender);\r\n this.on('change', this.stopBatchRender);\r\n };\r\n View.prototype.onRenderQueueStart = function () {\r\n this.calendar.freezeContentHeight();\r\n this.addScroll(this.queryScroll());\r\n };\r\n View.prototype.onRenderQueueStop = function () {\r\n if (this.calendar.updateViewSize()) { // success?\r\n this.popScroll();\r\n }\r\n this.calendar.thawContentHeight();\r\n };\r\n View.prototype.startBatchRender = function () {\r\n if (!(this.batchRenderDepth++)) {\r\n this.renderQueue.pause();\r\n }\r\n };\r\n View.prototype.stopBatchRender = function () {\r\n if (!(--this.batchRenderDepth)) {\r\n this.renderQueue.resume();\r\n }\r\n };\r\n View.prototype.requestRender = function (func, namespace, actionType) {\r\n this.renderQueue.queue(func, namespace, actionType);\r\n };\r\n // given func will auto-bind to `this`\r\n View.prototype.whenSizeUpdated = function (func) {\r\n if (this.renderQueue.isRunning) {\r\n this.renderQueue.one('stop', func.bind(this));\r\n }\r\n else {\r\n func.call(this);\r\n }\r\n };\r\n /* Title and Date Formatting\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Computes what the title at the top of the calendar should be for this view\r\n View.prototype.computeTitle = function (dateProfile) {\r\n var unzonedRange;\r\n // for views that span a large unit of time, show the proper interval, ignoring stray days before and after\r\n if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) {\r\n unzonedRange = dateProfile.currentUnzonedRange;\r\n }\r\n else { // for day units or smaller, use the actual day range\r\n unzonedRange = dateProfile.activeUnzonedRange;\r\n }\r\n return this.formatRange({\r\n start: this.calendar.msToMoment(unzonedRange.startMs, dateProfile.isRangeAllDay),\r\n end: this.calendar.msToMoment(unzonedRange.endMs, dateProfile.isRangeAllDay)\r\n }, dateProfile.isRangeAllDay, this.opt('titleFormat') || this.computeTitleFormat(dateProfile), this.opt('titleRangeSeparator'));\r\n };\r\n // Generates the format string that should be used to generate the title for the current date range.\r\n // Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.\r\n View.prototype.computeTitleFormat = function (dateProfile) {\r\n var currentRangeUnit = dateProfile.currentRangeUnit;\r\n if (currentRangeUnit === 'year') {\r\n return 'YYYY';\r\n }\r\n else if (currentRangeUnit === 'month') {\r\n return this.opt('monthYearFormat'); // like \"September 2014\"\r\n }\r\n else if (dateProfile.currentUnzonedRange.as('days') > 1) {\r\n return 'll'; // multi-day range. shorter, like \"Sep 9 - 10 2014\"\r\n }\r\n else {\r\n return 'LL'; // one day. longer, like \"September 9 2014\"\r\n }\r\n };\r\n // Date Setting/Unsetting\r\n // -----------------------------------------------------------------------------------------------------------------\r\n View.prototype.setDate = function (date) {\r\n var currentDateProfile = this.get('dateProfile');\r\n var newDateProfile = this.dateProfileGenerator.build(date, undefined, true); // forceToValid=true\r\n if (!currentDateProfile ||\r\n !currentDateProfile.activeUnzonedRange.equals(newDateProfile.activeUnzonedRange)) {\r\n this.set('dateProfile', newDateProfile);\r\n }\r\n };\r\n View.prototype.unsetDate = function () {\r\n this.unset('dateProfile');\r\n };\r\n // Event Data\r\n // -----------------------------------------------------------------------------------------------------------------\r\n View.prototype.fetchInitialEvents = function (dateProfile) {\r\n var calendar = this.calendar;\r\n var forceAllDay = dateProfile.isRangeAllDay && !this.usesMinMaxTime;\r\n return calendar.requestEvents(calendar.msToMoment(dateProfile.activeUnzonedRange.startMs, forceAllDay), calendar.msToMoment(dateProfile.activeUnzonedRange.endMs, forceAllDay));\r\n };\r\n View.prototype.bindEventChanges = function () {\r\n this.listenTo(this.calendar, 'eventsReset', this.resetEvents); // TODO: make this a real event\r\n };\r\n View.prototype.unbindEventChanges = function () {\r\n this.stopListeningTo(this.calendar, 'eventsReset');\r\n };\r\n View.prototype.setEvents = function (eventsPayload) {\r\n this.set('currentEvents', eventsPayload);\r\n this.set('hasEvents', true);\r\n };\r\n View.prototype.unsetEvents = function () {\r\n this.unset('currentEvents');\r\n this.unset('hasEvents');\r\n };\r\n View.prototype.resetEvents = function (eventsPayload) {\r\n this.startBatchRender();\r\n this.unsetEvents();\r\n this.setEvents(eventsPayload);\r\n this.stopBatchRender();\r\n };\r\n // Date High-level Rendering\r\n // -----------------------------------------------------------------------------------------------------------------\r\n View.prototype.requestDateRender = function (dateProfile) {\r\n var _this = this;\r\n this.requestRender(function () {\r\n _this.executeDateRender(dateProfile);\r\n }, 'date', 'init');\r\n };\r\n View.prototype.requestDateUnrender = function () {\r\n var _this = this;\r\n this.requestRender(function () {\r\n _this.executeDateUnrender();\r\n }, 'date', 'destroy');\r\n };\r\n // if dateProfile not specified, uses current\r\n View.prototype.executeDateRender = function (dateProfile) {\r\n _super.prototype.executeDateRender.call(this, dateProfile);\r\n if (this['render']) {\r\n this['render'](); // TODO: deprecate\r\n }\r\n this.trigger('datesRendered');\r\n this.addScroll({ isDateInit: true });\r\n this.startNowIndicator(); // shouldn't render yet because updateSize will be called soon\r\n };\r\n View.prototype.executeDateUnrender = function () {\r\n this.unselect();\r\n this.stopNowIndicator();\r\n this.trigger('before:datesUnrendered');\r\n if (this['destroy']) {\r\n this['destroy'](); // TODO: deprecate\r\n }\r\n _super.prototype.executeDateUnrender.call(this);\r\n };\r\n // \"Base\" rendering\r\n // -----------------------------------------------------------------------------------------------------------------\r\n View.prototype.bindBaseRenderHandlers = function () {\r\n var _this = this;\r\n this.on('datesRendered', function () {\r\n _this.whenSizeUpdated(_this.triggerViewRender);\r\n });\r\n this.on('before:datesUnrendered', function () {\r\n _this.triggerViewDestroy();\r\n });\r\n };\r\n View.prototype.triggerViewRender = function () {\r\n this.publiclyTrigger('viewRender', {\r\n context: this,\r\n args: [this, this.el]\r\n });\r\n };\r\n View.prototype.triggerViewDestroy = function () {\r\n this.publiclyTrigger('viewDestroy', {\r\n context: this,\r\n args: [this, this.el]\r\n });\r\n };\r\n // Event High-level Rendering\r\n // -----------------------------------------------------------------------------------------------------------------\r\n View.prototype.requestEventsRender = function (eventsPayload) {\r\n var _this = this;\r\n this.requestRender(function () {\r\n _this.executeEventRender(eventsPayload);\r\n _this.whenSizeUpdated(_this.triggerAfterEventsRendered);\r\n }, 'event', 'init');\r\n };\r\n View.prototype.requestEventsUnrender = function () {\r\n var _this = this;\r\n this.requestRender(function () {\r\n _this.triggerBeforeEventsDestroyed();\r\n _this.executeEventUnrender();\r\n }, 'event', 'destroy');\r\n };\r\n // Business Hour High-level Rendering\r\n // -----------------------------------------------------------------------------------------------------------------\r\n View.prototype.requestBusinessHoursRender = function (businessHourGenerator) {\r\n var _this = this;\r\n this.requestRender(function () {\r\n _this.renderBusinessHours(businessHourGenerator);\r\n }, 'businessHours', 'init');\r\n };\r\n View.prototype.requestBusinessHoursUnrender = function () {\r\n var _this = this;\r\n this.requestRender(function () {\r\n _this.unrenderBusinessHours();\r\n }, 'businessHours', 'destroy');\r\n };\r\n // Misc view rendering utils\r\n // -----------------------------------------------------------------------------------------------------------------\r\n // Binds DOM handlers to elements that reside outside the view container, such as the document\r\n View.prototype.bindGlobalHandlers = function () {\r\n _super.prototype.bindGlobalHandlers.call(this);\r\n this.listenTo(GlobalEmitter_1.default.get(), {\r\n touchstart: this.processUnselect,\r\n mousedown: this.handleDocumentMousedown\r\n });\r\n };\r\n // Unbinds DOM handlers from elements that reside outside the view container\r\n View.prototype.unbindGlobalHandlers = function () {\r\n _super.prototype.unbindGlobalHandlers.call(this);\r\n this.stopListeningTo(GlobalEmitter_1.default.get());\r\n };\r\n /* Now Indicator\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Immediately render the current time indicator and begins re-rendering it at an interval,\r\n // which is defined by this.getNowIndicatorUnit().\r\n // TODO: somehow do this for the current whole day's background too\r\n View.prototype.startNowIndicator = function () {\r\n var _this = this;\r\n var unit;\r\n var update;\r\n var delay; // ms wait value\r\n if (this.opt('nowIndicator')) {\r\n unit = this.getNowIndicatorUnit();\r\n if (unit) {\r\n update = util_1.proxy(this, 'updateNowIndicator'); // bind to `this`\r\n this.initialNowDate = this.calendar.getNow();\r\n this.initialNowQueriedMs = new Date().valueOf();\r\n // wait until the beginning of the next interval\r\n delay = this.initialNowDate.clone().startOf(unit).add(1, unit).valueOf() - this.initialNowDate.valueOf();\r\n this.nowIndicatorTimeoutID = setTimeout(function () {\r\n _this.nowIndicatorTimeoutID = null;\r\n update();\r\n delay = +moment.duration(1, unit);\r\n delay = Math.max(100, delay); // prevent too frequent\r\n _this.nowIndicatorIntervalID = setInterval(update, delay); // update every interval\r\n }, delay);\r\n }\r\n // rendering will be initiated in updateSize\r\n }\r\n };\r\n // rerenders the now indicator, computing the new current time from the amount of time that has passed\r\n // since the initial getNow call.\r\n View.prototype.updateNowIndicator = function () {\r\n if (this.isDatesRendered &&\r\n this.initialNowDate // activated before?\r\n ) {\r\n this.unrenderNowIndicator(); // won't unrender if unnecessary\r\n this.renderNowIndicator(this.initialNowDate.clone().add(new Date().valueOf() - this.initialNowQueriedMs) // add ms\r\n );\r\n this.isNowIndicatorRendered = true;\r\n }\r\n };\r\n // Immediately unrenders the view's current time indicator and stops any re-rendering timers.\r\n // Won't cause side effects if indicator isn't rendered.\r\n View.prototype.stopNowIndicator = function () {\r\n if (this.isNowIndicatorRendered) {\r\n if (this.nowIndicatorTimeoutID) {\r\n clearTimeout(this.nowIndicatorTimeoutID);\r\n this.nowIndicatorTimeoutID = null;\r\n }\r\n if (this.nowIndicatorIntervalID) {\r\n clearInterval(this.nowIndicatorIntervalID);\r\n this.nowIndicatorIntervalID = null;\r\n }\r\n this.unrenderNowIndicator();\r\n this.isNowIndicatorRendered = false;\r\n }\r\n };\r\n /* Dimensions\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n View.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n if (this['setHeight']) { // for legacy API\r\n this['setHeight'](totalHeight, isAuto);\r\n }\r\n else {\r\n _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n }\r\n this.updateNowIndicator();\r\n };\r\n /* Scroller\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n View.prototype.addScroll = function (scroll) {\r\n var queuedScroll = this.queuedScroll || (this.queuedScroll = {});\r\n $.extend(queuedScroll, scroll);\r\n };\r\n View.prototype.popScroll = function () {\r\n this.applyQueuedScroll();\r\n this.queuedScroll = null;\r\n };\r\n View.prototype.applyQueuedScroll = function () {\r\n if (this.queuedScroll) {\r\n this.applyScroll(this.queuedScroll);\r\n }\r\n };\r\n View.prototype.queryScroll = function () {\r\n var scroll = {};\r\n if (this.isDatesRendered) {\r\n $.extend(scroll, this.queryDateScroll());\r\n }\r\n return scroll;\r\n };\r\n View.prototype.applyScroll = function (scroll) {\r\n if (scroll.isDateInit && this.isDatesRendered) {\r\n $.extend(scroll, this.computeInitialDateScroll());\r\n }\r\n if (this.isDatesRendered) {\r\n this.applyDateScroll(scroll);\r\n }\r\n };\r\n View.prototype.computeInitialDateScroll = function () {\r\n return {}; // subclasses must implement\r\n };\r\n View.prototype.queryDateScroll = function () {\r\n return {}; // subclasses must implement\r\n };\r\n View.prototype.applyDateScroll = function (scroll) {\r\n // subclasses must implement\r\n };\r\n /* Event Drag-n-Drop\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n View.prototype.reportEventDrop = function (eventInstance, eventMutation, el, ev) {\r\n var eventManager = this.calendar.eventManager;\r\n var undoFunc = eventManager.mutateEventsWithId(eventInstance.def.id, eventMutation);\r\n var dateMutation = eventMutation.dateMutation;\r\n // update the EventInstance, for handlers\r\n if (dateMutation) {\r\n eventInstance.dateProfile = dateMutation.buildNewDateProfile(eventInstance.dateProfile, this.calendar);\r\n }\r\n this.triggerEventDrop(eventInstance, \r\n // a drop doesn't necessarily mean a date mutation (ex: resource change)\r\n (dateMutation && dateMutation.dateDelta) || moment.duration(), undoFunc, el, ev);\r\n };\r\n // Triggers event-drop handlers that have subscribed via the API\r\n View.prototype.triggerEventDrop = function (eventInstance, dateDelta, undoFunc, el, ev) {\r\n this.publiclyTrigger('eventDrop', {\r\n context: el[0],\r\n args: [\r\n eventInstance.toLegacy(),\r\n dateDelta,\r\n undoFunc,\r\n ev,\r\n {},\r\n this\r\n ]\r\n });\r\n };\r\n /* External Element Drag-n-Drop\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Must be called when an external element, via jQuery UI, has been dropped onto the calendar.\r\n // `meta` is the parsed data that has been embedded into the dragging event.\r\n // `dropLocation` is an object that contains the new zoned start/end/allDay values for the event.\r\n View.prototype.reportExternalDrop = function (singleEventDef, isEvent, isSticky, el, ev, ui) {\r\n if (isEvent) {\r\n this.calendar.eventManager.addEventDef(singleEventDef, isSticky);\r\n }\r\n this.triggerExternalDrop(singleEventDef, isEvent, el, ev, ui);\r\n };\r\n // Triggers external-drop handlers that have subscribed via the API\r\n View.prototype.triggerExternalDrop = function (singleEventDef, isEvent, el, ev, ui) {\r\n // trigger 'drop' regardless of whether element represents an event\r\n this.publiclyTrigger('drop', {\r\n context: el[0],\r\n args: [\r\n singleEventDef.dateProfile.start.clone(),\r\n ev,\r\n ui,\r\n this\r\n ]\r\n });\r\n if (isEvent) {\r\n // signal an external event landed\r\n this.publiclyTrigger('eventReceive', {\r\n context: this,\r\n args: [\r\n singleEventDef.buildInstance().toLegacy(),\r\n this\r\n ]\r\n });\r\n }\r\n };\r\n /* Event Resizing\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Must be called when an event in the view has been resized to a new length\r\n View.prototype.reportEventResize = function (eventInstance, eventMutation, el, ev) {\r\n var eventManager = this.calendar.eventManager;\r\n var undoFunc = eventManager.mutateEventsWithId(eventInstance.def.id, eventMutation);\r\n // update the EventInstance, for handlers\r\n eventInstance.dateProfile = eventMutation.dateMutation.buildNewDateProfile(eventInstance.dateProfile, this.calendar);\r\n var resizeDelta = eventMutation.dateMutation.endDelta || eventMutation.dateMutation.startDelta;\r\n this.triggerEventResize(eventInstance, resizeDelta, undoFunc, el, ev);\r\n };\r\n // Triggers event-resize handlers that have subscribed via the API\r\n View.prototype.triggerEventResize = function (eventInstance, resizeDelta, undoFunc, el, ev) {\r\n this.publiclyTrigger('eventResize', {\r\n context: el[0],\r\n args: [\r\n eventInstance.toLegacy(),\r\n resizeDelta,\r\n undoFunc,\r\n ev,\r\n {},\r\n this\r\n ]\r\n });\r\n };\r\n /* Selection (time range)\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Selects a date span on the view. `start` and `end` are both Moments.\r\n // `ev` is the native mouse event that begin the interaction.\r\n View.prototype.select = function (footprint, ev) {\r\n this.unselect(ev);\r\n this.renderSelectionFootprint(footprint);\r\n this.reportSelection(footprint, ev);\r\n };\r\n View.prototype.renderSelectionFootprint = function (footprint) {\r\n if (this['renderSelection']) { // legacy method in custom view classes\r\n this['renderSelection'](footprint.toLegacy(this.calendar));\r\n }\r\n else {\r\n _super.prototype.renderSelectionFootprint.call(this, footprint);\r\n }\r\n };\r\n // Called when a new selection is made. Updates internal state and triggers handlers.\r\n View.prototype.reportSelection = function (footprint, ev) {\r\n this.isSelected = true;\r\n this.triggerSelect(footprint, ev);\r\n };\r\n // Triggers handlers to 'select'\r\n View.prototype.triggerSelect = function (footprint, ev) {\r\n var dateProfile = this.calendar.footprintToDateProfile(footprint); // abuse of \"Event\"DateProfile?\r\n this.publiclyTrigger('select', {\r\n context: this,\r\n args: [\r\n dateProfile.start,\r\n dateProfile.end,\r\n ev,\r\n this\r\n ]\r\n });\r\n };\r\n // Undoes a selection. updates in the internal state and triggers handlers.\r\n // `ev` is the native mouse event that began the interaction.\r\n View.prototype.unselect = function (ev) {\r\n if (this.isSelected) {\r\n this.isSelected = false;\r\n if (this['destroySelection']) {\r\n this['destroySelection'](); // TODO: deprecate\r\n }\r\n this.unrenderSelection();\r\n this.publiclyTrigger('unselect', {\r\n context: this,\r\n args: [ev, this]\r\n });\r\n }\r\n };\r\n /* Event Selection\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n View.prototype.selectEventInstance = function (eventInstance) {\r\n if (!this.selectedEventInstance ||\r\n this.selectedEventInstance !== eventInstance) {\r\n this.unselectEventInstance();\r\n this.getEventSegs().forEach(function (seg) {\r\n if (seg.footprint.eventInstance === eventInstance &&\r\n seg.el // necessary?\r\n ) {\r\n seg.el.addClass('fc-selected');\r\n }\r\n });\r\n this.selectedEventInstance = eventInstance;\r\n }\r\n };\r\n View.prototype.unselectEventInstance = function () {\r\n if (this.selectedEventInstance) {\r\n this.getEventSegs().forEach(function (seg) {\r\n if (seg.el) { // necessary?\r\n seg.el.removeClass('fc-selected');\r\n }\r\n });\r\n this.selectedEventInstance = null;\r\n }\r\n };\r\n View.prototype.isEventDefSelected = function (eventDef) {\r\n // event references might change on refetchEvents(), while selectedEventInstance doesn't,\r\n // so compare IDs\r\n return this.selectedEventInstance && this.selectedEventInstance.def.id === eventDef.id;\r\n };\r\n /* Mouse / Touch Unselecting (time range & event unselection)\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // TODO: move consistently to down/start or up/end?\r\n // TODO: don't kill previous selection if touch scrolling\r\n View.prototype.handleDocumentMousedown = function (ev) {\r\n if (util_1.isPrimaryMouseButton(ev)) {\r\n this.processUnselect(ev);\r\n }\r\n };\r\n View.prototype.processUnselect = function (ev) {\r\n this.processRangeUnselect(ev);\r\n this.processEventUnselect(ev);\r\n };\r\n View.prototype.processRangeUnselect = function (ev) {\r\n var ignore;\r\n // is there a time-range selection?\r\n if (this.isSelected && this.opt('unselectAuto')) {\r\n // only unselect if the clicked element is not identical to or inside of an 'unselectCancel' element\r\n ignore = this.opt('unselectCancel');\r\n if (!ignore || !$(ev.target).closest(ignore).length) {\r\n this.unselect(ev);\r\n }\r\n }\r\n };\r\n View.prototype.processEventUnselect = function (ev) {\r\n if (this.selectedEventInstance) {\r\n if (!$(ev.target).closest('.fc-selected').length) {\r\n this.unselectEventInstance();\r\n }\r\n }\r\n };\r\n /* Triggers\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n View.prototype.triggerBaseRendered = function () {\r\n this.publiclyTrigger('viewRender', {\r\n context: this,\r\n args: [this, this.el]\r\n });\r\n };\r\n View.prototype.triggerBaseUnrendered = function () {\r\n this.publiclyTrigger('viewDestroy', {\r\n context: this,\r\n args: [this, this.el]\r\n });\r\n };\r\n // Triggers handlers to 'dayClick'\r\n // Span has start/end of the clicked area. Only the start is useful.\r\n View.prototype.triggerDayClick = function (footprint, dayEl, ev) {\r\n var dateProfile = this.calendar.footprintToDateProfile(footprint); // abuse of \"Event\"DateProfile?\r\n this.publiclyTrigger('dayClick', {\r\n context: dayEl,\r\n args: [dateProfile.start, ev, this]\r\n });\r\n };\r\n /* Date Utils\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // For DateComponent::getDayClasses\r\n View.prototype.isDateInOtherMonth = function (date, dateProfile) {\r\n return false;\r\n };\r\n // Arguments after name will be forwarded to a hypothetical function value\r\n // WARNING: passed-in arguments will be given to generator functions as-is and can cause side-effects.\r\n // Always clone your objects if you fear mutation.\r\n View.prototype.getUnzonedRangeOption = function (name) {\r\n var val = this.opt(name);\r\n if (typeof val === 'function') {\r\n val = val.apply(null, Array.prototype.slice.call(arguments, 1));\r\n }\r\n if (val) {\r\n return this.calendar.parseUnzonedRange(val);\r\n }\r\n };\r\n /* Hidden Days\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Initializes internal variables related to calculating hidden days-of-week\r\n View.prototype.initHiddenDays = function () {\r\n var hiddenDays = this.opt('hiddenDays') || []; // array of day-of-week indices that are hidden\r\n var isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool)\r\n var dayCnt = 0;\r\n var i;\r\n if (this.opt('weekends') === false) {\r\n hiddenDays.push(0, 6); // 0=sunday, 6=saturday\r\n }\r\n for (i = 0; i < 7; i++) {\r\n if (!(isHiddenDayHash[i] = $.inArray(i, hiddenDays) !== -1)) {\r\n dayCnt++;\r\n }\r\n }\r\n if (!dayCnt) {\r\n throw new Error('invalid hiddenDays'); // all days were hidden? bad.\r\n }\r\n this.isHiddenDayHash = isHiddenDayHash;\r\n };\r\n // Remove days from the beginning and end of the range that are computed as hidden.\r\n // If the whole range is trimmed off, returns null\r\n View.prototype.trimHiddenDays = function (inputUnzonedRange) {\r\n var start = inputUnzonedRange.getStart();\r\n var end = inputUnzonedRange.getEnd();\r\n if (start) {\r\n start = this.skipHiddenDays(start);\r\n }\r\n if (end) {\r\n end = this.skipHiddenDays(end, -1, true);\r\n }\r\n if (start === null || end === null || start < end) {\r\n return new UnzonedRange_1.default(start, end);\r\n }\r\n return null;\r\n };\r\n // Is the current day hidden?\r\n // `day` is a day-of-week index (0-6), or a Moment\r\n View.prototype.isHiddenDay = function (day) {\r\n if (moment.isMoment(day)) {\r\n day = day.day();\r\n }\r\n return this.isHiddenDayHash[day];\r\n };\r\n // Incrementing the current day until it is no longer a hidden day, returning a copy.\r\n // DOES NOT CONSIDER validUnzonedRange!\r\n // If the initial value of `date` is not a hidden day, don't do anything.\r\n // Pass `isExclusive` as `true` if you are dealing with an end date.\r\n // `inc` defaults to `1` (increment one day forward each time)\r\n View.prototype.skipHiddenDays = function (date, inc, isExclusive) {\r\n if (inc === void 0) { inc = 1; }\r\n if (isExclusive === void 0) { isExclusive = false; }\r\n var out = date.clone();\r\n while (this.isHiddenDayHash[(out.day() + (isExclusive ? inc : 0) + 7) % 7]) {\r\n out.add(inc, 'days');\r\n }\r\n return out;\r\n };\r\n return View;\r\n}(InteractiveDateComponent_1.default));\r\nexports.default = View;\r\nView.prototype.usesMinMaxTime = false;\r\nView.prototype.dateProfileGeneratorClass = DateProfileGenerator_1.default;\r\nView.watch('displayingDates', ['isInDom', 'dateProfile'], function (deps) {\r\n this.requestDateRender(deps.dateProfile);\r\n}, function () {\r\n this.requestDateUnrender();\r\n});\r\nView.watch('displayingBusinessHours', ['displayingDates', 'businessHourGenerator'], function (deps) {\r\n this.requestBusinessHoursRender(deps.businessHourGenerator);\r\n}, function () {\r\n this.requestBusinessHoursUnrender();\r\n});\r\nView.watch('initialEvents', ['dateProfile'], function (deps) {\r\n return this.fetchInitialEvents(deps.dateProfile);\r\n});\r\nView.watch('bindingEvents', ['initialEvents'], function (deps) {\r\n this.setEvents(deps.initialEvents);\r\n this.bindEventChanges();\r\n}, function () {\r\n this.unbindEventChanges();\r\n this.unsetEvents();\r\n});\r\nView.watch('displayingEvents', ['displayingDates', 'hasEvents'], function () {\r\n this.requestEventsRender(this.get('currentEvents'));\r\n}, function () {\r\n this.requestEventsUnrender();\r\n});\r\nView.watch('title', ['dateProfile'], function (deps) {\r\n return (this.title = this.computeTitle(deps.dateProfile)); // assign to View for legacy reasons\r\n});\r\nView.watch('legacyDateProps', ['dateProfile'], function (deps) {\r\n var calendar = this.calendar;\r\n var dateProfile = deps.dateProfile;\r\n // DEPRECATED, but we need to keep it updated...\r\n this.start = calendar.msToMoment(dateProfile.activeUnzonedRange.startMs, dateProfile.isRangeAllDay);\r\n this.end = calendar.msToMoment(dateProfile.activeUnzonedRange.endMs, dateProfile.isRangeAllDay);\r\n this.intervalStart = calendar.msToMoment(dateProfile.currentUnzonedRange.startMs, dateProfile.isRangeAllDay);\r\n this.intervalEnd = calendar.msToMoment(dateProfile.currentUnzonedRange.endMs, dateProfile.isRangeAllDay);\r\n});\r\n\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer = /** @class */ (function () {\r\n function EventRenderer(component, fillRenderer) {\r\n this.view = component._getView();\r\n this.component = component;\r\n this.fillRenderer = fillRenderer;\r\n }\r\n EventRenderer.prototype.opt = function (name) {\r\n return this.view.opt(name);\r\n };\r\n // Updates values that rely on options and also relate to range\r\n EventRenderer.prototype.rangeUpdated = function () {\r\n var displayEventTime;\r\n var displayEventEnd;\r\n this.eventTimeFormat =\r\n this.opt('eventTimeFormat') ||\r\n this.opt('timeFormat') || // deprecated\r\n this.computeEventTimeFormat();\r\n displayEventTime = this.opt('displayEventTime');\r\n if (displayEventTime == null) {\r\n displayEventTime = this.computeDisplayEventTime(); // might be based off of range\r\n }\r\n displayEventEnd = this.opt('displayEventEnd');\r\n if (displayEventEnd == null) {\r\n displayEventEnd = this.computeDisplayEventEnd(); // might be based off of range\r\n }\r\n this.displayEventTime = displayEventTime;\r\n this.displayEventEnd = displayEventEnd;\r\n };\r\n EventRenderer.prototype.render = function (eventsPayload) {\r\n var dateProfile = this.component._getDateProfile();\r\n var eventDefId;\r\n var instanceGroup;\r\n var eventRanges;\r\n var bgRanges = [];\r\n var fgRanges = [];\r\n for (eventDefId in eventsPayload) {\r\n instanceGroup = eventsPayload[eventDefId];\r\n eventRanges = instanceGroup.sliceRenderRanges(dateProfile.activeUnzonedRange);\r\n if (instanceGroup.getEventDef().hasBgRendering()) {\r\n bgRanges.push.apply(bgRanges, eventRanges);\r\n }\r\n else {\r\n fgRanges.push.apply(fgRanges, eventRanges);\r\n }\r\n }\r\n this.renderBgRanges(bgRanges);\r\n this.renderFgRanges(fgRanges);\r\n };\r\n EventRenderer.prototype.unrender = function () {\r\n this.unrenderBgRanges();\r\n this.unrenderFgRanges();\r\n };\r\n EventRenderer.prototype.renderFgRanges = function (eventRanges) {\r\n var eventFootprints = this.component.eventRangesToEventFootprints(eventRanges);\r\n var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n // render an `.el` on each seg\r\n // returns a subset of the segs. segs that were actually rendered\r\n segs = this.renderFgSegEls(segs);\r\n if (this.renderFgSegs(segs) !== false) { // no failure?\r\n this.fgSegs = segs;\r\n }\r\n };\r\n EventRenderer.prototype.unrenderFgRanges = function () {\r\n this.unrenderFgSegs(this.fgSegs || []);\r\n this.fgSegs = null;\r\n };\r\n EventRenderer.prototype.renderBgRanges = function (eventRanges) {\r\n var eventFootprints = this.component.eventRangesToEventFootprints(eventRanges);\r\n var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n if (this.renderBgSegs(segs) !== false) { // no failure?\r\n this.bgSegs = segs;\r\n }\r\n };\r\n EventRenderer.prototype.unrenderBgRanges = function () {\r\n this.unrenderBgSegs();\r\n this.bgSegs = null;\r\n };\r\n EventRenderer.prototype.getSegs = function () {\r\n return (this.bgSegs || []).concat(this.fgSegs || []);\r\n };\r\n // Renders foreground event segments onto the grid\r\n EventRenderer.prototype.renderFgSegs = function (segs) {\r\n // subclasses must implement\r\n // segs already has rendered els, and has been filtered.\r\n return false; // signal failure if not implemented\r\n };\r\n // Unrenders all currently rendered foreground segments\r\n EventRenderer.prototype.unrenderFgSegs = function (segs) {\r\n // subclasses must implement\r\n };\r\n EventRenderer.prototype.renderBgSegs = function (segs) {\r\n var _this = this;\r\n if (this.fillRenderer) {\r\n this.fillRenderer.renderSegs('bgEvent', segs, {\r\n getClasses: function (seg) {\r\n return _this.getBgClasses(seg.footprint.eventDef);\r\n },\r\n getCss: function (seg) {\r\n return {\r\n 'background-color': _this.getBgColor(seg.footprint.eventDef)\r\n };\r\n },\r\n filterEl: function (seg, el) {\r\n return _this.filterEventRenderEl(seg.footprint, el);\r\n }\r\n });\r\n }\r\n else {\r\n return false; // signal failure if no fillRenderer\r\n }\r\n };\r\n EventRenderer.prototype.unrenderBgSegs = function () {\r\n if (this.fillRenderer) {\r\n this.fillRenderer.unrender('bgEvent');\r\n }\r\n };\r\n // Renders and assigns an `el` property for each foreground event segment.\r\n // Only returns segments that successfully rendered.\r\n EventRenderer.prototype.renderFgSegEls = function (segs, disableResizing) {\r\n var _this = this;\r\n if (disableResizing === void 0) { disableResizing = false; }\r\n var hasEventRenderHandlers = this.view.hasPublicHandlers('eventRender');\r\n var html = '';\r\n var renderedSegs = [];\r\n var i;\r\n if (segs.length) { // don't build an empty html string\r\n // build a large concatenation of event segment HTML\r\n for (i = 0; i < segs.length; i++) {\r\n this.beforeFgSegHtml(segs[i]);\r\n html += this.fgSegHtml(segs[i], disableResizing);\r\n }\r\n // Grab individual elements from the combined HTML string. Use each as the default rendering.\r\n // Then, compute the 'el' for each segment. An el might be null if the eventRender callback returned false.\r\n $(html).each(function (i, node) {\r\n var seg = segs[i];\r\n var el = $(node);\r\n if (hasEventRenderHandlers) { // optimization\r\n el = _this.filterEventRenderEl(seg.footprint, el);\r\n }\r\n if (el) {\r\n el.data('fc-seg', seg); // used by handlers\r\n seg.el = el;\r\n renderedSegs.push(seg);\r\n }\r\n });\r\n }\r\n return renderedSegs;\r\n };\r\n EventRenderer.prototype.beforeFgSegHtml = function (seg) {\r\n };\r\n // Generates the HTML for the default rendering of a foreground event segment. Used by renderFgSegEls()\r\n EventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {\r\n // subclasses should implement\r\n };\r\n // Generic utility for generating the HTML classNames for an event segment's element\r\n EventRenderer.prototype.getSegClasses = function (seg, isDraggable, isResizable) {\r\n var classes = [\r\n 'fc-event',\r\n seg.isStart ? 'fc-start' : 'fc-not-start',\r\n seg.isEnd ? 'fc-end' : 'fc-not-end'\r\n ].concat(this.getClasses(seg.footprint.eventDef));\r\n if (isDraggable) {\r\n classes.push('fc-draggable');\r\n }\r\n if (isResizable) {\r\n classes.push('fc-resizable');\r\n }\r\n // event is currently selected? attach a className.\r\n if (this.view.isEventDefSelected(seg.footprint.eventDef)) {\r\n classes.push('fc-selected');\r\n }\r\n return classes;\r\n };\r\n // Given an event and the default element used for rendering, returns the element that should actually be used.\r\n // Basically runs events and elements through the eventRender hook.\r\n EventRenderer.prototype.filterEventRenderEl = function (eventFootprint, el) {\r\n var legacy = eventFootprint.getEventLegacy();\r\n var custom = this.view.publiclyTrigger('eventRender', {\r\n context: legacy,\r\n args: [legacy, el, this.view]\r\n });\r\n if (custom === false) { // means don't render at all\r\n el = null;\r\n }\r\n else if (custom && custom !== true) {\r\n el = $(custom);\r\n }\r\n return el;\r\n };\r\n // Compute the text that should be displayed on an event's element.\r\n // `range` can be the Event object itself, or something range-like, with at least a `start`.\r\n // If event times are disabled, or the event has no time, will return a blank string.\r\n // If not specified, formatStr will default to the eventTimeFormat setting,\r\n // and displayEnd will default to the displayEventEnd setting.\r\n EventRenderer.prototype.getTimeText = function (eventFootprint, formatStr, displayEnd) {\r\n return this._getTimeText(eventFootprint.eventInstance.dateProfile.start, eventFootprint.eventInstance.dateProfile.end, eventFootprint.componentFootprint.isAllDay, formatStr, displayEnd);\r\n };\r\n EventRenderer.prototype._getTimeText = function (start, end, isAllDay, formatStr, displayEnd) {\r\n if (formatStr == null) {\r\n formatStr = this.eventTimeFormat;\r\n }\r\n if (displayEnd == null) {\r\n displayEnd = this.displayEventEnd;\r\n }\r\n if (this.displayEventTime && !isAllDay) {\r\n if (displayEnd && end) {\r\n return this.view.formatRange({ start: start, end: end }, false, // allDay\r\n formatStr);\r\n }\r\n else {\r\n return start.format(formatStr);\r\n }\r\n }\r\n return '';\r\n };\r\n EventRenderer.prototype.computeEventTimeFormat = function () {\r\n return this.opt('smallTimeFormat');\r\n };\r\n EventRenderer.prototype.computeDisplayEventTime = function () {\r\n return true;\r\n };\r\n EventRenderer.prototype.computeDisplayEventEnd = function () {\r\n return true;\r\n };\r\n EventRenderer.prototype.getBgClasses = function (eventDef) {\r\n var classNames = this.getClasses(eventDef);\r\n classNames.push('fc-bgevent');\r\n return classNames;\r\n };\r\n EventRenderer.prototype.getClasses = function (eventDef) {\r\n var objs = this.getStylingObjs(eventDef);\r\n var i;\r\n var classNames = [];\r\n for (i = 0; i < objs.length; i++) {\r\n classNames.push.apply(// append\r\n classNames, objs[i].eventClassName || objs[i].className || []);\r\n }\r\n return classNames;\r\n };\r\n // Utility for generating event skin-related CSS properties\r\n EventRenderer.prototype.getSkinCss = function (eventDef) {\r\n return {\r\n 'background-color': this.getBgColor(eventDef),\r\n 'border-color': this.getBorderColor(eventDef),\r\n color: this.getTextColor(eventDef)\r\n };\r\n };\r\n // Queries for caller-specified color, then falls back to default\r\n EventRenderer.prototype.getBgColor = function (eventDef) {\r\n var objs = this.getStylingObjs(eventDef);\r\n var i;\r\n var val;\r\n for (i = 0; i < objs.length && !val; i++) {\r\n val = objs[i].eventBackgroundColor || objs[i].eventColor ||\r\n objs[i].backgroundColor || objs[i].color;\r\n }\r\n if (!val) {\r\n val = this.opt('eventBackgroundColor') || this.opt('eventColor');\r\n }\r\n return val;\r\n };\r\n // Queries for caller-specified color, then falls back to default\r\n EventRenderer.prototype.getBorderColor = function (eventDef) {\r\n var objs = this.getStylingObjs(eventDef);\r\n var i;\r\n var val;\r\n for (i = 0; i < objs.length && !val; i++) {\r\n val = objs[i].eventBorderColor || objs[i].eventColor ||\r\n objs[i].borderColor || objs[i].color;\r\n }\r\n if (!val) {\r\n val = this.opt('eventBorderColor') || this.opt('eventColor');\r\n }\r\n return val;\r\n };\r\n // Queries for caller-specified color, then falls back to default\r\n EventRenderer.prototype.getTextColor = function (eventDef) {\r\n var objs = this.getStylingObjs(eventDef);\r\n var i;\r\n var val;\r\n for (i = 0; i < objs.length && !val; i++) {\r\n val = objs[i].eventTextColor ||\r\n objs[i].textColor;\r\n }\r\n if (!val) {\r\n val = this.opt('eventTextColor');\r\n }\r\n return val;\r\n };\r\n EventRenderer.prototype.getStylingObjs = function (eventDef) {\r\n var objs = this.getFallbackStylingObjs(eventDef);\r\n objs.unshift(eventDef);\r\n return objs;\r\n };\r\n EventRenderer.prototype.getFallbackStylingObjs = function (eventDef) {\r\n return [eventDef.source];\r\n };\r\n EventRenderer.prototype.sortEventSegs = function (segs) {\r\n segs.sort(util_1.proxy(this, 'compareEventSegs'));\r\n };\r\n // A cmp function for determining which segments should take visual priority\r\n EventRenderer.prototype.compareEventSegs = function (seg1, seg2) {\r\n var f1 = seg1.footprint;\r\n var f2 = seg2.footprint;\r\n var cf1 = f1.componentFootprint;\r\n var cf2 = f2.componentFootprint;\r\n var r1 = cf1.unzonedRange;\r\n var r2 = cf2.unzonedRange;\r\n return r1.startMs - r2.startMs || // earlier events go first\r\n (r2.endMs - r2.startMs) - (r1.endMs - r1.startMs) || // tie? longer events go first\r\n cf2.isAllDay - cf1.isAllDay || // tie? put all-day events first (booleans cast to 0/1)\r\n util_1.compareByFieldSpecs(f1.eventDef, f2.eventDef, this.view.eventOrderSpecs, f1.eventDef.miscProps, f2.eventDef.miscProps);\r\n };\r\n return EventRenderer;\r\n}());\r\nexports.default = EventRenderer;\r\n\n\n/***/ }),\n/* 45 */,\n/* 46 */,\n/* 47 */,\n/* 48 */,\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment_ext_1 = __webpack_require__(11);\r\n// Plugin\r\n// -------------------------------------------------------------------------------------------------\r\nmoment_ext_1.newMomentProto.format = function () {\r\n if (this._fullCalendar && arguments[0]) { // an enhanced moment? and a format string provided?\r\n return formatDate(this, arguments[0]); // our extended formatting\r\n }\r\n if (this._ambigTime) {\r\n return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD');\r\n }\r\n if (this._ambigZone) {\r\n return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD[T]HH:mm:ss');\r\n }\r\n if (this._fullCalendar) { // enhanced non-ambig moment?\r\n // moment.format() doesn't ensure english, but we want to.\r\n return moment_ext_1.oldMomentFormat(englishMoment(this));\r\n }\r\n return moment_ext_1.oldMomentProto.format.apply(this, arguments);\r\n};\r\nmoment_ext_1.newMomentProto.toISOString = function () {\r\n if (this._ambigTime) {\r\n return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD');\r\n }\r\n if (this._ambigZone) {\r\n return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD[T]HH:mm:ss');\r\n }\r\n if (this._fullCalendar) { // enhanced non-ambig moment?\r\n // depending on browser, moment might not output english. ensure english.\r\n // https://github.com/moment/moment/blob/2.18.1/src/lib/moment/format.js#L22\r\n return moment_ext_1.oldMomentProto.toISOString.apply(englishMoment(this), arguments);\r\n }\r\n return moment_ext_1.oldMomentProto.toISOString.apply(this, arguments);\r\n};\r\nfunction englishMoment(mom) {\r\n if (mom.locale() !== 'en') {\r\n return mom.clone().locale('en');\r\n }\r\n return mom;\r\n}\r\n// Config\r\n// ---------------------------------------------------------------------------------------------------------------------\r\n/*\r\nInserted between chunks in the fake (\"intermediate\") formatting string.\r\nImportant that it passes as whitespace (\\s) because moment often identifies non-standalone months\r\nvia a regexp with an \\s.\r\n*/\r\nvar PART_SEPARATOR = '\\u000b'; // vertical tab\r\n/*\r\nInserted as the first character of a literal-text chunk to indicate that the literal text is not actually literal text,\r\nbut rather, a \"special\" token that has custom rendering (see specialTokens map).\r\n*/\r\nvar SPECIAL_TOKEN_MARKER = '\\u001f'; // information separator 1\r\n/*\r\nInserted at the beginning and end of a span of text that must have non-zero numeric characters.\r\nHandling of these markers is done in a post-processing step at the very end of text rendering.\r\n*/\r\nvar MAYBE_MARKER = '\\u001e'; // information separator 2\r\nvar MAYBE_REGEXP = new RegExp(MAYBE_MARKER + '([^' + MAYBE_MARKER + ']*)' + MAYBE_MARKER, 'g'); // must be global\r\n/*\r\nAddition formatting tokens we want recognized\r\n*/\r\nvar specialTokens = {\r\n t: function (date) {\r\n return moment_ext_1.oldMomentFormat(date, 'a').charAt(0);\r\n },\r\n T: function (date) {\r\n return moment_ext_1.oldMomentFormat(date, 'A').charAt(0);\r\n }\r\n};\r\n/*\r\nThe first characters of formatting tokens for units that are 1 day or larger.\r\n`value` is for ranking relative size (lower means bigger).\r\n`unit` is a normalized unit, used for comparing moments.\r\n*/\r\nvar largeTokenMap = {\r\n Y: { value: 1, unit: 'year' },\r\n M: { value: 2, unit: 'month' },\r\n W: { value: 3, unit: 'week' },\r\n w: { value: 3, unit: 'week' },\r\n D: { value: 4, unit: 'day' },\r\n d: { value: 4, unit: 'day' } // day of week\r\n};\r\n// Single Date Formatting\r\n// ---------------------------------------------------------------------------------------------------------------------\r\n/*\r\nFormats `date` with a Moment formatting string, but allow our non-zero areas and special token\r\n*/\r\nfunction formatDate(date, formatStr) {\r\n return renderFakeFormatString(getParsedFormatString(formatStr).fakeFormatString, date);\r\n}\r\nexports.formatDate = formatDate;\r\n// Date Range Formatting\r\n// -------------------------------------------------------------------------------------------------\r\n// TODO: make it work with timezone offset\r\n/*\r\nUsing a formatting string meant for a single date, generate a range string, like\r\n\"Sep 2 - 9 2013\", that intelligently inserts a separator where the dates differ.\r\nIf the dates are the same as far as the format string is concerned, just return a single\r\nrendering of one date, without any separator.\r\n*/\r\nfunction formatRange(date1, date2, formatStr, separator, isRTL) {\r\n var localeData;\r\n date1 = moment_ext_1.default.parseZone(date1);\r\n date2 = moment_ext_1.default.parseZone(date2);\r\n localeData = date1.localeData();\r\n // Expand localized format strings, like \"LL\" -> \"MMMM D YYYY\".\r\n // BTW, this is not important for `formatDate` because it is impossible to put custom tokens\r\n // or non-zero areas in Moment's localized format strings.\r\n formatStr = localeData.longDateFormat(formatStr) || formatStr;\r\n return renderParsedFormat(getParsedFormatString(formatStr), date1, date2, separator || ' - ', isRTL);\r\n}\r\nexports.formatRange = formatRange;\r\n/*\r\nRenders a range with an already-parsed format string.\r\n*/\r\nfunction renderParsedFormat(parsedFormat, date1, date2, separator, isRTL) {\r\n var sameUnits = parsedFormat.sameUnits;\r\n var unzonedDate1 = date1.clone().stripZone(); // for same-unit comparisons\r\n var unzonedDate2 = date2.clone().stripZone(); // \"\r\n var renderedParts1 = renderFakeFormatStringParts(parsedFormat.fakeFormatString, date1);\r\n var renderedParts2 = renderFakeFormatStringParts(parsedFormat.fakeFormatString, date2);\r\n var leftI;\r\n var leftStr = '';\r\n var rightI;\r\n var rightStr = '';\r\n var middleI;\r\n var middleStr1 = '';\r\n var middleStr2 = '';\r\n var middleStr = '';\r\n // Start at the leftmost side of the formatting string and continue until you hit a token\r\n // that is not the same between dates.\r\n for (leftI = 0; leftI < sameUnits.length && (!sameUnits[leftI] || unzonedDate1.isSame(unzonedDate2, sameUnits[leftI])); leftI++) {\r\n leftStr += renderedParts1[leftI];\r\n }\r\n // Similarly, start at the rightmost side of the formatting string and move left\r\n for (rightI = sameUnits.length - 1; rightI > leftI && (!sameUnits[rightI] || unzonedDate1.isSame(unzonedDate2, sameUnits[rightI])); rightI--) {\r\n // If current chunk is on the boundary of unique date-content, and is a special-case\r\n // date-formatting postfix character, then don't consume it. Consider it unique date-content.\r\n // TODO: make configurable\r\n if (rightI - 1 === leftI && renderedParts1[rightI] === '.') {\r\n break;\r\n }\r\n rightStr = renderedParts1[rightI] + rightStr;\r\n }\r\n // The area in the middle is different for both of the dates.\r\n // Collect them distinctly so we can jam them together later.\r\n for (middleI = leftI; middleI <= rightI; middleI++) {\r\n middleStr1 += renderedParts1[middleI];\r\n middleStr2 += renderedParts2[middleI];\r\n }\r\n if (middleStr1 || middleStr2) {\r\n if (isRTL) {\r\n middleStr = middleStr2 + separator + middleStr1;\r\n }\r\n else {\r\n middleStr = middleStr1 + separator + middleStr2;\r\n }\r\n }\r\n return processMaybeMarkers(leftStr + middleStr + rightStr);\r\n}\r\n// Format String Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nvar parsedFormatStrCache = {};\r\n/*\r\nReturns a parsed format string, leveraging a cache.\r\n*/\r\nfunction getParsedFormatString(formatStr) {\r\n return parsedFormatStrCache[formatStr] ||\r\n (parsedFormatStrCache[formatStr] = parseFormatString(formatStr));\r\n}\r\n/*\r\nParses a format string into the following:\r\n- fakeFormatString: a momentJS formatting string, littered with special control characters that get post-processed.\r\n- sameUnits: for every part in fakeFormatString, if the part is a token, the value will be a unit string (like \"day\"),\r\n that indicates how similar a range's start & end must be in order to share the same formatted text.\r\n If not a token, then the value is null.\r\n Always a flat array (not nested liked \"chunks\").\r\n*/\r\nfunction parseFormatString(formatStr) {\r\n var chunks = chunkFormatString(formatStr);\r\n return {\r\n fakeFormatString: buildFakeFormatString(chunks),\r\n sameUnits: buildSameUnits(chunks)\r\n };\r\n}\r\n/*\r\nBreak the formatting string into an array of chunks.\r\nA 'maybe' chunk will have nested chunks.\r\n*/\r\nfunction chunkFormatString(formatStr) {\r\n var chunks = [];\r\n var match;\r\n // TODO: more descrimination\r\n // \\4 is a backreference to the first character of a multi-character set.\r\n var chunker = /\\[([^\\]]*)\\]|\\(([^\\)]*)\\)|(LTS|LT|(\\w)\\4*o?)|([^\\w\\[\\(]+)/g;\r\n while ((match = chunker.exec(formatStr))) {\r\n if (match[1]) { // a literal string inside [ ... ]\r\n chunks.push.apply(chunks, // append\r\n splitStringLiteral(match[1]));\r\n }\r\n else if (match[2]) { // non-zero formatting inside ( ... )\r\n chunks.push({ maybe: chunkFormatString(match[2]) });\r\n }\r\n else if (match[3]) { // a formatting token\r\n chunks.push({ token: match[3] });\r\n }\r\n else if (match[5]) { // an unenclosed literal string\r\n chunks.push.apply(chunks, // append\r\n splitStringLiteral(match[5]));\r\n }\r\n }\r\n return chunks;\r\n}\r\n/*\r\nPotentially splits a literal-text string into multiple parts. For special cases.\r\n*/\r\nfunction splitStringLiteral(s) {\r\n if (s === '. ') {\r\n return ['.', ' ']; // for locales with periods bound to the end of each year/month/date\r\n }\r\n else {\r\n return [s];\r\n }\r\n}\r\n/*\r\nGiven chunks parsed from a real format string, generate a fake (aka \"intermediate\") format string with special control\r\ncharacters that will eventually be given to moment for formatting, and then post-processed.\r\n*/\r\nfunction buildFakeFormatString(chunks) {\r\n var parts = [];\r\n var i;\r\n var chunk;\r\n for (i = 0; i < chunks.length; i++) {\r\n chunk = chunks[i];\r\n if (typeof chunk === 'string') {\r\n parts.push('[' + chunk + ']');\r\n }\r\n else if (chunk.token) {\r\n if (chunk.token in specialTokens) {\r\n parts.push(SPECIAL_TOKEN_MARKER + // useful during post-processing\r\n '[' + chunk.token + ']' // preserve as literal text\r\n );\r\n }\r\n else {\r\n parts.push(chunk.token); // unprotected text implies a format string\r\n }\r\n }\r\n else if (chunk.maybe) {\r\n parts.push(MAYBE_MARKER + // useful during post-processing\r\n buildFakeFormatString(chunk.maybe) +\r\n MAYBE_MARKER);\r\n }\r\n }\r\n return parts.join(PART_SEPARATOR);\r\n}\r\n/*\r\nGiven parsed chunks from a real formatting string, generates an array of unit strings (like \"day\") that indicate\r\nin which regard two dates must be similar in order to share range formatting text.\r\nThe `chunks` can be nested (because of \"maybe\" chunks), however, the returned array will be flat.\r\n*/\r\nfunction buildSameUnits(chunks) {\r\n var units = [];\r\n var i;\r\n var chunk;\r\n var tokenInfo;\r\n for (i = 0; i < chunks.length; i++) {\r\n chunk = chunks[i];\r\n if (chunk.token) {\r\n tokenInfo = largeTokenMap[chunk.token.charAt(0)];\r\n units.push(tokenInfo ? tokenInfo.unit : 'second'); // default to a very strict same-second\r\n }\r\n else if (chunk.maybe) {\r\n units.push.apply(units, // append\r\n buildSameUnits(chunk.maybe));\r\n }\r\n else {\r\n units.push(null);\r\n }\r\n }\r\n return units;\r\n}\r\n// Rendering to text\r\n// ---------------------------------------------------------------------------------------------------------------------\r\n/*\r\nFormats a date with a fake format string, post-processes the control characters, then returns.\r\n*/\r\nfunction renderFakeFormatString(fakeFormatString, date) {\r\n return processMaybeMarkers(renderFakeFormatStringParts(fakeFormatString, date).join(''));\r\n}\r\n/*\r\nFormats a date into parts that will have been post-processed, EXCEPT for the \"maybe\" markers.\r\n*/\r\nfunction renderFakeFormatStringParts(fakeFormatString, date) {\r\n var parts = [];\r\n var fakeRender = moment_ext_1.oldMomentFormat(date, fakeFormatString);\r\n var fakeParts = fakeRender.split(PART_SEPARATOR);\r\n var i;\r\n var fakePart;\r\n for (i = 0; i < fakeParts.length; i++) {\r\n fakePart = fakeParts[i];\r\n if (fakePart.charAt(0) === SPECIAL_TOKEN_MARKER) {\r\n parts.push(\r\n // the literal string IS the token's name.\r\n // call special token's registered function.\r\n specialTokens[fakePart.substring(1)](date));\r\n }\r\n else {\r\n parts.push(fakePart);\r\n }\r\n }\r\n return parts;\r\n}\r\n/*\r\nAccepts an almost-finally-formatted string and processes the \"maybe\" control characters, returning a new string.\r\n*/\r\nfunction processMaybeMarkers(s) {\r\n return s.replace(MAYBE_REGEXP, function (m0, m1) {\r\n if (m1.match(/[1-9]/)) { // any non-zero numeric characters?\r\n return m1;\r\n }\r\n else {\r\n return '';\r\n }\r\n });\r\n}\r\n// Misc Utils\r\n// -------------------------------------------------------------------------------------------------\r\n/*\r\nReturns a unit string, either 'year', 'month', 'day', or null for the most granular formatting token in the string.\r\n*/\r\nfunction queryMostGranularFormatUnit(formatStr) {\r\n var chunks = chunkFormatString(formatStr);\r\n var i;\r\n var chunk;\r\n var candidate;\r\n var best;\r\n for (i = 0; i < chunks.length; i++) {\r\n chunk = chunks[i];\r\n if (chunk.token) {\r\n candidate = largeTokenMap[chunk.token.charAt(0)];\r\n if (candidate) {\r\n if (!best || candidate.value > best.value) {\r\n best = candidate;\r\n }\r\n }\r\n }\r\n }\r\n if (best) {\r\n return best.unit;\r\n }\r\n return null;\r\n}\r\nexports.queryMostGranularFormatUnit = queryMostGranularFormatUnit;\r\n\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventRange = /** @class */ (function () {\r\n function EventRange(unzonedRange, eventDef, eventInstance) {\r\n this.unzonedRange = unzonedRange;\r\n this.eventDef = eventDef;\r\n if (eventInstance) {\r\n this.eventInstance = eventInstance;\r\n }\r\n }\r\n return EventRange;\r\n}());\r\nexports.default = EventRange;\r\n\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Class_1 = __webpack_require__(35);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar Model = /** @class */ (function (_super) {\r\n tslib_1.__extends(Model, _super);\r\n function Model() {\r\n var _this = _super.call(this) || this;\r\n _this._watchers = {};\r\n _this._props = {};\r\n _this.applyGlobalWatchers();\r\n _this.constructed();\r\n return _this;\r\n }\r\n Model.watch = function (name) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n // subclasses should make a masked-copy of the superclass's map\r\n // TODO: write test\r\n if (!this.prototype.hasOwnProperty('_globalWatchArgs')) {\r\n this.prototype._globalWatchArgs = Object.create(this.prototype._globalWatchArgs);\r\n }\r\n this.prototype._globalWatchArgs[name] = args;\r\n };\r\n Model.prototype.constructed = function () {\r\n // useful for monkeypatching. TODO: BaseClass?\r\n };\r\n Model.prototype.applyGlobalWatchers = function () {\r\n var map = this._globalWatchArgs;\r\n var name;\r\n for (name in map) {\r\n this.watch.apply(this, [name].concat(map[name]));\r\n }\r\n };\r\n Model.prototype.has = function (name) {\r\n return name in this._props;\r\n };\r\n Model.prototype.get = function (name) {\r\n if (name === undefined) {\r\n return this._props;\r\n }\r\n return this._props[name];\r\n };\r\n Model.prototype.set = function (name, val) {\r\n var newProps;\r\n if (typeof name === 'string') {\r\n newProps = {};\r\n newProps[name] = val === undefined ? null : val;\r\n }\r\n else {\r\n newProps = name;\r\n }\r\n this.setProps(newProps);\r\n };\r\n Model.prototype.reset = function (newProps) {\r\n var oldProps = this._props;\r\n var changeset = {}; // will have undefined's to signal unsets\r\n var name;\r\n for (name in oldProps) {\r\n changeset[name] = undefined;\r\n }\r\n for (name in newProps) {\r\n changeset[name] = newProps[name];\r\n }\r\n this.setProps(changeset);\r\n };\r\n Model.prototype.unset = function (name) {\r\n var newProps = {};\r\n var names;\r\n var i;\r\n if (typeof name === 'string') {\r\n names = [name];\r\n }\r\n else {\r\n names = name;\r\n }\r\n for (i = 0; i < names.length; i++) {\r\n newProps[names[i]] = undefined;\r\n }\r\n this.setProps(newProps);\r\n };\r\n Model.prototype.setProps = function (newProps) {\r\n var changedProps = {};\r\n var changedCnt = 0;\r\n var name;\r\n var val;\r\n for (name in newProps) {\r\n val = newProps[name];\r\n // a change in value?\r\n // if an object, don't check equality, because might have been mutated internally.\r\n // TODO: eventually enforce immutability.\r\n if (typeof val === 'object' ||\r\n val !== this._props[name]) {\r\n changedProps[name] = val;\r\n changedCnt++;\r\n }\r\n }\r\n if (changedCnt) {\r\n this.trigger('before:batchChange', changedProps);\r\n for (name in changedProps) {\r\n val = changedProps[name];\r\n this.trigger('before:change', name, val);\r\n this.trigger('before:change:' + name, val);\r\n }\r\n for (name in changedProps) {\r\n val = changedProps[name];\r\n if (val === undefined) {\r\n delete this._props[name];\r\n }\r\n else {\r\n this._props[name] = val;\r\n }\r\n this.trigger('change:' + name, val);\r\n this.trigger('change', name, val);\r\n }\r\n this.trigger('batchChange', changedProps);\r\n }\r\n };\r\n Model.prototype.watch = function (name, depList, startFunc, stopFunc) {\r\n var _this = this;\r\n this.unwatch(name);\r\n this._watchers[name] = this._watchDeps(depList, function (deps) {\r\n var res = startFunc.call(_this, deps);\r\n if (res && res.then) {\r\n _this.unset(name); // put in an unset state while resolving\r\n res.then(function (val) {\r\n _this.set(name, val);\r\n });\r\n }\r\n else {\r\n _this.set(name, res);\r\n }\r\n }, function (deps) {\r\n _this.unset(name);\r\n if (stopFunc) {\r\n stopFunc.call(_this, deps);\r\n }\r\n });\r\n };\r\n Model.prototype.unwatch = function (name) {\r\n var watcher = this._watchers[name];\r\n if (watcher) {\r\n delete this._watchers[name];\r\n watcher.teardown();\r\n }\r\n };\r\n Model.prototype._watchDeps = function (depList, startFunc, stopFunc) {\r\n var _this = this;\r\n var queuedChangeCnt = 0;\r\n var depCnt = depList.length;\r\n var satisfyCnt = 0;\r\n var values = {}; // what's passed as the `deps` arguments\r\n var bindTuples = []; // array of [ eventName, handlerFunc ] arrays\r\n var isCallingStop = false;\r\n var onBeforeDepChange = function (depName, val, isOptional) {\r\n queuedChangeCnt++;\r\n if (queuedChangeCnt === 1) { // first change to cause a \"stop\" ?\r\n if (satisfyCnt === depCnt) { // all deps previously satisfied?\r\n isCallingStop = true;\r\n stopFunc(values);\r\n isCallingStop = false;\r\n }\r\n }\r\n };\r\n var onDepChange = function (depName, val, isOptional) {\r\n if (val === undefined) { // unsetting a value?\r\n // required dependency that was previously set?\r\n if (!isOptional && values[depName] !== undefined) {\r\n satisfyCnt--;\r\n }\r\n delete values[depName];\r\n }\r\n else { // setting a value?\r\n // required dependency that was previously unset?\r\n if (!isOptional && values[depName] === undefined) {\r\n satisfyCnt++;\r\n }\r\n values[depName] = val;\r\n }\r\n queuedChangeCnt--;\r\n if (!queuedChangeCnt) { // last change to cause a \"start\"?\r\n // now finally satisfied or satisfied all along?\r\n if (satisfyCnt === depCnt) {\r\n // if the stopFunc initiated another value change, ignore it.\r\n // it will be processed by another change event anyway.\r\n if (!isCallingStop) {\r\n startFunc(values);\r\n }\r\n }\r\n }\r\n };\r\n // intercept for .on() that remembers handlers\r\n var bind = function (eventName, handler) {\r\n _this.on(eventName, handler);\r\n bindTuples.push([eventName, handler]);\r\n };\r\n // listen to dependency changes\r\n depList.forEach(function (depName) {\r\n var isOptional = false;\r\n if (depName.charAt(0) === '?') { // TODO: more DRY\r\n depName = depName.substring(1);\r\n isOptional = true;\r\n }\r\n bind('before:change:' + depName, function (val) {\r\n onBeforeDepChange(depName, val, isOptional);\r\n });\r\n bind('change:' + depName, function (val) {\r\n onDepChange(depName, val, isOptional);\r\n });\r\n });\r\n // process current dependency values\r\n depList.forEach(function (depName) {\r\n var isOptional = false;\r\n if (depName.charAt(0) === '?') { // TODO: more DRY\r\n depName = depName.substring(1);\r\n isOptional = true;\r\n }\r\n if (_this.has(depName)) {\r\n values[depName] = _this.get(depName);\r\n satisfyCnt++;\r\n }\r\n else if (isOptional) {\r\n satisfyCnt++;\r\n }\r\n });\r\n // initially satisfied\r\n if (satisfyCnt === depCnt) {\r\n startFunc(values);\r\n }\r\n return {\r\n teardown: function () {\r\n // remove all handlers\r\n for (var i = 0; i < bindTuples.length; i++) {\r\n _this.off(bindTuples[i][0], bindTuples[i][1]);\r\n }\r\n bindTuples = null;\r\n // was satisfied, so call stopFunc\r\n if (satisfyCnt === depCnt) {\r\n stopFunc();\r\n }\r\n },\r\n flash: function () {\r\n if (satisfyCnt === depCnt) {\r\n stopFunc();\r\n startFunc(values);\r\n }\r\n }\r\n };\r\n };\r\n Model.prototype.flash = function (name) {\r\n var watcher = this._watchers[name];\r\n if (watcher) {\r\n watcher.flash();\r\n }\r\n };\r\n return Model;\r\n}(Class_1.default));\r\nexports.default = Model;\r\nModel.prototype._globalWatchArgs = {}; // mutation protection in Model.watch\r\nEmitterMixin_1.default.mixInto(Model);\r\nListenerMixin_1.default.mixInto(Model);\r\n\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\r\nUSAGE:\r\n import { default as ParsableModelMixin, ParsableModelInterface } from './ParsableModelMixin'\r\nin class:\r\n applyProps: ParsableModelInterface['applyProps']\r\n applyManualStandardProps: ParsableModelInterface['applyManualStandardProps']\r\n applyMiscProps: ParsableModelInterface['applyMiscProps']\r\n isStandardProp: ParsableModelInterface['isStandardProp']\r\n static defineStandardProps = ParsableModelMixin.defineStandardProps\r\n static copyVerbatimStandardProps = ParsableModelMixin.copyVerbatimStandardProps\r\nafter class:\r\n ParsableModelMixin.mixInto(TheClass)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar ParsableModelMixin = /** @class */ (function (_super) {\r\n tslib_1.__extends(ParsableModelMixin, _super);\r\n function ParsableModelMixin() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n ParsableModelMixin.defineStandardProps = function (propDefs) {\r\n var proto = this.prototype;\r\n if (!proto.hasOwnProperty('standardPropMap')) {\r\n proto.standardPropMap = Object.create(proto.standardPropMap);\r\n }\r\n util_1.copyOwnProps(propDefs, proto.standardPropMap);\r\n };\r\n ParsableModelMixin.copyVerbatimStandardProps = function (src, dest) {\r\n var map = this.prototype.standardPropMap;\r\n var propName;\r\n for (propName in map) {\r\n if (src[propName] != null && // in the src object?\r\n map[propName] === true // false means \"copy verbatim\"\r\n ) {\r\n dest[propName] = src[propName];\r\n }\r\n }\r\n };\r\n /*\r\n Returns true/false for success.\r\n Meant to be only called ONCE, at object creation.\r\n */\r\n ParsableModelMixin.prototype.applyProps = function (rawProps) {\r\n var standardPropMap = this.standardPropMap;\r\n var manualProps = {};\r\n var miscProps = {};\r\n var propName;\r\n for (propName in rawProps) {\r\n if (standardPropMap[propName] === true) { // copy verbatim\r\n this[propName] = rawProps[propName];\r\n }\r\n else if (standardPropMap[propName] === false) {\r\n manualProps[propName] = rawProps[propName];\r\n }\r\n else {\r\n miscProps[propName] = rawProps[propName];\r\n }\r\n }\r\n this.applyMiscProps(miscProps);\r\n return this.applyManualStandardProps(manualProps);\r\n };\r\n /*\r\n If subclasses override, they must call this supermethod and return the boolean response.\r\n Meant to be only called ONCE, at object creation.\r\n */\r\n ParsableModelMixin.prototype.applyManualStandardProps = function (rawProps) {\r\n return true;\r\n };\r\n /*\r\n Can be called even after initial object creation.\r\n */\r\n ParsableModelMixin.prototype.applyMiscProps = function (rawProps) {\r\n // subclasses can implement\r\n };\r\n /*\r\n TODO: why is this a method when defineStandardProps is static\r\n */\r\n ParsableModelMixin.prototype.isStandardProp = function (propName) {\r\n return propName in this.standardPropMap;\r\n };\r\n return ParsableModelMixin;\r\n}(Mixin_1.default));\r\nexports.default = ParsableModelMixin;\r\nParsableModelMixin.prototype.standardPropMap = {}; // will be cloned by defineStandardProps\r\n\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventInstance = /** @class */ (function () {\r\n function EventInstance(def, dateProfile) {\r\n this.def = def;\r\n this.dateProfile = dateProfile;\r\n }\r\n EventInstance.prototype.toLegacy = function () {\r\n var dateProfile = this.dateProfile;\r\n var obj = this.def.toLegacy();\r\n obj.start = dateProfile.start.clone();\r\n obj.end = dateProfile.end ? dateProfile.end.clone() : null;\r\n return obj;\r\n };\r\n return EventInstance;\r\n}());\r\nexports.default = EventInstance;\r\n\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar EventDef_1 = __webpack_require__(37);\r\nvar EventInstance_1 = __webpack_require__(53);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar RecurringEventDef = /** @class */ (function (_super) {\r\n tslib_1.__extends(RecurringEventDef, _super);\r\n function RecurringEventDef() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n RecurringEventDef.prototype.isAllDay = function () {\r\n return !this.startTime && !this.endTime;\r\n };\r\n RecurringEventDef.prototype.buildInstances = function (unzonedRange) {\r\n var calendar = this.source.calendar;\r\n var unzonedDate = unzonedRange.getStart();\r\n var unzonedEnd = unzonedRange.getEnd();\r\n var zonedDayStart;\r\n var instanceStart;\r\n var instanceEnd;\r\n var instances = [];\r\n while (unzonedDate.isBefore(unzonedEnd)) {\r\n // if everyday, or this particular day-of-week\r\n if (!this.dowHash || this.dowHash[unzonedDate.day()]) {\r\n zonedDayStart = calendar.applyTimezone(unzonedDate);\r\n instanceStart = zonedDayStart.clone();\r\n instanceEnd = null;\r\n if (this.startTime) {\r\n instanceStart.time(this.startTime);\r\n }\r\n else {\r\n instanceStart.stripTime();\r\n }\r\n if (this.endTime) {\r\n instanceEnd = zonedDayStart.clone().time(this.endTime);\r\n }\r\n instances.push(new EventInstance_1.default(this, // definition\r\n new EventDateProfile_1.default(instanceStart, instanceEnd, calendar)));\r\n }\r\n unzonedDate.add(1, 'days');\r\n }\r\n return instances;\r\n };\r\n RecurringEventDef.prototype.setDow = function (dowNumbers) {\r\n if (!this.dowHash) {\r\n this.dowHash = {};\r\n }\r\n for (var i = 0; i < dowNumbers.length; i++) {\r\n this.dowHash[dowNumbers[i]] = true;\r\n }\r\n };\r\n RecurringEventDef.prototype.clone = function () {\r\n var def = _super.prototype.clone.call(this);\r\n if (def.startTime) {\r\n def.startTime = moment.duration(this.startTime);\r\n }\r\n if (def.endTime) {\r\n def.endTime = moment.duration(this.endTime);\r\n }\r\n if (this.dowHash) {\r\n def.dowHash = $.extend({}, this.dowHash);\r\n }\r\n return def;\r\n };\r\n return RecurringEventDef;\r\n}(EventDef_1.default));\r\nexports.default = RecurringEventDef;\r\n/*\r\nHACK to work with TypeScript mixins\r\nNOTE: if super-method fails, should still attempt to apply\r\n*/\r\nRecurringEventDef.prototype.applyProps = function (rawProps) {\r\n var superSuccess = EventDef_1.default.prototype.applyProps.call(this, rawProps);\r\n if (rawProps.start) {\r\n this.startTime = moment.duration(rawProps.start);\r\n }\r\n if (rawProps.end) {\r\n this.endTime = moment.duration(rawProps.end);\r\n }\r\n if (rawProps.dow) {\r\n this.setDow(rawProps.dow);\r\n }\r\n return superSuccess;\r\n};\r\n// Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nRecurringEventDef.defineStandardProps({\r\n start: false,\r\n end: false,\r\n dow: false\r\n});\r\n\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar DateProfileGenerator = /** @class */ (function () {\r\n function DateProfileGenerator(_view) {\r\n this._view = _view;\r\n }\r\n DateProfileGenerator.prototype.opt = function (name) {\r\n return this._view.opt(name);\r\n };\r\n DateProfileGenerator.prototype.trimHiddenDays = function (unzonedRange) {\r\n return this._view.trimHiddenDays(unzonedRange);\r\n };\r\n DateProfileGenerator.prototype.msToUtcMoment = function (ms, forceAllDay) {\r\n return this._view.calendar.msToUtcMoment(ms, forceAllDay);\r\n };\r\n /* Date Range Computation\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Builds a structure with info about what the dates/ranges will be for the \"prev\" view.\r\n DateProfileGenerator.prototype.buildPrev = function (currentDateProfile) {\r\n var prevDate = currentDateProfile.date.clone()\r\n .startOf(currentDateProfile.currentRangeUnit)\r\n .subtract(currentDateProfile.dateIncrement);\r\n return this.build(prevDate, -1);\r\n };\r\n // Builds a structure with info about what the dates/ranges will be for the \"next\" view.\r\n DateProfileGenerator.prototype.buildNext = function (currentDateProfile) {\r\n var nextDate = currentDateProfile.date.clone()\r\n .startOf(currentDateProfile.currentRangeUnit)\r\n .add(currentDateProfile.dateIncrement);\r\n return this.build(nextDate, 1);\r\n };\r\n // Builds a structure holding dates/ranges for rendering around the given date.\r\n // Optional direction param indicates whether the date is being incremented/decremented\r\n // from its previous value. decremented = -1, incremented = 1 (default).\r\n DateProfileGenerator.prototype.build = function (date, direction, forceToValid) {\r\n if (forceToValid === void 0) { forceToValid = false; }\r\n var isDateAllDay = !date.hasTime();\r\n var validUnzonedRange;\r\n var minTime = null;\r\n var maxTime = null;\r\n var currentInfo;\r\n var isRangeAllDay;\r\n var renderUnzonedRange;\r\n var activeUnzonedRange;\r\n var isValid;\r\n validUnzonedRange = this.buildValidRange();\r\n validUnzonedRange = this.trimHiddenDays(validUnzonedRange);\r\n if (forceToValid) {\r\n date = this.msToUtcMoment(validUnzonedRange.constrainDate(date), // returns MS\r\n isDateAllDay);\r\n }\r\n currentInfo = this.buildCurrentRangeInfo(date, direction);\r\n isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit);\r\n renderUnzonedRange = this.buildRenderRange(this.trimHiddenDays(currentInfo.unzonedRange), currentInfo.unit, isRangeAllDay);\r\n renderUnzonedRange = this.trimHiddenDays(renderUnzonedRange);\r\n activeUnzonedRange = renderUnzonedRange.clone();\r\n if (!this.opt('showNonCurrentDates')) {\r\n activeUnzonedRange = activeUnzonedRange.intersect(currentInfo.unzonedRange);\r\n }\r\n minTime = moment.duration(this.opt('minTime'));\r\n maxTime = moment.duration(this.opt('maxTime'));\r\n activeUnzonedRange = this.adjustActiveRange(activeUnzonedRange, minTime, maxTime);\r\n activeUnzonedRange = activeUnzonedRange.intersect(validUnzonedRange); // might return null\r\n if (activeUnzonedRange) {\r\n date = this.msToUtcMoment(activeUnzonedRange.constrainDate(date), // returns MS\r\n isDateAllDay);\r\n }\r\n // it's invalid if the originally requested date is not contained,\r\n // or if the range is completely outside of the valid range.\r\n isValid = currentInfo.unzonedRange.intersectsWith(validUnzonedRange);\r\n return {\r\n // constraint for where prev/next operations can go and where events can be dragged/resized to.\r\n // an object with optional start and end properties.\r\n validUnzonedRange: validUnzonedRange,\r\n // range the view is formally responsible for.\r\n // for example, a month view might have 1st-31st, excluding padded dates\r\n currentUnzonedRange: currentInfo.unzonedRange,\r\n // name of largest unit being displayed, like \"month\" or \"week\"\r\n currentRangeUnit: currentInfo.unit,\r\n isRangeAllDay: isRangeAllDay,\r\n // dates that display events and accept drag-n-drop\r\n // will be `null` if no dates accept events\r\n activeUnzonedRange: activeUnzonedRange,\r\n // date range with a rendered skeleton\r\n // includes not-active days that need some sort of DOM\r\n renderUnzonedRange: renderUnzonedRange,\r\n // Duration object that denotes the first visible time of any given day\r\n minTime: minTime,\r\n // Duration object that denotes the exclusive visible end time of any given day\r\n maxTime: maxTime,\r\n isValid: isValid,\r\n date: date,\r\n // how far the current date will move for a prev/next operation\r\n dateIncrement: this.buildDateIncrement(currentInfo.duration)\r\n // pass a fallback (might be null) ^\r\n };\r\n };\r\n // Builds an object with optional start/end properties.\r\n // Indicates the minimum/maximum dates to display.\r\n // not responsible for trimming hidden days.\r\n DateProfileGenerator.prototype.buildValidRange = function () {\r\n return this._view.getUnzonedRangeOption('validRange', this._view.calendar.getNow()) ||\r\n new UnzonedRange_1.default(); // completely open-ended\r\n };\r\n // Builds a structure with info about the \"current\" range, the range that is\r\n // highlighted as being the current month for example.\r\n // See build() for a description of `direction`.\r\n // Guaranteed to have `range` and `unit` properties. `duration` is optional.\r\n // TODO: accept a MS-time instead of a moment `date`?\r\n DateProfileGenerator.prototype.buildCurrentRangeInfo = function (date, direction) {\r\n var viewSpec = this._view.viewSpec;\r\n var duration = null;\r\n var unit = null;\r\n var unzonedRange = null;\r\n var dayCount;\r\n if (viewSpec.duration) {\r\n duration = viewSpec.duration;\r\n unit = viewSpec.durationUnit;\r\n unzonedRange = this.buildRangeFromDuration(date, direction, duration, unit);\r\n }\r\n else if ((dayCount = this.opt('dayCount'))) {\r\n unit = 'day';\r\n unzonedRange = this.buildRangeFromDayCount(date, direction, dayCount);\r\n }\r\n else if ((unzonedRange = this.buildCustomVisibleRange(date))) {\r\n unit = util_1.computeGreatestUnit(unzonedRange.getStart(), unzonedRange.getEnd());\r\n }\r\n else {\r\n duration = this.getFallbackDuration();\r\n unit = util_1.computeGreatestUnit(duration);\r\n unzonedRange = this.buildRangeFromDuration(date, direction, duration, unit);\r\n }\r\n return { duration: duration, unit: unit, unzonedRange: unzonedRange };\r\n };\r\n DateProfileGenerator.prototype.getFallbackDuration = function () {\r\n return moment.duration({ days: 1 });\r\n };\r\n // Returns a new activeUnzonedRange to have time values (un-ambiguate)\r\n // minTime or maxTime causes the range to expand.\r\n DateProfileGenerator.prototype.adjustActiveRange = function (unzonedRange, minTime, maxTime) {\r\n var start = unzonedRange.getStart();\r\n var end = unzonedRange.getEnd();\r\n if (this._view.usesMinMaxTime) {\r\n if (minTime < 0) {\r\n start.time(0).add(minTime);\r\n }\r\n if (maxTime > 24 * 60 * 60 * 1000) { // beyond 24 hours?\r\n end.time(maxTime - (24 * 60 * 60 * 1000));\r\n }\r\n }\r\n return new UnzonedRange_1.default(start, end);\r\n };\r\n // Builds the \"current\" range when it is specified as an explicit duration.\r\n // `unit` is the already-computed computeGreatestUnit value of duration.\r\n // TODO: accept a MS-time instead of a moment `date`?\r\n DateProfileGenerator.prototype.buildRangeFromDuration = function (date, direction, duration, unit) {\r\n var alignment = this.opt('dateAlignment');\r\n var dateIncrementInput;\r\n var dateIncrementDuration;\r\n var start;\r\n var end;\r\n var res;\r\n // compute what the alignment should be\r\n if (!alignment) {\r\n dateIncrementInput = this.opt('dateIncrement');\r\n if (dateIncrementInput) {\r\n dateIncrementDuration = moment.duration(dateIncrementInput);\r\n // use the smaller of the two units\r\n if (dateIncrementDuration < duration) {\r\n alignment = util_1.computeDurationGreatestUnit(dateIncrementDuration, dateIncrementInput);\r\n }\r\n else {\r\n alignment = unit;\r\n }\r\n }\r\n else {\r\n alignment = unit;\r\n }\r\n }\r\n // if the view displays a single day or smaller\r\n if (duration.as('days') <= 1) {\r\n if (this._view.isHiddenDay(start)) {\r\n start = this._view.skipHiddenDays(start, direction);\r\n start.startOf('day');\r\n }\r\n }\r\n function computeRes() {\r\n start = date.clone().startOf(alignment);\r\n end = start.clone().add(duration);\r\n res = new UnzonedRange_1.default(start, end);\r\n }\r\n computeRes();\r\n // if range is completely enveloped by hidden days, go past the hidden days\r\n if (!this.trimHiddenDays(res)) {\r\n date = this._view.skipHiddenDays(date, direction);\r\n computeRes();\r\n }\r\n return res;\r\n };\r\n // Builds the \"current\" range when a dayCount is specified.\r\n // TODO: accept a MS-time instead of a moment `date`?\r\n DateProfileGenerator.prototype.buildRangeFromDayCount = function (date, direction, dayCount) {\r\n var customAlignment = this.opt('dateAlignment');\r\n var runningCount = 0;\r\n var start;\r\n var end;\r\n if (customAlignment || direction !== -1) {\r\n start = date.clone();\r\n if (customAlignment) {\r\n start.startOf(customAlignment);\r\n }\r\n start.startOf('day');\r\n start = this._view.skipHiddenDays(start);\r\n end = start.clone();\r\n do {\r\n end.add(1, 'day');\r\n if (!this._view.isHiddenDay(end)) {\r\n runningCount++;\r\n }\r\n } while (runningCount < dayCount);\r\n }\r\n else {\r\n end = date.clone().startOf('day').add(1, 'day');\r\n end = this._view.skipHiddenDays(end, -1, true);\r\n start = end.clone();\r\n do {\r\n start.add(-1, 'day');\r\n if (!this._view.isHiddenDay(start)) {\r\n runningCount++;\r\n }\r\n } while (runningCount < dayCount);\r\n }\r\n return new UnzonedRange_1.default(start, end);\r\n };\r\n // Builds a normalized range object for the \"visible\" range,\r\n // which is a way to define the currentUnzonedRange and activeUnzonedRange at the same time.\r\n // TODO: accept a MS-time instead of a moment `date`?\r\n DateProfileGenerator.prototype.buildCustomVisibleRange = function (date) {\r\n var visibleUnzonedRange = this._view.getUnzonedRangeOption('visibleRange', this._view.calendar.applyTimezone(date) // correct zone. also generates new obj that avoids mutations\r\n );\r\n if (visibleUnzonedRange && (visibleUnzonedRange.startMs == null || visibleUnzonedRange.endMs == null)) {\r\n return null;\r\n }\r\n return visibleUnzonedRange;\r\n };\r\n // Computes the range that will represent the element/cells for *rendering*,\r\n // but which may have voided days/times.\r\n // not responsible for trimming hidden days.\r\n DateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {\r\n return currentUnzonedRange.clone();\r\n };\r\n // Compute the duration value that should be added/substracted to the current date\r\n // when a prev/next operation happens.\r\n DateProfileGenerator.prototype.buildDateIncrement = function (fallback) {\r\n var dateIncrementInput = this.opt('dateIncrement');\r\n var customAlignment;\r\n if (dateIncrementInput) {\r\n return moment.duration(dateIncrementInput);\r\n }\r\n else if ((customAlignment = this.opt('dateAlignment'))) {\r\n return moment.duration(1, customAlignment);\r\n }\r\n else if (fallback) {\r\n return fallback;\r\n }\r\n else {\r\n return moment.duration({ days: 1 });\r\n }\r\n };\r\n return DateProfileGenerator;\r\n}());\r\nexports.default = DateProfileGenerator;\r\n\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar ArrayEventSource = /** @class */ (function (_super) {\r\n tslib_1.__extends(ArrayEventSource, _super);\r\n function ArrayEventSource(calendar) {\r\n var _this = _super.call(this, calendar) || this;\r\n _this.eventDefs = []; // for if setRawEventDefs is never called\r\n return _this;\r\n }\r\n ArrayEventSource.parse = function (rawInput, calendar) {\r\n var rawProps;\r\n // normalize raw input\r\n if ($.isArray(rawInput.events)) { // extended form\r\n rawProps = rawInput;\r\n }\r\n else if ($.isArray(rawInput)) { // short form\r\n rawProps = { events: rawInput };\r\n }\r\n if (rawProps) {\r\n return EventSource_1.default.parse.call(this, rawProps, calendar);\r\n }\r\n return false;\r\n };\r\n ArrayEventSource.prototype.setRawEventDefs = function (rawEventDefs) {\r\n this.rawEventDefs = rawEventDefs;\r\n this.eventDefs = this.parseEventDefs(rawEventDefs);\r\n };\r\n ArrayEventSource.prototype.fetch = function (start, end, timezone) {\r\n var eventDefs = this.eventDefs;\r\n var i;\r\n if (this.currentTimezone != null &&\r\n this.currentTimezone !== timezone) {\r\n for (i = 0; i < eventDefs.length; i++) {\r\n if (eventDefs[i] instanceof SingleEventDef_1.default) {\r\n eventDefs[i].rezone();\r\n }\r\n }\r\n }\r\n this.currentTimezone = timezone;\r\n return Promise_1.default.resolve(eventDefs);\r\n };\r\n ArrayEventSource.prototype.addEventDef = function (eventDef) {\r\n this.eventDefs.push(eventDef);\r\n };\r\n /*\r\n eventDefId already normalized to a string\r\n */\r\n ArrayEventSource.prototype.removeEventDefsById = function (eventDefId) {\r\n return util_1.removeMatching(this.eventDefs, function (eventDef) {\r\n return eventDef.id === eventDefId;\r\n });\r\n };\r\n ArrayEventSource.prototype.removeAllEventDefs = function () {\r\n this.eventDefs = [];\r\n };\r\n ArrayEventSource.prototype.getPrimitive = function () {\r\n return this.rawEventDefs;\r\n };\r\n ArrayEventSource.prototype.applyManualStandardProps = function (rawProps) {\r\n var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);\r\n this.setRawEventDefs(rawProps.events);\r\n return superSuccess;\r\n };\r\n return ArrayEventSource;\r\n}(EventSource_1.default));\r\nexports.default = ArrayEventSource;\r\nArrayEventSource.defineStandardProps({\r\n events: false // don't automatically transfer\r\n});\r\n\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar StandardTheme_1 = __webpack_require__(221);\r\nvar JqueryUiTheme_1 = __webpack_require__(222);\r\nvar themeClassHash = {};\r\nfunction defineThemeSystem(themeName, themeClass) {\r\n themeClassHash[themeName] = themeClass;\r\n}\r\nexports.defineThemeSystem = defineThemeSystem;\r\nfunction getThemeSystemClass(themeSetting) {\r\n if (!themeSetting) {\r\n return StandardTheme_1.default;\r\n }\r\n else if (themeSetting === true) {\r\n return JqueryUiTheme_1.default;\r\n }\r\n else {\r\n return themeClassHash[themeSetting];\r\n }\r\n}\r\nexports.getThemeSystemClass = getThemeSystemClass;\r\n\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\n/*\r\nA cache for the left/right/top/bottom/width/height values for one or more elements.\r\nWorks with both offset (from topleft document) and position (from offsetParent).\r\n\noptions:\r\n- els\r\n- isHorizontal\r\n- isVertical\r\n*/\r\nvar CoordCache = /** @class */ (function () {\r\n function CoordCache(options) {\r\n this.isHorizontal = false; // whether to query for left/right/width\r\n this.isVertical = false; // whether to query for top/bottom/height\r\n this.els = $(options.els);\r\n this.isHorizontal = options.isHorizontal;\r\n this.isVertical = options.isVertical;\r\n this.forcedOffsetParentEl = options.offsetParent ? $(options.offsetParent) : null;\r\n }\r\n // Queries the els for coordinates and stores them.\r\n // Call this method before using and of the get* methods below.\r\n CoordCache.prototype.build = function () {\r\n var offsetParentEl = this.forcedOffsetParentEl;\r\n if (!offsetParentEl && this.els.length > 0) {\r\n offsetParentEl = this.els.eq(0).offsetParent();\r\n }\r\n this.origin = offsetParentEl ?\r\n offsetParentEl.offset() :\r\n null;\r\n this.boundingRect = this.queryBoundingRect();\r\n if (this.isHorizontal) {\r\n this.buildElHorizontals();\r\n }\r\n if (this.isVertical) {\r\n this.buildElVerticals();\r\n }\r\n };\r\n // Destroys all internal data about coordinates, freeing memory\r\n CoordCache.prototype.clear = function () {\r\n this.origin = null;\r\n this.boundingRect = null;\r\n this.lefts = null;\r\n this.rights = null;\r\n this.tops = null;\r\n this.bottoms = null;\r\n };\r\n // When called, if coord caches aren't built, builds them\r\n CoordCache.prototype.ensureBuilt = function () {\r\n if (!this.origin) {\r\n this.build();\r\n }\r\n };\r\n // Populates the left/right internal coordinate arrays\r\n CoordCache.prototype.buildElHorizontals = function () {\r\n var lefts = [];\r\n var rights = [];\r\n this.els.each(function (i, node) {\r\n var el = $(node);\r\n var left = el.offset().left;\r\n var width = el.outerWidth();\r\n lefts.push(left);\r\n rights.push(left + width);\r\n });\r\n this.lefts = lefts;\r\n this.rights = rights;\r\n };\r\n // Populates the top/bottom internal coordinate arrays\r\n CoordCache.prototype.buildElVerticals = function () {\r\n var tops = [];\r\n var bottoms = [];\r\n this.els.each(function (i, node) {\r\n var el = $(node);\r\n var top = el.offset().top;\r\n var height = el.outerHeight();\r\n tops.push(top);\r\n bottoms.push(top + height);\r\n });\r\n this.tops = tops;\r\n this.bottoms = bottoms;\r\n };\r\n // Given a left offset (from document left), returns the index of the el that it horizontally intersects.\r\n // If no intersection is made, returns undefined.\r\n CoordCache.prototype.getHorizontalIndex = function (leftOffset) {\r\n this.ensureBuilt();\r\n var lefts = this.lefts;\r\n var rights = this.rights;\r\n var len = lefts.length;\r\n var i;\r\n for (i = 0; i < len; i++) {\r\n if (leftOffset >= lefts[i] && leftOffset < rights[i]) {\r\n return i;\r\n }\r\n }\r\n };\r\n // Given a top offset (from document top), returns the index of the el that it vertically intersects.\r\n // If no intersection is made, returns undefined.\r\n CoordCache.prototype.getVerticalIndex = function (topOffset) {\r\n this.ensureBuilt();\r\n var tops = this.tops;\r\n var bottoms = this.bottoms;\r\n var len = tops.length;\r\n var i;\r\n for (i = 0; i < len; i++) {\r\n if (topOffset >= tops[i] && topOffset < bottoms[i]) {\r\n return i;\r\n }\r\n }\r\n };\r\n // Gets the left offset (from document left) of the element at the given index\r\n CoordCache.prototype.getLeftOffset = function (leftIndex) {\r\n this.ensureBuilt();\r\n return this.lefts[leftIndex];\r\n };\r\n // Gets the left position (from offsetParent left) of the element at the given index\r\n CoordCache.prototype.getLeftPosition = function (leftIndex) {\r\n this.ensureBuilt();\r\n return this.lefts[leftIndex] - this.origin.left;\r\n };\r\n // Gets the right offset (from document left) of the element at the given index.\r\n // This value is NOT relative to the document's right edge, like the CSS concept of \"right\" would be.\r\n CoordCache.prototype.getRightOffset = function (leftIndex) {\r\n this.ensureBuilt();\r\n return this.rights[leftIndex];\r\n };\r\n // Gets the right position (from offsetParent left) of the element at the given index.\r\n // This value is NOT relative to the offsetParent's right edge, like the CSS concept of \"right\" would be.\r\n CoordCache.prototype.getRightPosition = function (leftIndex) {\r\n this.ensureBuilt();\r\n return this.rights[leftIndex] - this.origin.left;\r\n };\r\n // Gets the width of the element at the given index\r\n CoordCache.prototype.getWidth = function (leftIndex) {\r\n this.ensureBuilt();\r\n return this.rights[leftIndex] - this.lefts[leftIndex];\r\n };\r\n // Gets the top offset (from document top) of the element at the given index\r\n CoordCache.prototype.getTopOffset = function (topIndex) {\r\n this.ensureBuilt();\r\n return this.tops[topIndex];\r\n };\r\n // Gets the top position (from offsetParent top) of the element at the given position\r\n CoordCache.prototype.getTopPosition = function (topIndex) {\r\n this.ensureBuilt();\r\n return this.tops[topIndex] - this.origin.top;\r\n };\r\n // Gets the bottom offset (from the document top) of the element at the given index.\r\n // This value is NOT relative to the offsetParent's bottom edge, like the CSS concept of \"bottom\" would be.\r\n CoordCache.prototype.getBottomOffset = function (topIndex) {\r\n this.ensureBuilt();\r\n return this.bottoms[topIndex];\r\n };\r\n // Gets the bottom position (from the offsetParent top) of the element at the given index.\r\n // This value is NOT relative to the offsetParent's bottom edge, like the CSS concept of \"bottom\" would be.\r\n CoordCache.prototype.getBottomPosition = function (topIndex) {\r\n this.ensureBuilt();\r\n return this.bottoms[topIndex] - this.origin.top;\r\n };\r\n // Gets the height of the element at the given index\r\n CoordCache.prototype.getHeight = function (topIndex) {\r\n this.ensureBuilt();\r\n return this.bottoms[topIndex] - this.tops[topIndex];\r\n };\r\n // Bounding Rect\r\n // TODO: decouple this from CoordCache\r\n // Compute and return what the elements' bounding rectangle is, from the user's perspective.\r\n // Right now, only returns a rectangle if constrained by an overflow:scroll element.\r\n // Returns null if there are no elements\r\n CoordCache.prototype.queryBoundingRect = function () {\r\n var scrollParentEl;\r\n if (this.els.length > 0) {\r\n scrollParentEl = util_1.getScrollParent(this.els.eq(0));\r\n if (!scrollParentEl.is(document) &&\r\n !scrollParentEl.is('html,body') // don't consider these bounding rects. solves issue 3615\r\n ) {\r\n return util_1.getClientRect(scrollParentEl);\r\n }\r\n }\r\n return null;\r\n };\r\n CoordCache.prototype.isPointInBounds = function (leftOffset, topOffset) {\r\n return this.isLeftInBounds(leftOffset) && this.isTopInBounds(topOffset);\r\n };\r\n CoordCache.prototype.isLeftInBounds = function (leftOffset) {\r\n return !this.boundingRect || (leftOffset >= this.boundingRect.left && leftOffset < this.boundingRect.right);\r\n };\r\n CoordCache.prototype.isTopInBounds = function (topOffset) {\r\n return !this.boundingRect || (topOffset >= this.boundingRect.top && topOffset < this.boundingRect.bottom);\r\n };\r\n return CoordCache;\r\n}());\r\nexports.default = CoordCache;\r\n\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\n/* Tracks a drag's mouse movement, firing various handlers\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// TODO: use Emitter\r\nvar DragListener = /** @class */ (function () {\r\n function DragListener(options) {\r\n this.isInteracting = false;\r\n this.isDistanceSurpassed = false;\r\n this.isDelayEnded = false;\r\n this.isDragging = false;\r\n this.isTouch = false;\r\n this.isGeneric = false; // initiated by 'dragstart' (jqui)\r\n this.shouldCancelTouchScroll = true;\r\n this.scrollAlwaysKills = false;\r\n this.isAutoScroll = false;\r\n // defaults\r\n this.scrollSensitivity = 30; // pixels from edge for scrolling to start\r\n this.scrollSpeed = 200; // pixels per second, at maximum speed\r\n this.scrollIntervalMs = 50; // millisecond wait between scroll increment\r\n this.options = options || {};\r\n }\r\n // Interaction (high-level)\r\n // -----------------------------------------------------------------------------------------------------------------\r\n DragListener.prototype.startInteraction = function (ev, extraOptions) {\r\n if (extraOptions === void 0) { extraOptions = {}; }\r\n if (ev.type === 'mousedown') {\r\n if (GlobalEmitter_1.default.get().shouldIgnoreMouse()) {\r\n return;\r\n }\r\n else if (!util_1.isPrimaryMouseButton(ev)) {\r\n return;\r\n }\r\n else {\r\n ev.preventDefault(); // prevents native selection in most browsers\r\n }\r\n }\r\n if (!this.isInteracting) {\r\n // process options\r\n this.delay = util_1.firstDefined(extraOptions.delay, this.options.delay, 0);\r\n this.minDistance = util_1.firstDefined(extraOptions.distance, this.options.distance, 0);\r\n this.subjectEl = this.options.subjectEl;\r\n util_1.preventSelection($('body'));\r\n this.isInteracting = true;\r\n this.isTouch = util_1.getEvIsTouch(ev);\r\n this.isGeneric = ev.type === 'dragstart';\r\n this.isDelayEnded = false;\r\n this.isDistanceSurpassed = false;\r\n this.originX = util_1.getEvX(ev);\r\n this.originY = util_1.getEvY(ev);\r\n this.scrollEl = util_1.getScrollParent($(ev.target));\r\n this.bindHandlers();\r\n this.initAutoScroll();\r\n this.handleInteractionStart(ev);\r\n this.startDelay(ev);\r\n if (!this.minDistance) {\r\n this.handleDistanceSurpassed(ev);\r\n }\r\n }\r\n };\r\n DragListener.prototype.handleInteractionStart = function (ev) {\r\n this.trigger('interactionStart', ev);\r\n };\r\n DragListener.prototype.endInteraction = function (ev, isCancelled) {\r\n if (this.isInteracting) {\r\n this.endDrag(ev);\r\n if (this.delayTimeoutId) {\r\n clearTimeout(this.delayTimeoutId);\r\n this.delayTimeoutId = null;\r\n }\r\n this.destroyAutoScroll();\r\n this.unbindHandlers();\r\n this.isInteracting = false;\r\n this.handleInteractionEnd(ev, isCancelled);\r\n util_1.allowSelection($('body'));\r\n }\r\n };\r\n DragListener.prototype.handleInteractionEnd = function (ev, isCancelled) {\r\n this.trigger('interactionEnd', ev, isCancelled || false);\r\n };\r\n // Binding To DOM\r\n // -----------------------------------------------------------------------------------------------------------------\r\n DragListener.prototype.bindHandlers = function () {\r\n // some browsers (Safari in iOS 10) don't allow preventDefault on touch events that are bound after touchstart,\r\n // so listen to the GlobalEmitter singleton, which is always bound, instead of the document directly.\r\n var globalEmitter = GlobalEmitter_1.default.get();\r\n if (this.isGeneric) {\r\n this.listenTo($(document), {\r\n drag: this.handleMove,\r\n dragstop: this.endInteraction\r\n });\r\n }\r\n else if (this.isTouch) {\r\n this.listenTo(globalEmitter, {\r\n touchmove: this.handleTouchMove,\r\n touchend: this.endInteraction,\r\n scroll: this.handleTouchScroll\r\n });\r\n }\r\n else {\r\n this.listenTo(globalEmitter, {\r\n mousemove: this.handleMouseMove,\r\n mouseup: this.endInteraction\r\n });\r\n }\r\n this.listenTo(globalEmitter, {\r\n selectstart: util_1.preventDefault,\r\n contextmenu: util_1.preventDefault // long taps would open menu on Chrome dev tools\r\n });\r\n };\r\n DragListener.prototype.unbindHandlers = function () {\r\n this.stopListeningTo(GlobalEmitter_1.default.get());\r\n this.stopListeningTo($(document)); // for isGeneric\r\n };\r\n // Drag (high-level)\r\n // -----------------------------------------------------------------------------------------------------------------\r\n // extraOptions ignored if drag already started\r\n DragListener.prototype.startDrag = function (ev, extraOptions) {\r\n this.startInteraction(ev, extraOptions); // ensure interaction began\r\n if (!this.isDragging) {\r\n this.isDragging = true;\r\n this.handleDragStart(ev);\r\n }\r\n };\r\n DragListener.prototype.handleDragStart = function (ev) {\r\n this.trigger('dragStart', ev);\r\n };\r\n DragListener.prototype.handleMove = function (ev) {\r\n var dx = util_1.getEvX(ev) - this.originX;\r\n var dy = util_1.getEvY(ev) - this.originY;\r\n var minDistance = this.minDistance;\r\n var distanceSq; // current distance from the origin, squared\r\n if (!this.isDistanceSurpassed) {\r\n distanceSq = dx * dx + dy * dy;\r\n if (distanceSq >= minDistance * minDistance) { // use pythagorean theorem\r\n this.handleDistanceSurpassed(ev);\r\n }\r\n }\r\n if (this.isDragging) {\r\n this.handleDrag(dx, dy, ev);\r\n }\r\n };\r\n // Called while the mouse is being moved and when we know a legitimate drag is taking place\r\n DragListener.prototype.handleDrag = function (dx, dy, ev) {\r\n this.trigger('drag', dx, dy, ev);\r\n this.updateAutoScroll(ev); // will possibly cause scrolling\r\n };\r\n DragListener.prototype.endDrag = function (ev) {\r\n if (this.isDragging) {\r\n this.isDragging = false;\r\n this.handleDragEnd(ev);\r\n }\r\n };\r\n DragListener.prototype.handleDragEnd = function (ev) {\r\n this.trigger('dragEnd', ev);\r\n };\r\n // Delay\r\n // -----------------------------------------------------------------------------------------------------------------\r\n DragListener.prototype.startDelay = function (initialEv) {\r\n var _this = this;\r\n if (this.delay) {\r\n this.delayTimeoutId = setTimeout(function () {\r\n _this.handleDelayEnd(initialEv);\r\n }, this.delay);\r\n }\r\n else {\r\n this.handleDelayEnd(initialEv);\r\n }\r\n };\r\n DragListener.prototype.handleDelayEnd = function (initialEv) {\r\n this.isDelayEnded = true;\r\n if (this.isDistanceSurpassed) {\r\n this.startDrag(initialEv);\r\n }\r\n };\r\n // Distance\r\n // -----------------------------------------------------------------------------------------------------------------\r\n DragListener.prototype.handleDistanceSurpassed = function (ev) {\r\n this.isDistanceSurpassed = true;\r\n if (this.isDelayEnded) {\r\n this.startDrag(ev);\r\n }\r\n };\r\n // Mouse / Touch\r\n // -----------------------------------------------------------------------------------------------------------------\r\n DragListener.prototype.handleTouchMove = function (ev) {\r\n // prevent inertia and touchmove-scrolling while dragging\r\n if (this.isDragging && this.shouldCancelTouchScroll) {\r\n ev.preventDefault();\r\n }\r\n this.handleMove(ev);\r\n };\r\n DragListener.prototype.handleMouseMove = function (ev) {\r\n this.handleMove(ev);\r\n };\r\n // Scrolling (unrelated to auto-scroll)\r\n // -----------------------------------------------------------------------------------------------------------------\r\n DragListener.prototype.handleTouchScroll = function (ev) {\r\n // if the drag is being initiated by touch, but a scroll happens before\r\n // the drag-initiating delay is over, cancel the drag\r\n if (!this.isDragging || this.scrollAlwaysKills) {\r\n this.endInteraction(ev, true); // isCancelled=true\r\n }\r\n };\r\n // Utils\r\n // -----------------------------------------------------------------------------------------------------------------\r\n // Triggers a callback. Calls a function in the option hash of the same name.\r\n // Arguments beyond the first `name` are forwarded on.\r\n DragListener.prototype.trigger = function (name) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n if (this.options[name]) {\r\n this.options[name].apply(this, args);\r\n }\r\n // makes _methods callable by event name. TODO: kill this\r\n if (this['_' + name]) {\r\n this['_' + name].apply(this, args);\r\n }\r\n };\r\n // Auto-scroll\r\n // -----------------------------------------------------------------------------------------------------------------\r\n DragListener.prototype.initAutoScroll = function () {\r\n var scrollEl = this.scrollEl;\r\n this.isAutoScroll =\r\n this.options.scroll &&\r\n scrollEl &&\r\n !scrollEl.is(window) &&\r\n !scrollEl.is(document);\r\n if (this.isAutoScroll) {\r\n // debounce makes sure rapid calls don't happen\r\n this.listenTo(scrollEl, 'scroll', util_1.debounce(this.handleDebouncedScroll, 100));\r\n }\r\n };\r\n DragListener.prototype.destroyAutoScroll = function () {\r\n this.endAutoScroll(); // kill any animation loop\r\n // remove the scroll handler if there is a scrollEl\r\n if (this.isAutoScroll) {\r\n this.stopListeningTo(this.scrollEl, 'scroll'); // will probably get removed by unbindHandlers too :(\r\n }\r\n };\r\n // Computes and stores the bounding rectangle of scrollEl\r\n DragListener.prototype.computeScrollBounds = function () {\r\n if (this.isAutoScroll) {\r\n this.scrollBounds = util_1.getOuterRect(this.scrollEl);\r\n // TODO: use getClientRect in future. but prevents auto scrolling when on top of scrollbars\r\n }\r\n };\r\n // Called when the dragging is in progress and scrolling should be updated\r\n DragListener.prototype.updateAutoScroll = function (ev) {\r\n var sensitivity = this.scrollSensitivity;\r\n var bounds = this.scrollBounds;\r\n var topCloseness;\r\n var bottomCloseness;\r\n var leftCloseness;\r\n var rightCloseness;\r\n var topVel = 0;\r\n var leftVel = 0;\r\n if (bounds) { // only scroll if scrollEl exists\r\n // compute closeness to edges. valid range is from 0.0 - 1.0\r\n topCloseness = (sensitivity - (util_1.getEvY(ev) - bounds.top)) / sensitivity;\r\n bottomCloseness = (sensitivity - (bounds.bottom - util_1.getEvY(ev))) / sensitivity;\r\n leftCloseness = (sensitivity - (util_1.getEvX(ev) - bounds.left)) / sensitivity;\r\n rightCloseness = (sensitivity - (bounds.right - util_1.getEvX(ev))) / sensitivity;\r\n // translate vertical closeness into velocity.\r\n // mouse must be completely in bounds for velocity to happen.\r\n if (topCloseness >= 0 && topCloseness <= 1) {\r\n topVel = topCloseness * this.scrollSpeed * -1; // negative. for scrolling up\r\n }\r\n else if (bottomCloseness >= 0 && bottomCloseness <= 1) {\r\n topVel = bottomCloseness * this.scrollSpeed;\r\n }\r\n // translate horizontal closeness into velocity\r\n if (leftCloseness >= 0 && leftCloseness <= 1) {\r\n leftVel = leftCloseness * this.scrollSpeed * -1; // negative. for scrolling left\r\n }\r\n else if (rightCloseness >= 0 && rightCloseness <= 1) {\r\n leftVel = rightCloseness * this.scrollSpeed;\r\n }\r\n }\r\n this.setScrollVel(topVel, leftVel);\r\n };\r\n // Sets the speed-of-scrolling for the scrollEl\r\n DragListener.prototype.setScrollVel = function (topVel, leftVel) {\r\n this.scrollTopVel = topVel;\r\n this.scrollLeftVel = leftVel;\r\n this.constrainScrollVel(); // massages into realistic values\r\n // if there is non-zero velocity, and an animation loop hasn't already started, then START\r\n if ((this.scrollTopVel || this.scrollLeftVel) && !this.scrollIntervalId) {\r\n this.scrollIntervalId = setInterval(util_1.proxy(this, 'scrollIntervalFunc'), // scope to `this`\r\n this.scrollIntervalMs);\r\n }\r\n };\r\n // Forces scrollTopVel and scrollLeftVel to be zero if scrolling has already gone all the way\r\n DragListener.prototype.constrainScrollVel = function () {\r\n var el = this.scrollEl;\r\n if (this.scrollTopVel < 0) { // scrolling up?\r\n if (el.scrollTop() <= 0) { // already scrolled all the way up?\r\n this.scrollTopVel = 0;\r\n }\r\n }\r\n else if (this.scrollTopVel > 0) { // scrolling down?\r\n if (el.scrollTop() + el[0].clientHeight >= el[0].scrollHeight) { // already scrolled all the way down?\r\n this.scrollTopVel = 0;\r\n }\r\n }\r\n if (this.scrollLeftVel < 0) { // scrolling left?\r\n if (el.scrollLeft() <= 0) { // already scrolled all the left?\r\n this.scrollLeftVel = 0;\r\n }\r\n }\r\n else if (this.scrollLeftVel > 0) { // scrolling right?\r\n if (el.scrollLeft() + el[0].clientWidth >= el[0].scrollWidth) { // already scrolled all the way right?\r\n this.scrollLeftVel = 0;\r\n }\r\n }\r\n };\r\n // This function gets called during every iteration of the scrolling animation loop\r\n DragListener.prototype.scrollIntervalFunc = function () {\r\n var el = this.scrollEl;\r\n var frac = this.scrollIntervalMs / 1000; // considering animation frequency, what the vel should be mult'd by\r\n // change the value of scrollEl's scroll\r\n if (this.scrollTopVel) {\r\n el.scrollTop(el.scrollTop() + this.scrollTopVel * frac);\r\n }\r\n if (this.scrollLeftVel) {\r\n el.scrollLeft(el.scrollLeft() + this.scrollLeftVel * frac);\r\n }\r\n this.constrainScrollVel(); // since the scroll values changed, recompute the velocities\r\n // if scrolled all the way, which causes the vels to be zero, stop the animation loop\r\n if (!this.scrollTopVel && !this.scrollLeftVel) {\r\n this.endAutoScroll();\r\n }\r\n };\r\n // Kills any existing scrolling animation loop\r\n DragListener.prototype.endAutoScroll = function () {\r\n if (this.scrollIntervalId) {\r\n clearInterval(this.scrollIntervalId);\r\n this.scrollIntervalId = null;\r\n this.handleScrollEnd();\r\n }\r\n };\r\n // Get called when the scrollEl is scrolled (NOTE: this is delayed via debounce)\r\n DragListener.prototype.handleDebouncedScroll = function () {\r\n // recompute all coordinates, but *only* if this is *not* part of our scrolling animation\r\n if (!this.scrollIntervalId) {\r\n this.handleScrollEnd();\r\n }\r\n };\r\n DragListener.prototype.handleScrollEnd = function () {\r\n // Called when scrolling has stopped, whether through auto scroll, or the user scrolling\r\n };\r\n return DragListener;\r\n}());\r\nexports.default = DragListener;\r\nListenerMixin_1.default.mixInto(DragListener);\r\n\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar Mixin_1 = __webpack_require__(15);\r\n/*\r\nA set of rendering and date-related methods for a visual component comprised of one or more rows of day columns.\r\nPrerequisite: the object being mixed into needs to be a *Grid*\r\n*/\r\nvar DayTableMixin = /** @class */ (function (_super) {\r\n tslib_1.__extends(DayTableMixin, _super);\r\n function DayTableMixin() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n // Populates internal variables used for date calculation and rendering\r\n DayTableMixin.prototype.updateDayTable = function () {\r\n var t = this;\r\n var view = t.view;\r\n var calendar = view.calendar;\r\n var date = calendar.msToUtcMoment(t.dateProfile.renderUnzonedRange.startMs, true);\r\n var end = calendar.msToUtcMoment(t.dateProfile.renderUnzonedRange.endMs, true);\r\n var dayIndex = -1;\r\n var dayIndices = [];\r\n var dayDates = [];\r\n var daysPerRow;\r\n var firstDay;\r\n var rowCnt;\r\n while (date.isBefore(end)) { // loop each day from start to end\r\n if (view.isHiddenDay(date)) {\r\n dayIndices.push(dayIndex + 0.5); // mark that it's between indices\r\n }\r\n else {\r\n dayIndex++;\r\n dayIndices.push(dayIndex);\r\n dayDates.push(date.clone());\r\n }\r\n date.add(1, 'days');\r\n }\r\n if (this.breakOnWeeks) {\r\n // count columns until the day-of-week repeats\r\n firstDay = dayDates[0].day();\r\n for (daysPerRow = 1; daysPerRow < dayDates.length; daysPerRow++) {\r\n if (dayDates[daysPerRow].day() === firstDay) {\r\n break;\r\n }\r\n }\r\n rowCnt = Math.ceil(dayDates.length / daysPerRow);\r\n }\r\n else {\r\n rowCnt = 1;\r\n daysPerRow = dayDates.length;\r\n }\r\n this.dayDates = dayDates;\r\n this.dayIndices = dayIndices;\r\n this.daysPerRow = daysPerRow;\r\n this.rowCnt = rowCnt;\r\n this.updateDayTableCols();\r\n };\r\n // Computes and assigned the colCnt property and updates any options that may be computed from it\r\n DayTableMixin.prototype.updateDayTableCols = function () {\r\n this.colCnt = this.computeColCnt();\r\n this.colHeadFormat =\r\n this.opt('columnHeaderFormat') ||\r\n this.opt('columnFormat') || // deprecated\r\n this.computeColHeadFormat();\r\n };\r\n // Determines how many columns there should be in the table\r\n DayTableMixin.prototype.computeColCnt = function () {\r\n return this.daysPerRow;\r\n };\r\n // Computes the ambiguously-timed moment for the given cell\r\n DayTableMixin.prototype.getCellDate = function (row, col) {\r\n return this.dayDates[this.getCellDayIndex(row, col)].clone();\r\n };\r\n // Computes the ambiguously-timed date range for the given cell\r\n DayTableMixin.prototype.getCellRange = function (row, col) {\r\n var start = this.getCellDate(row, col);\r\n var end = start.clone().add(1, 'days');\r\n return { start: start, end: end };\r\n };\r\n // Returns the number of day cells, chronologically, from the first of the grid (0-based)\r\n DayTableMixin.prototype.getCellDayIndex = function (row, col) {\r\n return row * this.daysPerRow + this.getColDayIndex(col);\r\n };\r\n // Returns the numner of day cells, chronologically, from the first cell in *any given row*\r\n DayTableMixin.prototype.getColDayIndex = function (col) {\r\n if (this.isRTL) {\r\n return this.colCnt - 1 - col;\r\n }\r\n else {\r\n return col;\r\n }\r\n };\r\n // Given a date, returns its chronolocial cell-index from the first cell of the grid.\r\n // If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.\r\n // If before the first offset, returns a negative number.\r\n // If after the last offset, returns an offset past the last cell offset.\r\n // Only works for *start* dates of cells. Will not work for exclusive end dates for cells.\r\n DayTableMixin.prototype.getDateDayIndex = function (date) {\r\n var dayIndices = this.dayIndices;\r\n var dayOffset = date.diff(this.dayDates[0], 'days');\r\n if (dayOffset < 0) {\r\n return dayIndices[0] - 1;\r\n }\r\n else if (dayOffset >= dayIndices.length) {\r\n return dayIndices[dayIndices.length - 1] + 1;\r\n }\r\n else {\r\n return dayIndices[dayOffset];\r\n }\r\n };\r\n /* Options\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Computes a default column header formatting string if `colFormat` is not explicitly defined\r\n DayTableMixin.prototype.computeColHeadFormat = function () {\r\n // if more than one week row, or if there are a lot of columns with not much space,\r\n // put just the day numbers will be in each cell\r\n if (this.rowCnt > 1 || this.colCnt > 10) {\r\n return 'ddd'; // \"Sat\"\r\n }\r\n else if (this.colCnt > 1) {\r\n return this.opt('dayOfMonthFormat'); // \"Sat 12/10\"\r\n }\r\n else {\r\n return 'dddd'; // \"Saturday\"\r\n }\r\n };\r\n /* Slicing\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Slices up a date range into a segment for every week-row it intersects with\r\n DayTableMixin.prototype.sliceRangeByRow = function (unzonedRange) {\r\n var daysPerRow = this.daysPerRow;\r\n var normalRange = this.view.computeDayRange(unzonedRange); // make whole-day range, considering nextDayThreshold\r\n var rangeFirst = this.getDateDayIndex(normalRange.start); // inclusive first index\r\n var rangeLast = this.getDateDayIndex(normalRange.end.clone().subtract(1, 'days')); // inclusive last index\r\n var segs = [];\r\n var row;\r\n var rowFirst;\r\n var rowLast; // inclusive day-index range for current row\r\n var segFirst;\r\n var segLast; // inclusive day-index range for segment\r\n for (row = 0; row < this.rowCnt; row++) {\r\n rowFirst = row * daysPerRow;\r\n rowLast = rowFirst + daysPerRow - 1;\r\n // intersect segment's offset range with the row's\r\n segFirst = Math.max(rangeFirst, rowFirst);\r\n segLast = Math.min(rangeLast, rowLast);\r\n // deal with in-between indices\r\n segFirst = Math.ceil(segFirst); // in-between starts round to next cell\r\n segLast = Math.floor(segLast); // in-between ends round to prev cell\r\n if (segFirst <= segLast) { // was there any intersection with the current row?\r\n segs.push({\r\n row: row,\r\n // normalize to start of row\r\n firstRowDayIndex: segFirst - rowFirst,\r\n lastRowDayIndex: segLast - rowFirst,\r\n // must be matching integers to be the segment's start/end\r\n isStart: segFirst === rangeFirst,\r\n isEnd: segLast === rangeLast\r\n });\r\n }\r\n }\r\n return segs;\r\n };\r\n // Slices up a date range into a segment for every day-cell it intersects with.\r\n // TODO: make more DRY with sliceRangeByRow somehow.\r\n DayTableMixin.prototype.sliceRangeByDay = function (unzonedRange) {\r\n var daysPerRow = this.daysPerRow;\r\n var normalRange = this.view.computeDayRange(unzonedRange); // make whole-day range, considering nextDayThreshold\r\n var rangeFirst = this.getDateDayIndex(normalRange.start); // inclusive first index\r\n var rangeLast = this.getDateDayIndex(normalRange.end.clone().subtract(1, 'days')); // inclusive last index\r\n var segs = [];\r\n var row;\r\n var rowFirst;\r\n var rowLast; // inclusive day-index range for current row\r\n var i;\r\n var segFirst;\r\n var segLast; // inclusive day-index range for segment\r\n for (row = 0; row < this.rowCnt; row++) {\r\n rowFirst = row * daysPerRow;\r\n rowLast = rowFirst + daysPerRow - 1;\r\n for (i = rowFirst; i <= rowLast; i++) {\r\n // intersect segment's offset range with the row's\r\n segFirst = Math.max(rangeFirst, i);\r\n segLast = Math.min(rangeLast, i);\r\n // deal with in-between indices\r\n segFirst = Math.ceil(segFirst); // in-between starts round to next cell\r\n segLast = Math.floor(segLast); // in-between ends round to prev cell\r\n if (segFirst <= segLast) { // was there any intersection with the current row?\r\n segs.push({\r\n row: row,\r\n // normalize to start of row\r\n firstRowDayIndex: segFirst - rowFirst,\r\n lastRowDayIndex: segLast - rowFirst,\r\n // must be matching integers to be the segment's start/end\r\n isStart: segFirst === rangeFirst,\r\n isEnd: segLast === rangeLast\r\n });\r\n }\r\n }\r\n }\r\n return segs;\r\n };\r\n /* Header Rendering\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n DayTableMixin.prototype.renderHeadHtml = function () {\r\n var theme = this.view.calendar.theme;\r\n return '' +\r\n '
' +\r\n '' +\r\n '' +\r\n this.renderHeadTrHtml() +\r\n '' +\r\n '
' +\r\n '
';\r\n };\r\n DayTableMixin.prototype.renderHeadIntroHtml = function () {\r\n return this.renderIntroHtml(); // fall back to generic\r\n };\r\n DayTableMixin.prototype.renderHeadTrHtml = function () {\r\n return '' +\r\n '' +\r\n (this.isRTL ? '' : this.renderHeadIntroHtml()) +\r\n this.renderHeadDateCellsHtml() +\r\n (this.isRTL ? this.renderHeadIntroHtml() : '') +\r\n '';\r\n };\r\n DayTableMixin.prototype.renderHeadDateCellsHtml = function () {\r\n var htmls = [];\r\n var col;\r\n var date;\r\n for (col = 0; col < this.colCnt; col++) {\r\n date = this.getCellDate(0, col);\r\n htmls.push(this.renderHeadDateCellHtml(date));\r\n }\r\n return htmls.join('');\r\n };\r\n // TODO: when internalApiVersion, accept an object for HTML attributes\r\n // (colspan should be no different)\r\n DayTableMixin.prototype.renderHeadDateCellHtml = function (date, colspan, otherAttrs) {\r\n var t = this;\r\n var view = t.view;\r\n var isDateValid = t.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\r\n var classNames = [\r\n 'fc-day-header',\r\n view.calendar.theme.getClass('widgetHeader')\r\n ];\r\n var innerHtml;\r\n if (typeof t.opt('columnHeaderHtml') === 'function') {\r\n innerHtml = t.opt('columnHeaderHtml')(date);\r\n }\r\n else if (typeof t.opt('columnHeaderText') === 'function') {\r\n innerHtml = util_1.htmlEscape(t.opt('columnHeaderText')(date));\r\n }\r\n else {\r\n innerHtml = util_1.htmlEscape(date.format(t.colHeadFormat));\r\n }\r\n // if only one row of days, the classNames on the header can represent the specific days beneath\r\n if (t.rowCnt === 1) {\r\n classNames = classNames.concat(\r\n // includes the day-of-week class\r\n // noThemeHighlight=true (don't highlight the header)\r\n t.getDayClasses(date, true));\r\n }\r\n else {\r\n classNames.push('fc-' + util_1.dayIDs[date.day()]); // only add the day-of-week class\r\n }\r\n return '' +\r\n ' 1 ?\r\n ' colspan=\"' + colspan + '\"' :\r\n '') +\r\n (otherAttrs ?\r\n ' ' + otherAttrs :\r\n '') +\r\n '>' +\r\n (isDateValid ?\r\n // don't make a link if the heading could represent multiple days, or if there's only one day (forceOff)\r\n view.buildGotoAnchorHtml({ date: date, forceOff: t.rowCnt > 1 || t.colCnt === 1 }, innerHtml) :\r\n // if not valid, display text, but no link\r\n innerHtml) +\r\n '';\r\n };\r\n /* Background Rendering\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n DayTableMixin.prototype.renderBgTrHtml = function (row) {\r\n return '' +\r\n '' +\r\n (this.isRTL ? '' : this.renderBgIntroHtml(row)) +\r\n this.renderBgCellsHtml(row) +\r\n (this.isRTL ? this.renderBgIntroHtml(row) : '') +\r\n '';\r\n };\r\n DayTableMixin.prototype.renderBgIntroHtml = function (row) {\r\n return this.renderIntroHtml(); // fall back to generic\r\n };\r\n DayTableMixin.prototype.renderBgCellsHtml = function (row) {\r\n var htmls = [];\r\n var col;\r\n var date;\r\n for (col = 0; col < this.colCnt; col++) {\r\n date = this.getCellDate(row, col);\r\n htmls.push(this.renderBgCellHtml(date));\r\n }\r\n return htmls.join('');\r\n };\r\n DayTableMixin.prototype.renderBgCellHtml = function (date, otherAttrs) {\r\n var t = this;\r\n var view = t.view;\r\n var isDateValid = t.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\r\n var classes = t.getDayClasses(date);\r\n classes.unshift('fc-day', view.calendar.theme.getClass('widgetContent'));\r\n return '';\r\n };\r\n /* Generic\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n DayTableMixin.prototype.renderIntroHtml = function () {\r\n // Generates the default HTML intro for any row. User classes should override\r\n };\r\n // TODO: a generic method for dealing with , RTL, intro\r\n // when increment internalApiVersion\r\n // wrapTr (scheduler)\r\n /* Utils\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Applies the generic \"intro\" and \"outro\" HTML to the given cells.\r\n // Intro means the leftmost cell when the calendar is LTR and the rightmost cell when RTL. Vice-versa for outro.\r\n DayTableMixin.prototype.bookendCells = function (trEl) {\r\n var introHtml = this.renderIntroHtml();\r\n if (introHtml) {\r\n if (this.isRTL) {\r\n trEl.append(introHtml);\r\n }\r\n else {\r\n trEl.prepend(introHtml);\r\n }\r\n }\r\n };\r\n return DayTableMixin;\r\n}(Mixin_1.default));\r\nexports.default = DayTableMixin;\r\n\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar BusinessHourRenderer = /** @class */ (function () {\r\n /*\r\n component implements:\r\n - eventRangesToEventFootprints\r\n - eventFootprintsToSegs\r\n */\r\n function BusinessHourRenderer(component, fillRenderer) {\r\n this.component = component;\r\n this.fillRenderer = fillRenderer;\r\n }\r\n BusinessHourRenderer.prototype.render = function (businessHourGenerator) {\r\n var component = this.component;\r\n var unzonedRange = component._getDateProfile().activeUnzonedRange;\r\n var eventInstanceGroup = businessHourGenerator.buildEventInstanceGroup(component.hasAllDayBusinessHours, unzonedRange);\r\n var eventFootprints = eventInstanceGroup ?\r\n component.eventRangesToEventFootprints(eventInstanceGroup.sliceRenderRanges(unzonedRange)) :\r\n [];\r\n this.renderEventFootprints(eventFootprints);\r\n };\r\n BusinessHourRenderer.prototype.renderEventFootprints = function (eventFootprints) {\r\n var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n this.renderSegs(segs);\r\n this.segs = segs;\r\n };\r\n BusinessHourRenderer.prototype.renderSegs = function (segs) {\r\n if (this.fillRenderer) {\r\n this.fillRenderer.renderSegs('businessHours', segs, {\r\n getClasses: function (seg) {\r\n return ['fc-nonbusiness', 'fc-bgevent'];\r\n }\r\n });\r\n }\r\n };\r\n BusinessHourRenderer.prototype.unrender = function () {\r\n if (this.fillRenderer) {\r\n this.fillRenderer.unrender('businessHours');\r\n }\r\n this.segs = null;\r\n };\r\n BusinessHourRenderer.prototype.getSegs = function () {\r\n return this.segs || [];\r\n };\r\n return BusinessHourRenderer;\r\n}());\r\nexports.default = BusinessHourRenderer;\r\n\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar FillRenderer = /** @class */ (function () {\r\n function FillRenderer(component) {\r\n this.fillSegTag = 'div';\r\n this.component = component;\r\n this.elsByFill = {};\r\n }\r\n FillRenderer.prototype.renderFootprint = function (type, componentFootprint, props) {\r\n this.renderSegs(type, this.component.componentFootprintToSegs(componentFootprint), props);\r\n };\r\n FillRenderer.prototype.renderSegs = function (type, segs, props) {\r\n var els;\r\n segs = this.buildSegEls(type, segs, props); // assignes `.el` to each seg. returns successfully rendered segs\r\n els = this.attachSegEls(type, segs);\r\n if (els) {\r\n this.reportEls(type, els);\r\n }\r\n return segs;\r\n };\r\n // Unrenders a specific type of fill that is currently rendered on the grid\r\n FillRenderer.prototype.unrender = function (type) {\r\n var el = this.elsByFill[type];\r\n if (el) {\r\n el.remove();\r\n delete this.elsByFill[type];\r\n }\r\n };\r\n // Renders and assigns an `el` property for each fill segment. Generic enough to work with different types.\r\n // Only returns segments that successfully rendered.\r\n FillRenderer.prototype.buildSegEls = function (type, segs, props) {\r\n var _this = this;\r\n var html = '';\r\n var renderedSegs = [];\r\n var i;\r\n if (segs.length) {\r\n // build a large concatenation of segment HTML\r\n for (i = 0; i < segs.length; i++) {\r\n html += this.buildSegHtml(type, segs[i], props);\r\n }\r\n // Grab individual elements from the combined HTML string. Use each as the default rendering.\r\n // Then, compute the 'el' for each segment.\r\n $(html).each(function (i, node) {\r\n var seg = segs[i];\r\n var el = $(node);\r\n // allow custom filter methods per-type\r\n if (props.filterEl) {\r\n el = props.filterEl(seg, el);\r\n }\r\n if (el) { // custom filters did not cancel the render\r\n el = $(el); // allow custom filter to return raw DOM node\r\n // correct element type? (would be bad if a non-TD were inserted into a table for example)\r\n if (el.is(_this.fillSegTag)) {\r\n seg.el = el;\r\n renderedSegs.push(seg);\r\n }\r\n }\r\n });\r\n }\r\n return renderedSegs;\r\n };\r\n // Builds the HTML needed for one fill segment. Generic enough to work with different types.\r\n FillRenderer.prototype.buildSegHtml = function (type, seg, props) {\r\n // custom hooks per-type\r\n var classes = props.getClasses ? props.getClasses(seg) : [];\r\n var css = util_1.cssToStr(props.getCss ? props.getCss(seg) : {});\r\n return '<' + this.fillSegTag +\r\n (classes.length ? ' class=\"' + classes.join(' ') + '\"' : '') +\r\n (css ? ' style=\"' + css + '\"' : '') +\r\n ' />';\r\n };\r\n // Should return wrapping DOM structure\r\n FillRenderer.prototype.attachSegEls = function (type, segs) {\r\n // subclasses must implement\r\n };\r\n FillRenderer.prototype.reportEls = function (type, nodes) {\r\n if (this.elsByFill[type]) {\r\n this.elsByFill[type] = this.elsByFill[type].add(nodes);\r\n }\r\n else {\r\n this.elsByFill[type] = $(nodes);\r\n }\r\n };\r\n return FillRenderer;\r\n}());\r\nexports.default = FillRenderer;\r\n\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar HelperRenderer = /** @class */ (function () {\r\n function HelperRenderer(component, eventRenderer) {\r\n this.view = component._getView();\r\n this.component = component;\r\n this.eventRenderer = eventRenderer;\r\n }\r\n HelperRenderer.prototype.renderComponentFootprint = function (componentFootprint) {\r\n this.renderEventFootprints([\r\n this.fabricateEventFootprint(componentFootprint)\r\n ]);\r\n };\r\n HelperRenderer.prototype.renderEventDraggingFootprints = function (eventFootprints, sourceSeg, isTouch) {\r\n this.renderEventFootprints(eventFootprints, sourceSeg, 'fc-dragging', isTouch ? null : this.view.opt('dragOpacity'));\r\n };\r\n HelperRenderer.prototype.renderEventResizingFootprints = function (eventFootprints, sourceSeg, isTouch) {\r\n this.renderEventFootprints(eventFootprints, sourceSeg, 'fc-resizing');\r\n };\r\n HelperRenderer.prototype.renderEventFootprints = function (eventFootprints, sourceSeg, extraClassNames, opacity) {\r\n var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n var classNames = 'fc-helper ' + (extraClassNames || '');\r\n var i;\r\n // assigns each seg's el and returns a subset of segs that were rendered\r\n segs = this.eventRenderer.renderFgSegEls(segs);\r\n for (i = 0; i < segs.length; i++) {\r\n segs[i].el.addClass(classNames);\r\n }\r\n if (opacity != null) {\r\n for (i = 0; i < segs.length; i++) {\r\n segs[i].el.css('opacity', opacity);\r\n }\r\n }\r\n this.helperEls = this.renderSegs(segs, sourceSeg);\r\n };\r\n /*\r\n Must return all mock event elements\r\n */\r\n HelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {\r\n // Subclasses must implement\r\n };\r\n HelperRenderer.prototype.unrender = function () {\r\n if (this.helperEls) {\r\n this.helperEls.remove();\r\n this.helperEls = null;\r\n }\r\n };\r\n HelperRenderer.prototype.fabricateEventFootprint = function (componentFootprint) {\r\n var calendar = this.view.calendar;\r\n var eventDateProfile = calendar.footprintToDateProfile(componentFootprint);\r\n var dummyEvent = new SingleEventDef_1.default(new EventSource_1.default(calendar));\r\n var dummyInstance;\r\n dummyEvent.dateProfile = eventDateProfile;\r\n dummyInstance = dummyEvent.buildInstance();\r\n return new EventFootprint_1.default(componentFootprint, dummyEvent, dummyInstance);\r\n };\r\n return HelperRenderer;\r\n}());\r\nexports.default = HelperRenderer;\r\n\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar EventPointing = /** @class */ (function (_super) {\r\n tslib_1.__extends(EventPointing, _super);\r\n function EventPointing() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n /*\r\n component must implement:\r\n - publiclyTrigger\r\n */\r\n EventPointing.prototype.bindToEl = function (el) {\r\n var component = this.component;\r\n component.bindSegHandlerToEl(el, 'click', this.handleClick.bind(this));\r\n component.bindSegHandlerToEl(el, 'mouseenter', this.handleMouseover.bind(this));\r\n component.bindSegHandlerToEl(el, 'mouseleave', this.handleMouseout.bind(this));\r\n };\r\n EventPointing.prototype.handleClick = function (seg, ev) {\r\n var res = this.component.publiclyTrigger('eventClick', {\r\n context: seg.el[0],\r\n args: [seg.footprint.getEventLegacy(), ev, this.view]\r\n });\r\n if (res === false) {\r\n ev.preventDefault();\r\n }\r\n };\r\n // Updates internal state and triggers handlers for when an event element is moused over\r\n EventPointing.prototype.handleMouseover = function (seg, ev) {\r\n if (!GlobalEmitter_1.default.get().shouldIgnoreMouse() &&\r\n !this.mousedOverSeg) {\r\n this.mousedOverSeg = seg;\r\n // TODO: move to EventSelecting's responsibility\r\n if (this.view.isEventDefResizable(seg.footprint.eventDef)) {\r\n seg.el.addClass('fc-allow-mouse-resize');\r\n }\r\n this.component.publiclyTrigger('eventMouseover', {\r\n context: seg.el[0],\r\n args: [seg.footprint.getEventLegacy(), ev, this.view]\r\n });\r\n }\r\n };\r\n // Updates internal state and triggers handlers for when an event element is moused out.\r\n // Can be given no arguments, in which case it will mouseout the segment that was previously moused over.\r\n EventPointing.prototype.handleMouseout = function (seg, ev) {\r\n if (this.mousedOverSeg) {\r\n this.mousedOverSeg = null;\r\n // TODO: move to EventSelecting's responsibility\r\n if (this.view.isEventDefResizable(seg.footprint.eventDef)) {\r\n seg.el.removeClass('fc-allow-mouse-resize');\r\n }\r\n this.component.publiclyTrigger('eventMouseout', {\r\n context: seg.el[0],\r\n args: [\r\n seg.footprint.getEventLegacy(),\r\n ev || {},\r\n this.view\r\n ]\r\n });\r\n }\r\n };\r\n EventPointing.prototype.end = function () {\r\n if (this.mousedOverSeg) {\r\n this.handleMouseout(this.mousedOverSeg);\r\n }\r\n };\r\n return EventPointing;\r\n}(Interaction_1.default));\r\nexports.default = EventPointing;\r\n\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar DateClicking_1 = __webpack_require__(237);\r\nvar DateSelecting_1 = __webpack_require__(236);\r\nvar EventPointing_1 = __webpack_require__(64);\r\nvar EventDragging_1 = __webpack_require__(235);\r\nvar EventResizing_1 = __webpack_require__(234);\r\nvar ExternalDropping_1 = __webpack_require__(233);\r\nvar StandardInteractionsMixin = /** @class */ (function (_super) {\r\n tslib_1.__extends(StandardInteractionsMixin, _super);\r\n function StandardInteractionsMixin() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n return StandardInteractionsMixin;\r\n}(Mixin_1.default));\r\nexports.default = StandardInteractionsMixin;\r\nStandardInteractionsMixin.prototype.dateClickingClass = DateClicking_1.default;\r\nStandardInteractionsMixin.prototype.dateSelectingClass = DateSelecting_1.default;\r\nStandardInteractionsMixin.prototype.eventPointingClass = EventPointing_1.default;\r\nStandardInteractionsMixin.prototype.eventDraggingClass = EventDragging_1.default;\r\nStandardInteractionsMixin.prototype.eventResizingClass = EventResizing_1.default;\r\nStandardInteractionsMixin.prototype.externalDroppingClass = ExternalDropping_1.default;\r\n\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar CoordCache_1 = __webpack_require__(58);\r\nvar Popover_1 = __webpack_require__(227);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nvar BusinessHourRenderer_1 = __webpack_require__(61);\r\nvar StandardInteractionsMixin_1 = __webpack_require__(65);\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nvar DayTableMixin_1 = __webpack_require__(60);\r\nvar DayGridEventRenderer_1 = __webpack_require__(243);\r\nvar DayGridHelperRenderer_1 = __webpack_require__(244);\r\nvar DayGridFillRenderer_1 = __webpack_require__(245);\r\n/* A component that renders a grid of whole-days that runs horizontally. There can be multiple rows, one per week.\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar DayGrid = /** @class */ (function (_super) {\r\n tslib_1.__extends(DayGrid, _super);\r\n function DayGrid(view) {\r\n var _this = _super.call(this, view) || this;\r\n _this.cellWeekNumbersVisible = false; // display week numbers in day cell?\r\n _this.bottomCoordPadding = 0; // hack for extending the hit area for the last row of the coordinate grid\r\n // isRigid determines whether the individual rows should ignore the contents and be a constant height.\r\n // Relies on the view's colCnt and rowCnt. In the future, this component should probably be self-sufficient.\r\n _this.isRigid = false;\r\n _this.hasAllDayBusinessHours = true;\r\n return _this;\r\n }\r\n // Slices up the given span (unzoned start/end with other misc data) into an array of segments\r\n DayGrid.prototype.componentFootprintToSegs = function (componentFootprint) {\r\n var segs = this.sliceRangeByRow(componentFootprint.unzonedRange);\r\n var i;\r\n var seg;\r\n for (i = 0; i < segs.length; i++) {\r\n seg = segs[i];\r\n if (this.isRTL) {\r\n seg.leftCol = this.daysPerRow - 1 - seg.lastRowDayIndex;\r\n seg.rightCol = this.daysPerRow - 1 - seg.firstRowDayIndex;\r\n }\r\n else {\r\n seg.leftCol = seg.firstRowDayIndex;\r\n seg.rightCol = seg.lastRowDayIndex;\r\n }\r\n }\r\n return segs;\r\n };\r\n /* Date Rendering\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n DayGrid.prototype.renderDates = function (dateProfile) {\r\n this.dateProfile = dateProfile;\r\n this.updateDayTable();\r\n this.renderGrid();\r\n };\r\n DayGrid.prototype.unrenderDates = function () {\r\n this.removeSegPopover();\r\n };\r\n // Renders the rows and columns into the component's `this.el`, which should already be assigned.\r\n DayGrid.prototype.renderGrid = function () {\r\n var view = this.view;\r\n var rowCnt = this.rowCnt;\r\n var colCnt = this.colCnt;\r\n var html = '';\r\n var row;\r\n var col;\r\n if (this.headContainerEl) {\r\n this.headContainerEl.html(this.renderHeadHtml());\r\n }\r\n for (row = 0; row < rowCnt; row++) {\r\n html += this.renderDayRowHtml(row, this.isRigid);\r\n }\r\n this.el.html(html);\r\n this.rowEls = this.el.find('.fc-row');\r\n this.cellEls = this.el.find('.fc-day, .fc-disabled-day');\r\n this.rowCoordCache = new CoordCache_1.default({\r\n els: this.rowEls,\r\n isVertical: true\r\n });\r\n this.colCoordCache = new CoordCache_1.default({\r\n els: this.cellEls.slice(0, this.colCnt),\r\n isHorizontal: true\r\n });\r\n // trigger dayRender with each cell's element\r\n for (row = 0; row < rowCnt; row++) {\r\n for (col = 0; col < colCnt; col++) {\r\n this.publiclyTrigger('dayRender', {\r\n context: view,\r\n args: [\r\n this.getCellDate(row, col),\r\n this.getCellEl(row, col),\r\n view\r\n ]\r\n });\r\n }\r\n }\r\n };\r\n // Generates the HTML for a single row, which is a div that wraps a table.\r\n // `row` is the row number.\r\n DayGrid.prototype.renderDayRowHtml = function (row, isRigid) {\r\n var theme = this.view.calendar.theme;\r\n var classes = ['fc-row', 'fc-week', theme.getClass('dayRow')];\r\n if (isRigid) {\r\n classes.push('fc-rigid');\r\n }\r\n return '' +\r\n '
' +\r\n '
' +\r\n '' +\r\n this.renderBgTrHtml(row) +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '' +\r\n (this.getIsNumbersVisible() ?\r\n '' +\r\n this.renderNumberTrHtml(row) +\r\n '' :\r\n '') +\r\n '
' +\r\n '
' +\r\n '
';\r\n };\r\n DayGrid.prototype.getIsNumbersVisible = function () {\r\n return this.getIsDayNumbersVisible() || this.cellWeekNumbersVisible;\r\n };\r\n DayGrid.prototype.getIsDayNumbersVisible = function () {\r\n return this.rowCnt > 1;\r\n };\r\n /* Grid Number Rendering\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n DayGrid.prototype.renderNumberTrHtml = function (row) {\r\n return '' +\r\n '' +\r\n (this.isRTL ? '' : this.renderNumberIntroHtml(row)) +\r\n this.renderNumberCellsHtml(row) +\r\n (this.isRTL ? this.renderNumberIntroHtml(row) : '') +\r\n '';\r\n };\r\n DayGrid.prototype.renderNumberIntroHtml = function (row) {\r\n return this.renderIntroHtml();\r\n };\r\n DayGrid.prototype.renderNumberCellsHtml = function (row) {\r\n var htmls = [];\r\n var col;\r\n var date;\r\n for (col = 0; col < this.colCnt; col++) {\r\n date = this.getCellDate(row, col);\r\n htmls.push(this.renderNumberCellHtml(date));\r\n }\r\n return htmls.join('');\r\n };\r\n // Generates the HTML for the s of the \"number\" row in the DayGrid's content skeleton.\r\n // The number row will only exist if either day numbers or week numbers are turned on.\r\n DayGrid.prototype.renderNumberCellHtml = function (date) {\r\n var view = this.view;\r\n var html = '';\r\n var isDateValid = this.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\r\n var isDayNumberVisible = this.getIsDayNumbersVisible() && isDateValid;\r\n var classes;\r\n var weekCalcFirstDoW;\r\n if (!isDayNumberVisible && !this.cellWeekNumbersVisible) {\r\n // no numbers in day cell (week number must be along the side)\r\n return ''; // will create an empty space above events :(\r\n }\r\n classes = this.getDayClasses(date);\r\n classes.unshift('fc-day-top');\r\n if (this.cellWeekNumbersVisible) {\r\n // To determine the day of week number change under ISO, we cannot\r\n // rely on moment.js methods such as firstDayOfWeek() or weekday(),\r\n // because they rely on the locale's dow (possibly overridden by\r\n // our firstDay option), which may not be Monday. We cannot change\r\n // dow, because that would affect the calendar start day as well.\r\n if (date._locale._fullCalendar_weekCalc === 'ISO') {\r\n weekCalcFirstDoW = 1; // Monday by ISO 8601 definition\r\n }\r\n else {\r\n weekCalcFirstDoW = date._locale.firstDayOfWeek();\r\n }\r\n }\r\n html += '';\r\n if (this.cellWeekNumbersVisible && (date.day() === weekCalcFirstDoW)) {\r\n html += view.buildGotoAnchorHtml({ date: date, type: 'week' }, { 'class': 'fc-week-number' }, date.format('w') // inner HTML\r\n );\r\n }\r\n if (isDayNumberVisible) {\r\n html += view.buildGotoAnchorHtml(date, { 'class': 'fc-day-number' }, date.format('D') // inner HTML\r\n );\r\n }\r\n html += '';\r\n return html;\r\n };\r\n /* Hit System\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n DayGrid.prototype.prepareHits = function () {\r\n this.colCoordCache.build();\r\n this.rowCoordCache.build();\r\n this.rowCoordCache.bottoms[this.rowCnt - 1] += this.bottomCoordPadding; // hack\r\n };\r\n DayGrid.prototype.releaseHits = function () {\r\n this.colCoordCache.clear();\r\n this.rowCoordCache.clear();\r\n };\r\n DayGrid.prototype.queryHit = function (leftOffset, topOffset) {\r\n if (this.colCoordCache.isLeftInBounds(leftOffset) && this.rowCoordCache.isTopInBounds(topOffset)) {\r\n var col = this.colCoordCache.getHorizontalIndex(leftOffset);\r\n var row = this.rowCoordCache.getVerticalIndex(topOffset);\r\n if (row != null && col != null) {\r\n return this.getCellHit(row, col);\r\n }\r\n }\r\n };\r\n DayGrid.prototype.getHitFootprint = function (hit) {\r\n var range = this.getCellRange(hit.row, hit.col);\r\n return new ComponentFootprint_1.default(new UnzonedRange_1.default(range.start, range.end), true // all-day?\r\n );\r\n };\r\n DayGrid.prototype.getHitEl = function (hit) {\r\n return this.getCellEl(hit.row, hit.col);\r\n };\r\n /* Cell System\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // FYI: the first column is the leftmost column, regardless of date\r\n DayGrid.prototype.getCellHit = function (row, col) {\r\n return {\r\n row: row,\r\n col: col,\r\n component: this,\r\n left: this.colCoordCache.getLeftOffset(col),\r\n right: this.colCoordCache.getRightOffset(col),\r\n top: this.rowCoordCache.getTopOffset(row),\r\n bottom: this.rowCoordCache.getBottomOffset(row)\r\n };\r\n };\r\n DayGrid.prototype.getCellEl = function (row, col) {\r\n return this.cellEls.eq(row * this.colCnt + col);\r\n };\r\n /* Event Rendering\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Unrenders all events currently rendered on the grid\r\n DayGrid.prototype.executeEventUnrender = function () {\r\n this.removeSegPopover(); // removes the \"more..\" events popover\r\n _super.prototype.executeEventUnrender.call(this);\r\n };\r\n // Retrieves all rendered segment objects currently rendered on the grid\r\n DayGrid.prototype.getOwnEventSegs = function () {\r\n // append the segments from the \"more...\" popover\r\n return _super.prototype.getOwnEventSegs.call(this).concat(this.popoverSegs || []);\r\n };\r\n /* Event Drag Visualization\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Renders a visual indication of an event or external element being dragged.\r\n // `eventLocation` has zoned start and end (optional)\r\n DayGrid.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n var i;\r\n for (i = 0; i < eventFootprints.length; i++) {\r\n this.renderHighlight(eventFootprints[i].componentFootprint);\r\n }\r\n // render drags from OTHER components as helpers\r\n if (eventFootprints.length && seg && seg.component !== this) {\r\n this.helperRenderer.renderEventDraggingFootprints(eventFootprints, seg, isTouch);\r\n return true; // signal helpers rendered\r\n }\r\n };\r\n // Unrenders any visual indication of a hovering event\r\n DayGrid.prototype.unrenderDrag = function () {\r\n this.unrenderHighlight();\r\n this.helperRenderer.unrender();\r\n };\r\n /* Event Resize Visualization\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Renders a visual indication of an event being resized\r\n DayGrid.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n var i;\r\n for (i = 0; i < eventFootprints.length; i++) {\r\n this.renderHighlight(eventFootprints[i].componentFootprint);\r\n }\r\n this.helperRenderer.renderEventResizingFootprints(eventFootprints, seg, isTouch);\r\n };\r\n // Unrenders a visual indication of an event being resized\r\n DayGrid.prototype.unrenderEventResize = function () {\r\n this.unrenderHighlight();\r\n this.helperRenderer.unrender();\r\n };\r\n /* More+ Link Popover\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n DayGrid.prototype.removeSegPopover = function () {\r\n if (this.segPopover) {\r\n this.segPopover.hide(); // in handler, will call segPopover's removeElement\r\n }\r\n };\r\n // Limits the number of \"levels\" (vertically stacking layers of events) for each row of the grid.\r\n // `levelLimit` can be false (don't limit), a number, or true (should be computed).\r\n DayGrid.prototype.limitRows = function (levelLimit) {\r\n var rowStructs = this.eventRenderer.rowStructs || [];\r\n var row; // row #\r\n var rowLevelLimit;\r\n for (row = 0; row < rowStructs.length; row++) {\r\n this.unlimitRow(row);\r\n if (!levelLimit) {\r\n rowLevelLimit = false;\r\n }\r\n else if (typeof levelLimit === 'number') {\r\n rowLevelLimit = levelLimit;\r\n }\r\n else {\r\n rowLevelLimit = this.computeRowLevelLimit(row);\r\n }\r\n if (rowLevelLimit !== false) {\r\n this.limitRow(row, rowLevelLimit);\r\n }\r\n }\r\n };\r\n // Computes the number of levels a row will accomodate without going outside its bounds.\r\n // Assumes the row is \"rigid\" (maintains a constant height regardless of what is inside).\r\n // `row` is the row number.\r\n DayGrid.prototype.computeRowLevelLimit = function (row) {\r\n var rowEl = this.rowEls.eq(row); // the containing \"fake\" row div\r\n var rowHeight = rowEl.height(); // TODO: cache somehow?\r\n var trEls = this.eventRenderer.rowStructs[row].tbodyEl.children();\r\n var i;\r\n var trEl;\r\n var trHeight;\r\n function iterInnerHeights(i, childNode) {\r\n trHeight = Math.max(trHeight, $(childNode).outerHeight());\r\n }\r\n // Reveal one level at a time and stop when we find one out of bounds\r\n for (i = 0; i < trEls.length; i++) {\r\n trEl = trEls.eq(i).removeClass('fc-limited'); // reset to original state (reveal)\r\n // with rowspans>1 and IE8, trEl.outerHeight() would return the height of the largest cell,\r\n // so instead, find the tallest inner content element.\r\n trHeight = 0;\r\n trEl.find('> td > :first-child').each(iterInnerHeights);\r\n if (trEl.position().top + trHeight > rowHeight) {\r\n return i;\r\n }\r\n }\r\n return false; // should not limit at all\r\n };\r\n // Limits the given grid row to the maximum number of levels and injects \"more\" links if necessary.\r\n // `row` is the row number.\r\n // `levelLimit` is a number for the maximum (inclusive) number of levels allowed.\r\n DayGrid.prototype.limitRow = function (row, levelLimit) {\r\n var _this = this;\r\n var rowStruct = this.eventRenderer.rowStructs[row];\r\n var moreNodes = []; // array of \"more\" links and DOM nodes\r\n var col = 0; // col #, left-to-right (not chronologically)\r\n var levelSegs; // array of segment objects in the last allowable level, ordered left-to-right\r\n var cellMatrix; // a matrix (by level, then column) of all jQuery elements in the row\r\n var limitedNodes; // array of temporarily hidden level and segment DOM nodes\r\n var i;\r\n var seg;\r\n var segsBelow; // array of segment objects below `seg` in the current `col`\r\n var totalSegsBelow; // total number of segments below `seg` in any of the columns `seg` occupies\r\n var colSegsBelow; // array of segment arrays, below seg, one for each column (offset from segs's first column)\r\n var td;\r\n var rowspan;\r\n var segMoreNodes; // array of \"more\" cells that will stand-in for the current seg's cell\r\n var j;\r\n var moreTd;\r\n var moreWrap;\r\n var moreLink;\r\n // Iterates through empty level cells and places \"more\" links inside if need be\r\n var emptyCellsUntil = function (endCol) {\r\n while (col < endCol) {\r\n segsBelow = _this.getCellSegs(row, col, levelLimit);\r\n if (segsBelow.length) {\r\n td = cellMatrix[levelLimit - 1][col];\r\n moreLink = _this.renderMoreLink(row, col, segsBelow);\r\n moreWrap = $('
').append(moreLink);\r\n td.append(moreWrap);\r\n moreNodes.push(moreWrap[0]);\r\n }\r\n col++;\r\n }\r\n };\r\n if (levelLimit && levelLimit < rowStruct.segLevels.length) { // is it actually over the limit?\r\n levelSegs = rowStruct.segLevels[levelLimit - 1];\r\n cellMatrix = rowStruct.cellMatrix;\r\n limitedNodes = rowStruct.tbodyEl.children().slice(levelLimit) // get level elements past the limit\r\n .addClass('fc-limited').get(); // hide elements and get a simple DOM-nodes array\r\n // iterate though segments in the last allowable level\r\n for (i = 0; i < levelSegs.length; i++) {\r\n seg = levelSegs[i];\r\n emptyCellsUntil(seg.leftCol); // process empty cells before the segment\r\n // determine *all* segments below `seg` that occupy the same columns\r\n colSegsBelow = [];\r\n totalSegsBelow = 0;\r\n while (col <= seg.rightCol) {\r\n segsBelow = this.getCellSegs(row, col, levelLimit);\r\n colSegsBelow.push(segsBelow);\r\n totalSegsBelow += segsBelow.length;\r\n col++;\r\n }\r\n if (totalSegsBelow) { // do we need to replace this segment with one or many \"more\" links?\r\n td = cellMatrix[levelLimit - 1][seg.leftCol]; // the segment's parent cell\r\n rowspan = td.attr('rowspan') || 1;\r\n segMoreNodes = [];\r\n // make a replacement for each column the segment occupies. will be one for each colspan\r\n for (j = 0; j < colSegsBelow.length; j++) {\r\n moreTd = $('').attr('rowspan', rowspan);\r\n segsBelow = colSegsBelow[j];\r\n moreLink = this.renderMoreLink(row, seg.leftCol + j, [seg].concat(segsBelow) // count seg as hidden too\r\n );\r\n moreWrap = $('
').append(moreLink);\r\n moreTd.append(moreWrap);\r\n segMoreNodes.push(moreTd[0]);\r\n moreNodes.push(moreTd[0]);\r\n }\r\n td.addClass('fc-limited').after($(segMoreNodes)); // hide original and inject replacements\r\n limitedNodes.push(td[0]);\r\n }\r\n }\r\n emptyCellsUntil(this.colCnt); // finish off the level\r\n rowStruct.moreEls = $(moreNodes); // for easy undoing later\r\n rowStruct.limitedEls = $(limitedNodes); // for easy undoing later\r\n }\r\n };\r\n // Reveals all levels and removes all \"more\"-related elements for a grid's row.\r\n // `row` is a row number.\r\n DayGrid.prototype.unlimitRow = function (row) {\r\n var rowStruct = this.eventRenderer.rowStructs[row];\r\n if (rowStruct.moreEls) {\r\n rowStruct.moreEls.remove();\r\n rowStruct.moreEls = null;\r\n }\r\n if (rowStruct.limitedEls) {\r\n rowStruct.limitedEls.removeClass('fc-limited');\r\n rowStruct.limitedEls = null;\r\n }\r\n };\r\n // Renders an element that represents hidden event element for a cell.\r\n // Responsible for attaching click handler as well.\r\n DayGrid.prototype.renderMoreLink = function (row, col, hiddenSegs) {\r\n var _this = this;\r\n var view = this.view;\r\n return $('')\r\n .text(this.getMoreLinkText(hiddenSegs.length))\r\n .on('click', function (ev) {\r\n var clickOption = _this.opt('eventLimitClick');\r\n var date = _this.getCellDate(row, col);\r\n var moreEl = $(ev.currentTarget);\r\n var dayEl = _this.getCellEl(row, col);\r\n var allSegs = _this.getCellSegs(row, col);\r\n // rescope the segments to be within the cell's date\r\n var reslicedAllSegs = _this.resliceDaySegs(allSegs, date);\r\n var reslicedHiddenSegs = _this.resliceDaySegs(hiddenSegs, date);\r\n if (typeof clickOption === 'function') {\r\n // the returned value can be an atomic option\r\n clickOption = _this.publiclyTrigger('eventLimitClick', {\r\n context: view,\r\n args: [\r\n {\r\n date: date.clone(),\r\n dayEl: dayEl,\r\n moreEl: moreEl,\r\n segs: reslicedAllSegs,\r\n hiddenSegs: reslicedHiddenSegs\r\n },\r\n ev,\r\n view\r\n ]\r\n });\r\n }\r\n if (clickOption === 'popover') {\r\n _this.showSegPopover(row, col, moreEl, reslicedAllSegs);\r\n }\r\n else if (typeof clickOption === 'string') { // a view name\r\n view.calendar.zoomTo(date, clickOption);\r\n }\r\n });\r\n };\r\n // Reveals the popover that displays all events within a cell\r\n DayGrid.prototype.showSegPopover = function (row, col, moreLink, segs) {\r\n var _this = this;\r\n var view = this.view;\r\n var moreWrap = moreLink.parent(); // the
wrapper around the \r\n var topEl; // the element we want to match the top coordinate of\r\n var options;\r\n if (this.rowCnt === 1) {\r\n topEl = view.el; // will cause the popover to cover any sort of header\r\n }\r\n else {\r\n topEl = this.rowEls.eq(row); // will align with top of row\r\n }\r\n options = {\r\n className: 'fc-more-popover ' + view.calendar.theme.getClass('popover'),\r\n content: this.renderSegPopoverContent(row, col, segs),\r\n parentEl: view.el,\r\n top: topEl.offset().top,\r\n autoHide: true,\r\n viewportConstrain: this.opt('popoverViewportConstrain'),\r\n hide: function () {\r\n // kill everything when the popover is hidden\r\n // notify events to be removed\r\n if (_this.popoverSegs) {\r\n _this.triggerBeforeEventSegsDestroyed(_this.popoverSegs);\r\n }\r\n _this.segPopover.removeElement();\r\n _this.segPopover = null;\r\n _this.popoverSegs = null;\r\n }\r\n };\r\n // Determine horizontal coordinate.\r\n // We use the moreWrap instead of the to avoid border confusion.\r\n if (this.isRTL) {\r\n options.right = moreWrap.offset().left + moreWrap.outerWidth() + 1; // +1 to be over cell border\r\n }\r\n else {\r\n options.left = moreWrap.offset().left - 1; // -1 to be over cell border\r\n }\r\n this.segPopover = new Popover_1.default(options);\r\n this.segPopover.show();\r\n // the popover doesn't live within the grid's container element, and thus won't get the event\r\n // delegated-handlers for free. attach event-related handlers to the popover.\r\n this.bindAllSegHandlersToEl(this.segPopover.el);\r\n this.triggerAfterEventSegsRendered(segs);\r\n };\r\n // Builds the inner DOM contents of the segment popover\r\n DayGrid.prototype.renderSegPopoverContent = function (row, col, segs) {\r\n var view = this.view;\r\n var theme = view.calendar.theme;\r\n var title = this.getCellDate(row, col).format(this.opt('dayPopoverFormat'));\r\n var content = $('
' +\r\n '' +\r\n '' +\r\n util_1.htmlEscape(title) +\r\n '' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
');\r\n var segContainer = content.find('.fc-event-container');\r\n var i;\r\n // render each seg's `el` and only return the visible segs\r\n segs = this.eventRenderer.renderFgSegEls(segs, true); // disableResizing=true\r\n this.popoverSegs = segs;\r\n for (i = 0; i < segs.length; i++) {\r\n // because segments in the popover are not part of a grid coordinate system, provide a hint to any\r\n // grids that want to do drag-n-drop about which cell it came from\r\n this.hitsNeeded();\r\n segs[i].hit = this.getCellHit(row, col);\r\n this.hitsNotNeeded();\r\n segContainer.append(segs[i].el);\r\n }\r\n return content;\r\n };\r\n // Given the events within an array of segment objects, reslice them to be in a single day\r\n DayGrid.prototype.resliceDaySegs = function (segs, dayDate) {\r\n var dayStart = dayDate.clone();\r\n var dayEnd = dayStart.clone().add(1, 'days');\r\n var dayRange = new UnzonedRange_1.default(dayStart, dayEnd);\r\n var newSegs = [];\r\n var i;\r\n var seg;\r\n var slicedRange;\r\n for (i = 0; i < segs.length; i++) {\r\n seg = segs[i];\r\n slicedRange = seg.footprint.componentFootprint.unzonedRange.intersect(dayRange);\r\n if (slicedRange) {\r\n newSegs.push($.extend({}, seg, {\r\n footprint: new EventFootprint_1.default(new ComponentFootprint_1.default(slicedRange, seg.footprint.componentFootprint.isAllDay), seg.footprint.eventDef, seg.footprint.eventInstance),\r\n isStart: seg.isStart && slicedRange.isStart,\r\n isEnd: seg.isEnd && slicedRange.isEnd\r\n }));\r\n }\r\n }\r\n // force an order because eventsToSegs doesn't guarantee one\r\n // TODO: research if still needed\r\n this.eventRenderer.sortEventSegs(newSegs);\r\n return newSegs;\r\n };\r\n // Generates the text that should be inside a \"more\" link, given the number of events it represents\r\n DayGrid.prototype.getMoreLinkText = function (num) {\r\n var opt = this.opt('eventLimitText');\r\n if (typeof opt === 'function') {\r\n return opt(num);\r\n }\r\n else {\r\n return '+' + num + ' ' + opt;\r\n }\r\n };\r\n // Returns segments within a given cell.\r\n // If `startLevel` is specified, returns only events including and below that level. Otherwise returns all segs.\r\n DayGrid.prototype.getCellSegs = function (row, col, startLevel) {\r\n var segMatrix = this.eventRenderer.rowStructs[row].segMatrix;\r\n var level = startLevel || 0;\r\n var segs = [];\r\n var seg;\r\n while (level < segMatrix.length) {\r\n seg = segMatrix[level][col];\r\n if (seg) {\r\n segs.push(seg);\r\n }\r\n level++;\r\n }\r\n return segs;\r\n };\r\n return DayGrid;\r\n}(InteractiveDateComponent_1.default));\r\nexports.default = DayGrid;\r\nDayGrid.prototype.eventRendererClass = DayGridEventRenderer_1.default;\r\nDayGrid.prototype.businessHourRendererClass = BusinessHourRenderer_1.default;\r\nDayGrid.prototype.helperRendererClass = DayGridHelperRenderer_1.default;\r\nDayGrid.prototype.fillRendererClass = DayGridFillRenderer_1.default;\r\nStandardInteractionsMixin_1.default.mixInto(DayGrid);\r\nDayTableMixin_1.default.mixInto(DayGrid);\r\n\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Scroller_1 = __webpack_require__(41);\r\nvar View_1 = __webpack_require__(43);\r\nvar BasicViewDateProfileGenerator_1 = __webpack_require__(68);\r\nvar DayGrid_1 = __webpack_require__(66);\r\n/* An abstract class for the \"basic\" views, as well as month view. Renders one or more rows of day cells.\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// It is a manager for a DayGrid subcomponent, which does most of the heavy lifting.\r\n// It is responsible for managing width/height.\r\nvar BasicView = /** @class */ (function (_super) {\r\n tslib_1.__extends(BasicView, _super);\r\n function BasicView(calendar, viewSpec) {\r\n var _this = _super.call(this, calendar, viewSpec) || this;\r\n _this.dayGrid = _this.instantiateDayGrid();\r\n _this.dayGrid.isRigid = _this.hasRigidRows();\r\n if (_this.opt('weekNumbers')) {\r\n if (_this.opt('weekNumbersWithinDays')) {\r\n _this.dayGrid.cellWeekNumbersVisible = true;\r\n _this.dayGrid.colWeekNumbersVisible = false;\r\n }\r\n else {\r\n _this.dayGrid.cellWeekNumbersVisible = false;\r\n _this.dayGrid.colWeekNumbersVisible = true;\r\n }\r\n }\r\n _this.addChild(_this.dayGrid);\r\n _this.scroller = new Scroller_1.default({\r\n overflowX: 'hidden',\r\n overflowY: 'auto'\r\n });\r\n return _this;\r\n }\r\n // Generates the DayGrid object this view needs. Draws from this.dayGridClass\r\n BasicView.prototype.instantiateDayGrid = function () {\r\n // generate a subclass on the fly with BasicView-specific behavior\r\n // TODO: cache this subclass\r\n var subclass = makeDayGridSubclass(this.dayGridClass);\r\n return new subclass(this);\r\n };\r\n BasicView.prototype.executeDateRender = function (dateProfile) {\r\n this.dayGrid.breakOnWeeks = /year|month|week/.test(dateProfile.currentRangeUnit);\r\n _super.prototype.executeDateRender.call(this, dateProfile);\r\n };\r\n BasicView.prototype.renderSkeleton = function () {\r\n var dayGridContainerEl;\r\n var dayGridEl;\r\n this.el.addClass('fc-basic-view').html(this.renderSkeletonHtml());\r\n this.scroller.render();\r\n dayGridContainerEl = this.scroller.el.addClass('fc-day-grid-container');\r\n dayGridEl = $('
').appendTo(dayGridContainerEl);\r\n this.el.find('.fc-body > tr > td').append(dayGridContainerEl);\r\n this.dayGrid.headContainerEl = this.el.find('.fc-head-container');\r\n this.dayGrid.setElement(dayGridEl);\r\n };\r\n BasicView.prototype.unrenderSkeleton = function () {\r\n this.dayGrid.removeElement();\r\n this.scroller.destroy();\r\n };\r\n // Builds the HTML skeleton for the view.\r\n // The day-grid component will render inside of a container defined by this HTML.\r\n BasicView.prototype.renderSkeletonHtml = function () {\r\n var theme = this.calendar.theme;\r\n return '' +\r\n '' +\r\n (this.opt('columnHeader') ?\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' :\r\n '') +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '
 
';\r\n };\r\n // Generates an HTML attribute string for setting the width of the week number column, if it is known\r\n BasicView.prototype.weekNumberStyleAttr = function () {\r\n if (this.weekNumberWidth != null) {\r\n return 'style=\"width:' + this.weekNumberWidth + 'px\"';\r\n }\r\n return '';\r\n };\r\n // Determines whether each row should have a constant height\r\n BasicView.prototype.hasRigidRows = function () {\r\n var eventLimit = this.opt('eventLimit');\r\n return eventLimit && typeof eventLimit !== 'number';\r\n };\r\n /* Dimensions\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Refreshes the horizontal dimensions of the view\r\n BasicView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n var eventLimit = this.opt('eventLimit');\r\n var headRowEl = this.dayGrid.headContainerEl.find('.fc-row');\r\n var scrollerHeight;\r\n var scrollbarWidths;\r\n // hack to give the view some height prior to dayGrid's columns being rendered\r\n // TODO: separate setting height from scroller VS dayGrid.\r\n if (!this.dayGrid.rowEls) {\r\n if (!isAuto) {\r\n scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n this.scroller.setHeight(scrollerHeight);\r\n }\r\n return;\r\n }\r\n _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n if (this.dayGrid.colWeekNumbersVisible) {\r\n // Make sure all week number cells running down the side have the same width.\r\n // Record the width for cells created later.\r\n this.weekNumberWidth = util_1.matchCellWidths(this.el.find('.fc-week-number'));\r\n }\r\n // reset all heights to be natural\r\n this.scroller.clear();\r\n util_1.uncompensateScroll(headRowEl);\r\n this.dayGrid.removeSegPopover(); // kill the \"more\" popover if displayed\r\n // is the event limit a constant level number?\r\n if (eventLimit && typeof eventLimit === 'number') {\r\n this.dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after\r\n }\r\n // distribute the height to the rows\r\n // (totalHeight is a \"recommended\" value if isAuto)\r\n scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n this.setGridHeight(scrollerHeight, isAuto);\r\n // is the event limit dynamically calculated?\r\n if (eventLimit && typeof eventLimit !== 'number') {\r\n this.dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set\r\n }\r\n if (!isAuto) { // should we force dimensions of the scroll container?\r\n this.scroller.setHeight(scrollerHeight);\r\n scrollbarWidths = this.scroller.getScrollbarWidths();\r\n if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?\r\n util_1.compensateScroll(headRowEl, scrollbarWidths);\r\n // doing the scrollbar compensation might have created text overflow which created more height. redo\r\n scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n this.scroller.setHeight(scrollerHeight);\r\n }\r\n // guarantees the same scrollbar widths\r\n this.scroller.lockOverflow(scrollbarWidths);\r\n }\r\n };\r\n // given a desired total height of the view, returns what the height of the scroller should be\r\n BasicView.prototype.computeScrollerHeight = function (totalHeight) {\r\n return totalHeight -\r\n util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\r\n };\r\n // Sets the height of just the DayGrid component in this view\r\n BasicView.prototype.setGridHeight = function (height, isAuto) {\r\n if (isAuto) {\r\n util_1.undistributeHeight(this.dayGrid.rowEls); // let the rows be their natural height with no expanding\r\n }\r\n else {\r\n util_1.distributeHeight(this.dayGrid.rowEls, height, true); // true = compensate for height-hogging rows\r\n }\r\n };\r\n /* Scroll\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n BasicView.prototype.computeInitialDateScroll = function () {\r\n return { top: 0 };\r\n };\r\n BasicView.prototype.queryDateScroll = function () {\r\n return { top: this.scroller.getScrollTop() };\r\n };\r\n BasicView.prototype.applyDateScroll = function (scroll) {\r\n if (scroll.top !== undefined) {\r\n this.scroller.setScrollTop(scroll.top);\r\n }\r\n };\r\n return BasicView;\r\n}(View_1.default));\r\nexports.default = BasicView;\r\nBasicView.prototype.dateProfileGeneratorClass = BasicViewDateProfileGenerator_1.default;\r\nBasicView.prototype.dayGridClass = DayGrid_1.default;\r\n// customize the rendering behavior of BasicView's dayGrid\r\nfunction makeDayGridSubclass(SuperClass) {\r\n return /** @class */ (function (_super) {\r\n tslib_1.__extends(SubClass, _super);\r\n function SubClass() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.colWeekNumbersVisible = false; // display week numbers along the side?\r\n return _this;\r\n }\r\n // Generates the HTML that will go before the day-of week header cells\r\n SubClass.prototype.renderHeadIntroHtml = function () {\r\n var view = this.view;\r\n if (this.colWeekNumbersVisible) {\r\n return '' +\r\n '' +\r\n '' + // needed for matchCellWidths\r\n util_1.htmlEscape(this.opt('weekNumberTitle')) +\r\n '' +\r\n '';\r\n }\r\n return '';\r\n };\r\n // Generates the HTML that will go before content-skeleton cells that display the day/week numbers\r\n SubClass.prototype.renderNumberIntroHtml = function (row) {\r\n var view = this.view;\r\n var weekStart = this.getCellDate(row, 0);\r\n if (this.colWeekNumbersVisible) {\r\n return '' +\r\n '' +\r\n view.buildGotoAnchorHtml(// aside from link, important for matchCellWidths\r\n { date: weekStart, type: 'week', forceOff: this.colCnt === 1 }, weekStart.format('w') // inner HTML\r\n ) +\r\n '';\r\n }\r\n return '';\r\n };\r\n // Generates the HTML that goes before the day bg cells for each day-row\r\n SubClass.prototype.renderBgIntroHtml = function () {\r\n var view = this.view;\r\n if (this.colWeekNumbersVisible) {\r\n return '';\r\n }\r\n return '';\r\n };\r\n // Generates the HTML that goes before every other type of row generated by DayGrid.\r\n // Affects helper-skeleton and highlight-skeleton rows.\r\n SubClass.prototype.renderIntroHtml = function () {\r\n var view = this.view;\r\n if (this.colWeekNumbersVisible) {\r\n return '';\r\n }\r\n return '';\r\n };\r\n SubClass.prototype.getIsNumbersVisible = function () {\r\n return DayGrid_1.default.prototype.getIsNumbersVisible.apply(this, arguments) || this.colWeekNumbersVisible;\r\n };\r\n return SubClass;\r\n }(SuperClass));\r\n}\r\n\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar DateProfileGenerator_1 = __webpack_require__(55);\r\nvar BasicViewDateProfileGenerator = /** @class */ (function (_super) {\r\n tslib_1.__extends(BasicViewDateProfileGenerator, _super);\r\n function BasicViewDateProfileGenerator() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n // Computes the date range that will be rendered.\r\n BasicViewDateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {\r\n var renderUnzonedRange = _super.prototype.buildRenderRange.call(this, currentUnzonedRange, currentRangeUnit, isRangeAllDay); // an UnzonedRange\r\n var start = this.msToUtcMoment(renderUnzonedRange.startMs, isRangeAllDay);\r\n var end = this.msToUtcMoment(renderUnzonedRange.endMs, isRangeAllDay);\r\n // year and month views should be aligned with weeks. this is already done for week\r\n if (/^(year|month)$/.test(currentRangeUnit)) {\r\n start.startOf('week');\r\n // make end-of-week if not already\r\n if (end.weekday()) {\r\n end.add(1, 'week').startOf('week'); // exclusively move backwards\r\n }\r\n }\r\n return new UnzonedRange_1.default(start, end);\r\n };\r\n return BasicViewDateProfileGenerator;\r\n}(DateProfileGenerator_1.default));\r\nexports.default = BasicViewDateProfileGenerator;\r\n\n\n/***/ }),\n/* 69 */,\n/* 70 */,\n/* 71 */,\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 */,\n/* 135 */,\n/* 136 */,\n/* 137 */,\n/* 138 */,\n/* 139 */,\n/* 140 */,\n/* 141 */,\n/* 142 */,\n/* 143 */,\n/* 144 */,\n/* 145 */,\n/* 146 */,\n/* 147 */,\n/* 148 */,\n/* 149 */,\n/* 150 */,\n/* 151 */,\n/* 152 */,\n/* 153 */,\n/* 154 */,\n/* 155 */,\n/* 156 */,\n/* 157 */,\n/* 158 */,\n/* 159 */,\n/* 160 */,\n/* 161 */,\n/* 162 */,\n/* 163 */,\n/* 164 */,\n/* 165 */,\n/* 166 */,\n/* 167 */,\n/* 168 */,\n/* 169 */,\n/* 170 */,\n/* 171 */,\n/* 172 */,\n/* 173 */,\n/* 174 */,\n/* 175 */,\n/* 176 */,\n/* 177 */,\n/* 178 */,\n/* 179 */,\n/* 180 */,\n/* 181 */,\n/* 182 */,\n/* 183 */,\n/* 184 */,\n/* 185 */,\n/* 186 */,\n/* 187 */,\n/* 188 */,\n/* 189 */,\n/* 190 */,\n/* 191 */,\n/* 192 */,\n/* 193 */,\n/* 194 */,\n/* 195 */,\n/* 196 */,\n/* 197 */,\n/* 198 */,\n/* 199 */,\n/* 200 */,\n/* 201 */,\n/* 202 */,\n/* 203 */,\n/* 204 */,\n/* 205 */,\n/* 206 */,\n/* 207 */,\n/* 208 */,\n/* 209 */,\n/* 210 */,\n/* 211 */,\n/* 212 */,\n/* 213 */,\n/* 214 */,\n/* 215 */,\n/* 216 */,\n/* 217 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar util_1 = __webpack_require__(19);\r\nvar Constraints = /** @class */ (function () {\r\n function Constraints(eventManager, _calendar) {\r\n this.eventManager = eventManager;\r\n this._calendar = _calendar;\r\n }\r\n Constraints.prototype.opt = function (name) {\r\n return this._calendar.opt(name);\r\n };\r\n /*\r\n determines if eventInstanceGroup is allowed,\r\n in relation to other EVENTS and business hours.\r\n */\r\n Constraints.prototype.isEventInstanceGroupAllowed = function (eventInstanceGroup) {\r\n var eventDef = eventInstanceGroup.getEventDef();\r\n var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\r\n var i;\r\n var peerEventInstances = this.getPeerEventInstances(eventDef);\r\n var peerEventRanges = peerEventInstances.map(util_1.eventInstanceToEventRange);\r\n var peerEventFootprints = this.eventRangesToEventFootprints(peerEventRanges);\r\n var constraintVal = eventDef.getConstraint();\r\n var overlapVal = eventDef.getOverlap();\r\n var eventAllowFunc = this.opt('eventAllow');\r\n for (i = 0; i < eventFootprints.length; i++) {\r\n if (!this.isFootprintAllowed(eventFootprints[i].componentFootprint, peerEventFootprints, constraintVal, overlapVal, eventFootprints[i].eventInstance)) {\r\n return false;\r\n }\r\n }\r\n if (eventAllowFunc) {\r\n for (i = 0; i < eventFootprints.length; i++) {\r\n if (eventAllowFunc(eventFootprints[i].componentFootprint.toLegacy(this._calendar), eventFootprints[i].getEventLegacy()) === false) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n };\r\n Constraints.prototype.getPeerEventInstances = function (eventDef) {\r\n return this.eventManager.getEventInstancesWithoutId(eventDef.id);\r\n };\r\n Constraints.prototype.isSelectionFootprintAllowed = function (componentFootprint) {\r\n var peerEventInstances = this.eventManager.getEventInstances();\r\n var peerEventRanges = peerEventInstances.map(util_1.eventInstanceToEventRange);\r\n var peerEventFootprints = this.eventRangesToEventFootprints(peerEventRanges);\r\n var selectAllowFunc;\r\n if (this.isFootprintAllowed(componentFootprint, peerEventFootprints, this.opt('selectConstraint'), this.opt('selectOverlap'))) {\r\n selectAllowFunc = this.opt('selectAllow');\r\n if (selectAllowFunc) {\r\n return selectAllowFunc(componentFootprint.toLegacy(this._calendar)) !== false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n Constraints.prototype.isFootprintAllowed = function (componentFootprint, peerEventFootprints, constraintVal, overlapVal, subjectEventInstance // optional\r\n ) {\r\n var constraintFootprints; // ComponentFootprint[]\r\n var overlapEventFootprints; // EventFootprint[]\r\n if (constraintVal != null) {\r\n constraintFootprints = this.constraintValToFootprints(constraintVal, componentFootprint.isAllDay);\r\n if (!this.isFootprintWithinConstraints(componentFootprint, constraintFootprints)) {\r\n return false;\r\n }\r\n }\r\n overlapEventFootprints = this.collectOverlapEventFootprints(peerEventFootprints, componentFootprint);\r\n if (overlapVal === false) {\r\n if (overlapEventFootprints.length) {\r\n return false;\r\n }\r\n }\r\n else if (typeof overlapVal === 'function') {\r\n if (!isOverlapsAllowedByFunc(overlapEventFootprints, overlapVal, subjectEventInstance)) {\r\n return false;\r\n }\r\n }\r\n if (subjectEventInstance) {\r\n if (!isOverlapEventInstancesAllowed(overlapEventFootprints, subjectEventInstance)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n // Constraint\r\n // ------------------------------------------------------------------------------------------------\r\n Constraints.prototype.isFootprintWithinConstraints = function (componentFootprint, constraintFootprints) {\r\n var i;\r\n for (i = 0; i < constraintFootprints.length; i++) {\r\n if (this.footprintContainsFootprint(constraintFootprints[i], componentFootprint)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n Constraints.prototype.constraintValToFootprints = function (constraintVal, isAllDay) {\r\n var eventInstances;\r\n if (constraintVal === 'businessHours') {\r\n return this.buildCurrentBusinessFootprints(isAllDay);\r\n }\r\n else if (typeof constraintVal === 'object') {\r\n eventInstances = this.parseEventDefToInstances(constraintVal); // handles recurring events\r\n if (!eventInstances) { // invalid input. fallback to parsing footprint directly\r\n return this.parseFootprints(constraintVal);\r\n }\r\n else {\r\n return this.eventInstancesToFootprints(eventInstances);\r\n }\r\n }\r\n else if (constraintVal != null) { // an ID\r\n eventInstances = this.eventManager.getEventInstancesWithId(constraintVal);\r\n return this.eventInstancesToFootprints(eventInstances);\r\n }\r\n };\r\n // returns ComponentFootprint[]\r\n // uses current view's range\r\n Constraints.prototype.buildCurrentBusinessFootprints = function (isAllDay) {\r\n var view = this._calendar.view;\r\n var businessHourGenerator = view.get('businessHourGenerator');\r\n var unzonedRange = view.dateProfile.activeUnzonedRange;\r\n var eventInstanceGroup = businessHourGenerator.buildEventInstanceGroup(isAllDay, unzonedRange);\r\n if (eventInstanceGroup) {\r\n return this.eventInstancesToFootprints(eventInstanceGroup.eventInstances);\r\n }\r\n else {\r\n return [];\r\n }\r\n };\r\n // conversion util\r\n Constraints.prototype.eventInstancesToFootprints = function (eventInstances) {\r\n var eventRanges = eventInstances.map(util_1.eventInstanceToEventRange);\r\n var eventFootprints = this.eventRangesToEventFootprints(eventRanges);\r\n return eventFootprints.map(util_1.eventFootprintToComponentFootprint);\r\n };\r\n // Overlap\r\n // ------------------------------------------------------------------------------------------------\r\n Constraints.prototype.collectOverlapEventFootprints = function (peerEventFootprints, targetFootprint) {\r\n var overlapEventFootprints = [];\r\n var i;\r\n for (i = 0; i < peerEventFootprints.length; i++) {\r\n if (this.footprintsIntersect(targetFootprint, peerEventFootprints[i].componentFootprint)) {\r\n overlapEventFootprints.push(peerEventFootprints[i]);\r\n }\r\n }\r\n return overlapEventFootprints;\r\n };\r\n // Conversion: eventDefs -> eventInstances -> eventRanges -> eventFootprints -> componentFootprints\r\n // ------------------------------------------------------------------------------------------------\r\n // NOTE: this might seem like repetitive code with the Grid class, however, this code is related to\r\n // constraints whereas the Grid code is related to rendering. Each approach might want to convert\r\n // eventRanges -> eventFootprints in a different way. Regardless, there are opportunities to make\r\n // this more DRY.\r\n /*\r\n Returns false on invalid input.\r\n */\r\n Constraints.prototype.parseEventDefToInstances = function (eventInput) {\r\n var eventManager = this.eventManager;\r\n var eventDef = EventDefParser_1.default.parse(eventInput, new EventSource_1.default(this._calendar));\r\n if (!eventDef) { // invalid\r\n return false;\r\n }\r\n return eventDef.buildInstances(eventManager.currentPeriod.unzonedRange);\r\n };\r\n Constraints.prototype.eventRangesToEventFootprints = function (eventRanges) {\r\n var i;\r\n var eventFootprints = [];\r\n for (i = 0; i < eventRanges.length; i++) {\r\n eventFootprints.push.apply(// footprints\r\n eventFootprints, this.eventRangeToEventFootprints(eventRanges[i]));\r\n }\r\n return eventFootprints;\r\n };\r\n Constraints.prototype.eventRangeToEventFootprints = function (eventRange) {\r\n return [util_1.eventRangeToEventFootprint(eventRange)];\r\n };\r\n /*\r\n Parses footprints directly.\r\n Very similar to EventDateProfile::parse :(\r\n */\r\n Constraints.prototype.parseFootprints = function (rawInput) {\r\n var start;\r\n var end;\r\n if (rawInput.start) {\r\n start = this._calendar.moment(rawInput.start);\r\n if (!start.isValid()) {\r\n start = null;\r\n }\r\n }\r\n if (rawInput.end) {\r\n end = this._calendar.moment(rawInput.end);\r\n if (!end.isValid()) {\r\n end = null;\r\n }\r\n }\r\n return [\r\n new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), (start && !start.hasTime()) || (end && !end.hasTime()) // isAllDay\r\n )\r\n ];\r\n };\r\n // Footprint Utils\r\n // ----------------------------------------------------------------------------------------\r\n Constraints.prototype.footprintContainsFootprint = function (outerFootprint, innerFootprint) {\r\n return outerFootprint.unzonedRange.containsRange(innerFootprint.unzonedRange);\r\n };\r\n Constraints.prototype.footprintsIntersect = function (footprint0, footprint1) {\r\n return footprint0.unzonedRange.intersectsWith(footprint1.unzonedRange);\r\n };\r\n return Constraints;\r\n}());\r\nexports.default = Constraints;\r\n// optional subjectEventInstance\r\nfunction isOverlapsAllowedByFunc(overlapEventFootprints, overlapFunc, subjectEventInstance) {\r\n var i;\r\n for (i = 0; i < overlapEventFootprints.length; i++) {\r\n if (!overlapFunc(overlapEventFootprints[i].eventInstance.toLegacy(), subjectEventInstance ? subjectEventInstance.toLegacy() : null)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction isOverlapEventInstancesAllowed(overlapEventFootprints, subjectEventInstance) {\r\n var subjectLegacyInstance = subjectEventInstance.toLegacy();\r\n var i;\r\n var overlapEventInstance;\r\n var overlapEventDef;\r\n var overlapVal;\r\n for (i = 0; i < overlapEventFootprints.length; i++) {\r\n overlapEventInstance = overlapEventFootprints[i].eventInstance;\r\n overlapEventDef = overlapEventInstance.def;\r\n // don't need to pass in calendar, because don't want to consider global eventOverlap property,\r\n // because we already considered that earlier in the process.\r\n overlapVal = overlapEventDef.getOverlap();\r\n if (overlapVal === false) {\r\n return false;\r\n }\r\n else if (typeof overlapVal === 'function') {\r\n if (!overlapVal(overlapEventInstance.toLegacy(), subjectLegacyInstance)) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n}\r\n\n\n/***/ }),\n/* 218 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(19);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar RecurringEventDef_1 = __webpack_require__(54);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar BUSINESS_HOUR_EVENT_DEFAULTS = {\r\n start: '09:00',\r\n end: '17:00',\r\n dow: [1, 2, 3, 4, 5],\r\n rendering: 'inverse-background'\r\n // classNames are defined in businessHoursSegClasses\r\n};\r\nvar BusinessHourGenerator = /** @class */ (function () {\r\n function BusinessHourGenerator(rawComplexDef, calendar) {\r\n this.rawComplexDef = rawComplexDef;\r\n this.calendar = calendar;\r\n }\r\n BusinessHourGenerator.prototype.buildEventInstanceGroup = function (isAllDay, unzonedRange) {\r\n var eventDefs = this.buildEventDefs(isAllDay);\r\n var eventInstanceGroup;\r\n if (eventDefs.length) {\r\n eventInstanceGroup = new EventInstanceGroup_1.default(util_1.eventDefsToEventInstances(eventDefs, unzonedRange));\r\n // so that inverse-background rendering can happen even when no eventRanges in view\r\n eventInstanceGroup.explicitEventDef = eventDefs[0];\r\n return eventInstanceGroup;\r\n }\r\n };\r\n BusinessHourGenerator.prototype.buildEventDefs = function (isAllDay) {\r\n var rawComplexDef = this.rawComplexDef;\r\n var rawDefs = [];\r\n var requireDow = false;\r\n var i;\r\n var defs = [];\r\n if (rawComplexDef === true) {\r\n rawDefs = [{}]; // will get BUSINESS_HOUR_EVENT_DEFAULTS verbatim\r\n }\r\n else if ($.isPlainObject(rawComplexDef)) {\r\n rawDefs = [rawComplexDef];\r\n }\r\n else if ($.isArray(rawComplexDef)) {\r\n rawDefs = rawComplexDef;\r\n requireDow = true; // every sub-definition NEEDS a day-of-week\r\n }\r\n for (i = 0; i < rawDefs.length; i++) {\r\n if (!requireDow || rawDefs[i].dow) {\r\n defs.push(this.buildEventDef(isAllDay, rawDefs[i]));\r\n }\r\n }\r\n return defs;\r\n };\r\n BusinessHourGenerator.prototype.buildEventDef = function (isAllDay, rawDef) {\r\n var fullRawDef = $.extend({}, BUSINESS_HOUR_EVENT_DEFAULTS, rawDef);\r\n if (isAllDay) {\r\n fullRawDef.start = null;\r\n fullRawDef.end = null;\r\n }\r\n return RecurringEventDef_1.default.parse(fullRawDef, new EventSource_1.default(this.calendar) // dummy source\r\n );\r\n };\r\n return BusinessHourGenerator;\r\n}());\r\nexports.default = BusinessHourGenerator;\r\n\n\n/***/ }),\n/* 219 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar EventPeriod = /** @class */ (function () {\r\n function EventPeriod(start, end, timezone) {\r\n this.pendingCnt = 0;\r\n this.freezeDepth = 0;\r\n this.stuntedReleaseCnt = 0;\r\n this.releaseCnt = 0;\r\n this.start = start;\r\n this.end = end;\r\n this.timezone = timezone;\r\n this.unzonedRange = new UnzonedRange_1.default(start.clone().stripZone(), end.clone().stripZone());\r\n this.requestsByUid = {};\r\n this.eventDefsByUid = {};\r\n this.eventDefsById = {};\r\n this.eventInstanceGroupsById = {};\r\n }\r\n EventPeriod.prototype.isWithinRange = function (start, end) {\r\n // TODO: use a range util function?\r\n return !start.isBefore(this.start) && !end.isAfter(this.end);\r\n };\r\n // Requesting and Purging\r\n // -----------------------------------------------------------------------------------------------------------------\r\n EventPeriod.prototype.requestSources = function (sources) {\r\n this.freeze();\r\n for (var i = 0; i < sources.length; i++) {\r\n this.requestSource(sources[i]);\r\n }\r\n this.thaw();\r\n };\r\n EventPeriod.prototype.requestSource = function (source) {\r\n var _this = this;\r\n var request = { source: source, status: 'pending', eventDefs: null };\r\n this.requestsByUid[source.uid] = request;\r\n this.pendingCnt += 1;\r\n source.fetch(this.start, this.end, this.timezone).then(function (eventDefs) {\r\n if (request.status !== 'cancelled') {\r\n request.status = 'completed';\r\n request.eventDefs = eventDefs;\r\n _this.addEventDefs(eventDefs);\r\n _this.pendingCnt--;\r\n _this.tryRelease();\r\n }\r\n }, function () {\r\n if (request.status !== 'cancelled') {\r\n request.status = 'failed';\r\n _this.pendingCnt--;\r\n _this.tryRelease();\r\n }\r\n });\r\n };\r\n EventPeriod.prototype.purgeSource = function (source) {\r\n var request = this.requestsByUid[source.uid];\r\n if (request) {\r\n delete this.requestsByUid[source.uid];\r\n if (request.status === 'pending') {\r\n request.status = 'cancelled';\r\n this.pendingCnt--;\r\n this.tryRelease();\r\n }\r\n else if (request.status === 'completed') {\r\n request.eventDefs.forEach(this.removeEventDef.bind(this));\r\n }\r\n }\r\n };\r\n EventPeriod.prototype.purgeAllSources = function () {\r\n var requestsByUid = this.requestsByUid;\r\n var uid;\r\n var request;\r\n var completedCnt = 0;\r\n for (uid in requestsByUid) {\r\n request = requestsByUid[uid];\r\n if (request.status === 'pending') {\r\n request.status = 'cancelled';\r\n }\r\n else if (request.status === 'completed') {\r\n completedCnt++;\r\n }\r\n }\r\n this.requestsByUid = {};\r\n this.pendingCnt = 0;\r\n if (completedCnt) {\r\n this.removeAllEventDefs(); // might release\r\n }\r\n };\r\n // Event Definitions\r\n // -----------------------------------------------------------------------------------------------------------------\r\n EventPeriod.prototype.getEventDefByUid = function (eventDefUid) {\r\n return this.eventDefsByUid[eventDefUid];\r\n };\r\n EventPeriod.prototype.getEventDefsById = function (eventDefId) {\r\n var a = this.eventDefsById[eventDefId];\r\n if (a) {\r\n return a.slice(); // clone\r\n }\r\n return [];\r\n };\r\n EventPeriod.prototype.addEventDefs = function (eventDefs) {\r\n for (var i = 0; i < eventDefs.length; i++) {\r\n this.addEventDef(eventDefs[i]);\r\n }\r\n };\r\n EventPeriod.prototype.addEventDef = function (eventDef) {\r\n var eventDefsById = this.eventDefsById;\r\n var eventDefId = eventDef.id;\r\n var eventDefs = eventDefsById[eventDefId] || (eventDefsById[eventDefId] = []);\r\n var eventInstances = eventDef.buildInstances(this.unzonedRange);\r\n var i;\r\n eventDefs.push(eventDef);\r\n this.eventDefsByUid[eventDef.uid] = eventDef;\r\n for (i = 0; i < eventInstances.length; i++) {\r\n this.addEventInstance(eventInstances[i], eventDefId);\r\n }\r\n };\r\n EventPeriod.prototype.removeEventDefsById = function (eventDefId) {\r\n var _this = this;\r\n this.getEventDefsById(eventDefId).forEach(function (eventDef) {\r\n _this.removeEventDef(eventDef);\r\n });\r\n };\r\n EventPeriod.prototype.removeAllEventDefs = function () {\r\n var isEmpty = $.isEmptyObject(this.eventDefsByUid);\r\n this.eventDefsByUid = {};\r\n this.eventDefsById = {};\r\n this.eventInstanceGroupsById = {};\r\n if (!isEmpty) {\r\n this.tryRelease();\r\n }\r\n };\r\n EventPeriod.prototype.removeEventDef = function (eventDef) {\r\n var eventDefsById = this.eventDefsById;\r\n var eventDefs = eventDefsById[eventDef.id];\r\n delete this.eventDefsByUid[eventDef.uid];\r\n if (eventDefs) {\r\n util_1.removeExact(eventDefs, eventDef);\r\n if (!eventDefs.length) {\r\n delete eventDefsById[eventDef.id];\r\n }\r\n this.removeEventInstancesForDef(eventDef);\r\n }\r\n };\r\n // Event Instances\r\n // -----------------------------------------------------------------------------------------------------------------\r\n EventPeriod.prototype.getEventInstances = function () {\r\n var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n var eventInstances = [];\r\n var id;\r\n for (id in eventInstanceGroupsById) {\r\n eventInstances.push.apply(eventInstances, // append\r\n eventInstanceGroupsById[id].eventInstances);\r\n }\r\n return eventInstances;\r\n };\r\n EventPeriod.prototype.getEventInstancesWithId = function (eventDefId) {\r\n var eventInstanceGroup = this.eventInstanceGroupsById[eventDefId];\r\n if (eventInstanceGroup) {\r\n return eventInstanceGroup.eventInstances.slice(); // clone\r\n }\r\n return [];\r\n };\r\n EventPeriod.prototype.getEventInstancesWithoutId = function (eventDefId) {\r\n var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n var matchingInstances = [];\r\n var id;\r\n for (id in eventInstanceGroupsById) {\r\n if (id !== eventDefId) {\r\n matchingInstances.push.apply(matchingInstances, // append\r\n eventInstanceGroupsById[id].eventInstances);\r\n }\r\n }\r\n return matchingInstances;\r\n };\r\n EventPeriod.prototype.addEventInstance = function (eventInstance, eventDefId) {\r\n var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n var eventInstanceGroup = eventInstanceGroupsById[eventDefId] ||\r\n (eventInstanceGroupsById[eventDefId] = new EventInstanceGroup_1.default());\r\n eventInstanceGroup.eventInstances.push(eventInstance);\r\n this.tryRelease();\r\n };\r\n EventPeriod.prototype.removeEventInstancesForDef = function (eventDef) {\r\n var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n var eventInstanceGroup = eventInstanceGroupsById[eventDef.id];\r\n var removeCnt;\r\n if (eventInstanceGroup) {\r\n removeCnt = util_1.removeMatching(eventInstanceGroup.eventInstances, function (currentEventInstance) {\r\n return currentEventInstance.def === eventDef;\r\n });\r\n if (!eventInstanceGroup.eventInstances.length) {\r\n delete eventInstanceGroupsById[eventDef.id];\r\n }\r\n if (removeCnt) {\r\n this.tryRelease();\r\n }\r\n }\r\n };\r\n // Releasing and Freezing\r\n // -----------------------------------------------------------------------------------------------------------------\r\n EventPeriod.prototype.tryRelease = function () {\r\n if (!this.pendingCnt) {\r\n if (!this.freezeDepth) {\r\n this.release();\r\n }\r\n else {\r\n this.stuntedReleaseCnt++;\r\n }\r\n }\r\n };\r\n EventPeriod.prototype.release = function () {\r\n this.releaseCnt++;\r\n this.trigger('release', this.eventInstanceGroupsById);\r\n };\r\n EventPeriod.prototype.whenReleased = function () {\r\n var _this = this;\r\n if (this.releaseCnt) {\r\n return Promise_1.default.resolve(this.eventInstanceGroupsById);\r\n }\r\n else {\r\n return Promise_1.default.construct(function (onResolve) {\r\n _this.one('release', onResolve);\r\n });\r\n }\r\n };\r\n EventPeriod.prototype.freeze = function () {\r\n if (!(this.freezeDepth++)) {\r\n this.stuntedReleaseCnt = 0;\r\n }\r\n };\r\n EventPeriod.prototype.thaw = function () {\r\n if (!(--this.freezeDepth) && this.stuntedReleaseCnt && !this.pendingCnt) {\r\n this.release();\r\n }\r\n };\r\n return EventPeriod;\r\n}());\r\nexports.default = EventPeriod;\r\nEmitterMixin_1.default.mixInto(EventPeriod);\r\n\n\n/***/ }),\n/* 220 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventPeriod_1 = __webpack_require__(219);\r\nvar ArrayEventSource_1 = __webpack_require__(56);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar EventManager = /** @class */ (function () {\r\n function EventManager(calendar) {\r\n this.calendar = calendar;\r\n this.stickySource = new ArrayEventSource_1.default(calendar);\r\n this.otherSources = [];\r\n }\r\n EventManager.prototype.requestEvents = function (start, end, timezone, force) {\r\n if (force ||\r\n !this.currentPeriod ||\r\n !this.currentPeriod.isWithinRange(start, end) ||\r\n timezone !== this.currentPeriod.timezone) {\r\n this.setPeriod(// will change this.currentPeriod\r\n new EventPeriod_1.default(start, end, timezone));\r\n }\r\n return this.currentPeriod.whenReleased();\r\n };\r\n // Source Adding/Removing\r\n // -----------------------------------------------------------------------------------------------------------------\r\n EventManager.prototype.addSource = function (eventSource) {\r\n this.otherSources.push(eventSource);\r\n if (this.currentPeriod) {\r\n this.currentPeriod.requestSource(eventSource); // might release\r\n }\r\n };\r\n EventManager.prototype.removeSource = function (doomedSource) {\r\n util_1.removeExact(this.otherSources, doomedSource);\r\n if (this.currentPeriod) {\r\n this.currentPeriod.purgeSource(doomedSource); // might release\r\n }\r\n };\r\n EventManager.prototype.removeAllSources = function () {\r\n this.otherSources = [];\r\n if (this.currentPeriod) {\r\n this.currentPeriod.purgeAllSources(); // might release\r\n }\r\n };\r\n // Source Refetching\r\n // -----------------------------------------------------------------------------------------------------------------\r\n EventManager.prototype.refetchSource = function (eventSource) {\r\n var currentPeriod = this.currentPeriod;\r\n if (currentPeriod) {\r\n currentPeriod.freeze();\r\n currentPeriod.purgeSource(eventSource);\r\n currentPeriod.requestSource(eventSource);\r\n currentPeriod.thaw();\r\n }\r\n };\r\n EventManager.prototype.refetchAllSources = function () {\r\n var currentPeriod = this.currentPeriod;\r\n if (currentPeriod) {\r\n currentPeriod.freeze();\r\n currentPeriod.purgeAllSources();\r\n currentPeriod.requestSources(this.getSources());\r\n currentPeriod.thaw();\r\n }\r\n };\r\n // Source Querying\r\n // -----------------------------------------------------------------------------------------------------------------\r\n EventManager.prototype.getSources = function () {\r\n return [this.stickySource].concat(this.otherSources);\r\n };\r\n // like querySources, but accepts multple match criteria (like multiple IDs)\r\n EventManager.prototype.multiQuerySources = function (matchInputs) {\r\n // coerce into an array\r\n if (!matchInputs) {\r\n matchInputs = [];\r\n }\r\n else if (!$.isArray(matchInputs)) {\r\n matchInputs = [matchInputs];\r\n }\r\n var matchingSources = [];\r\n var i;\r\n // resolve raw inputs to real event source objects\r\n for (i = 0; i < matchInputs.length; i++) {\r\n matchingSources.push.apply(// append\r\n matchingSources, this.querySources(matchInputs[i]));\r\n }\r\n return matchingSources;\r\n };\r\n // matchInput can either by a real event source object, an ID, or the function/URL for the source.\r\n // returns an array of matching source objects.\r\n EventManager.prototype.querySources = function (matchInput) {\r\n var sources = this.otherSources;\r\n var i;\r\n var source;\r\n // given a proper event source object\r\n for (i = 0; i < sources.length; i++) {\r\n source = sources[i];\r\n if (source === matchInput) {\r\n return [source];\r\n }\r\n }\r\n // an ID match\r\n source = this.getSourceById(EventSource_1.default.normalizeId(matchInput));\r\n if (source) {\r\n return [source];\r\n }\r\n // parse as an event source\r\n matchInput = EventSourceParser_1.default.parse(matchInput, this.calendar);\r\n if (matchInput) {\r\n return $.grep(sources, function (source) {\r\n return isSourcesEquivalent(matchInput, source);\r\n });\r\n }\r\n };\r\n /*\r\n ID assumed to already be normalized\r\n */\r\n EventManager.prototype.getSourceById = function (id) {\r\n return $.grep(this.otherSources, function (source) {\r\n return source.id && source.id === id;\r\n })[0];\r\n };\r\n // Event-Period\r\n // -----------------------------------------------------------------------------------------------------------------\r\n EventManager.prototype.setPeriod = function (eventPeriod) {\r\n if (this.currentPeriod) {\r\n this.unbindPeriod(this.currentPeriod);\r\n this.currentPeriod = null;\r\n }\r\n this.currentPeriod = eventPeriod;\r\n this.bindPeriod(eventPeriod);\r\n eventPeriod.requestSources(this.getSources());\r\n };\r\n EventManager.prototype.bindPeriod = function (eventPeriod) {\r\n this.listenTo(eventPeriod, 'release', function (eventsPayload) {\r\n this.trigger('release', eventsPayload);\r\n });\r\n };\r\n EventManager.prototype.unbindPeriod = function (eventPeriod) {\r\n this.stopListeningTo(eventPeriod);\r\n };\r\n // Event Getting/Adding/Removing\r\n // -----------------------------------------------------------------------------------------------------------------\r\n EventManager.prototype.getEventDefByUid = function (uid) {\r\n if (this.currentPeriod) {\r\n return this.currentPeriod.getEventDefByUid(uid);\r\n }\r\n };\r\n EventManager.prototype.addEventDef = function (eventDef, isSticky) {\r\n if (isSticky) {\r\n this.stickySource.addEventDef(eventDef);\r\n }\r\n if (this.currentPeriod) {\r\n this.currentPeriod.addEventDef(eventDef); // might release\r\n }\r\n };\r\n EventManager.prototype.removeEventDefsById = function (eventId) {\r\n this.getSources().forEach(function (eventSource) {\r\n eventSource.removeEventDefsById(eventId);\r\n });\r\n if (this.currentPeriod) {\r\n this.currentPeriod.removeEventDefsById(eventId); // might release\r\n }\r\n };\r\n EventManager.prototype.removeAllEventDefs = function () {\r\n this.getSources().forEach(function (eventSource) {\r\n eventSource.removeAllEventDefs();\r\n });\r\n if (this.currentPeriod) {\r\n this.currentPeriod.removeAllEventDefs();\r\n }\r\n };\r\n // Event Mutating\r\n // -----------------------------------------------------------------------------------------------------------------\r\n /*\r\n Returns an undo function.\r\n */\r\n EventManager.prototype.mutateEventsWithId = function (eventDefId, eventDefMutation) {\r\n var currentPeriod = this.currentPeriod;\r\n var eventDefs;\r\n var undoFuncs = [];\r\n if (currentPeriod) {\r\n currentPeriod.freeze();\r\n eventDefs = currentPeriod.getEventDefsById(eventDefId);\r\n eventDefs.forEach(function (eventDef) {\r\n // add/remove esp because id might change\r\n currentPeriod.removeEventDef(eventDef);\r\n undoFuncs.push(eventDefMutation.mutateSingle(eventDef));\r\n currentPeriod.addEventDef(eventDef);\r\n });\r\n currentPeriod.thaw();\r\n return function () {\r\n currentPeriod.freeze();\r\n for (var i = 0; i < eventDefs.length; i++) {\r\n currentPeriod.removeEventDef(eventDefs[i]);\r\n undoFuncs[i]();\r\n currentPeriod.addEventDef(eventDefs[i]);\r\n }\r\n currentPeriod.thaw();\r\n };\r\n }\r\n return function () { };\r\n };\r\n /*\r\n copies and then mutates\r\n */\r\n EventManager.prototype.buildMutatedEventInstanceGroup = function (eventDefId, eventDefMutation) {\r\n var eventDefs = this.getEventDefsById(eventDefId);\r\n var i;\r\n var defCopy;\r\n var allInstances = [];\r\n for (i = 0; i < eventDefs.length; i++) {\r\n defCopy = eventDefs[i].clone();\r\n if (defCopy instanceof SingleEventDef_1.default) {\r\n eventDefMutation.mutateSingle(defCopy);\r\n allInstances.push.apply(allInstances, // append\r\n defCopy.buildInstances());\r\n }\r\n }\r\n return new EventInstanceGroup_1.default(allInstances);\r\n };\r\n // Freezing\r\n // -----------------------------------------------------------------------------------------------------------------\r\n EventManager.prototype.freeze = function () {\r\n if (this.currentPeriod) {\r\n this.currentPeriod.freeze();\r\n }\r\n };\r\n EventManager.prototype.thaw = function () {\r\n if (this.currentPeriod) {\r\n this.currentPeriod.thaw();\r\n }\r\n };\r\n // methods that simply forward to EventPeriod\r\n EventManager.prototype.getEventDefsById = function (eventDefId) {\r\n return this.currentPeriod.getEventDefsById(eventDefId);\r\n };\r\n EventManager.prototype.getEventInstances = function () {\r\n return this.currentPeriod.getEventInstances();\r\n };\r\n EventManager.prototype.getEventInstancesWithId = function (eventDefId) {\r\n return this.currentPeriod.getEventInstancesWithId(eventDefId);\r\n };\r\n EventManager.prototype.getEventInstancesWithoutId = function (eventDefId) {\r\n return this.currentPeriod.getEventInstancesWithoutId(eventDefId);\r\n };\r\n return EventManager;\r\n}());\r\nexports.default = EventManager;\r\nEmitterMixin_1.default.mixInto(EventManager);\r\nListenerMixin_1.default.mixInto(EventManager);\r\nfunction isSourcesEquivalent(source0, source1) {\r\n return source0.getPrimitive() === source1.getPrimitive();\r\n}\r\n\n\n/***/ }),\n/* 221 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar StandardTheme = /** @class */ (function (_super) {\r\n tslib_1.__extends(StandardTheme, _super);\r\n function StandardTheme() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n return StandardTheme;\r\n}(Theme_1.default));\r\nexports.default = StandardTheme;\r\nStandardTheme.prototype.classes = {\r\n widget: 'fc-unthemed',\r\n widgetHeader: 'fc-widget-header',\r\n widgetContent: 'fc-widget-content',\r\n buttonGroup: 'fc-button-group',\r\n button: 'fc-button',\r\n cornerLeft: 'fc-corner-left',\r\n cornerRight: 'fc-corner-right',\r\n stateDefault: 'fc-state-default',\r\n stateActive: 'fc-state-active',\r\n stateDisabled: 'fc-state-disabled',\r\n stateHover: 'fc-state-hover',\r\n stateDown: 'fc-state-down',\r\n popoverHeader: 'fc-widget-header',\r\n popoverContent: 'fc-widget-content',\r\n // day grid\r\n headerRow: 'fc-widget-header',\r\n dayRow: 'fc-widget-content',\r\n // list view\r\n listView: 'fc-widget-content'\r\n};\r\nStandardTheme.prototype.baseIconClass = 'fc-icon';\r\nStandardTheme.prototype.iconClasses = {\r\n close: 'fc-icon-x',\r\n prev: 'fc-icon-left-single-arrow',\r\n next: 'fc-icon-right-single-arrow',\r\n prevYear: 'fc-icon-left-double-arrow',\r\n nextYear: 'fc-icon-right-double-arrow'\r\n};\r\nStandardTheme.prototype.iconOverrideOption = 'buttonIcons';\r\nStandardTheme.prototype.iconOverrideCustomButtonOption = 'icon';\r\nStandardTheme.prototype.iconOverridePrefix = 'fc-icon-';\r\n\n\n/***/ }),\n/* 222 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar JqueryUiTheme = /** @class */ (function (_super) {\r\n tslib_1.__extends(JqueryUiTheme, _super);\r\n function JqueryUiTheme() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n return JqueryUiTheme;\r\n}(Theme_1.default));\r\nexports.default = JqueryUiTheme;\r\nJqueryUiTheme.prototype.classes = {\r\n widget: 'ui-widget',\r\n widgetHeader: 'ui-widget-header',\r\n widgetContent: 'ui-widget-content',\r\n buttonGroup: 'fc-button-group',\r\n button: 'ui-button',\r\n cornerLeft: 'ui-corner-left',\r\n cornerRight: 'ui-corner-right',\r\n stateDefault: 'ui-state-default',\r\n stateActive: 'ui-state-active',\r\n stateDisabled: 'ui-state-disabled',\r\n stateHover: 'ui-state-hover',\r\n stateDown: 'ui-state-down',\r\n today: 'ui-state-highlight',\r\n popoverHeader: 'ui-widget-header',\r\n popoverContent: 'ui-widget-content',\r\n // day grid\r\n headerRow: 'ui-widget-header',\r\n dayRow: 'ui-widget-content',\r\n // list view\r\n listView: 'ui-widget-content'\r\n};\r\nJqueryUiTheme.prototype.baseIconClass = 'ui-icon';\r\nJqueryUiTheme.prototype.iconClasses = {\r\n close: 'ui-icon-closethick',\r\n prev: 'ui-icon-circle-triangle-w',\r\n next: 'ui-icon-circle-triangle-e',\r\n prevYear: 'ui-icon-seek-prev',\r\n nextYear: 'ui-icon-seek-next'\r\n};\r\nJqueryUiTheme.prototype.iconOverrideOption = 'themeButtonIcons';\r\nJqueryUiTheme.prototype.iconOverrideCustomButtonOption = 'themeIcon';\r\nJqueryUiTheme.prototype.iconOverridePrefix = 'ui-icon-';\r\n\n\n/***/ }),\n/* 223 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar FuncEventSource = /** @class */ (function (_super) {\r\n tslib_1.__extends(FuncEventSource, _super);\r\n function FuncEventSource() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n FuncEventSource.parse = function (rawInput, calendar) {\r\n var rawProps;\r\n // normalize raw input\r\n if ($.isFunction(rawInput.events)) { // extended form\r\n rawProps = rawInput;\r\n }\r\n else if ($.isFunction(rawInput)) { // short form\r\n rawProps = { events: rawInput };\r\n }\r\n if (rawProps) {\r\n return EventSource_1.default.parse.call(this, rawProps, calendar);\r\n }\r\n return false;\r\n };\r\n FuncEventSource.prototype.fetch = function (start, end, timezone) {\r\n var _this = this;\r\n this.calendar.pushLoading();\r\n return Promise_1.default.construct(function (onResolve) {\r\n _this.func.call(_this.calendar, start.clone(), end.clone(), timezone, function (rawEventDefs) {\r\n _this.calendar.popLoading();\r\n onResolve(_this.parseEventDefs(rawEventDefs));\r\n });\r\n });\r\n };\r\n FuncEventSource.prototype.getPrimitive = function () {\r\n return this.func;\r\n };\r\n FuncEventSource.prototype.applyManualStandardProps = function (rawProps) {\r\n var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);\r\n this.func = rawProps.events;\r\n return superSuccess;\r\n };\r\n return FuncEventSource;\r\n}(EventSource_1.default));\r\nexports.default = FuncEventSource;\r\nFuncEventSource.defineStandardProps({\r\n events: false // don't automatically transfer\r\n});\r\n\n\n/***/ }),\n/* 224 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar JsonFeedEventSource = /** @class */ (function (_super) {\r\n tslib_1.__extends(JsonFeedEventSource, _super);\r\n function JsonFeedEventSource() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n JsonFeedEventSource.parse = function (rawInput, calendar) {\r\n var rawProps;\r\n // normalize raw input\r\n if (typeof rawInput.url === 'string') { // extended form\r\n rawProps = rawInput;\r\n }\r\n else if (typeof rawInput === 'string') { // short form\r\n rawProps = { url: rawInput };\r\n }\r\n if (rawProps) {\r\n return EventSource_1.default.parse.call(this, rawProps, calendar);\r\n }\r\n return false;\r\n };\r\n JsonFeedEventSource.prototype.fetch = function (start, end, timezone) {\r\n var _this = this;\r\n var ajaxSettings = this.ajaxSettings;\r\n var onSuccess = ajaxSettings.success;\r\n var onError = ajaxSettings.error;\r\n var requestParams = this.buildRequestParams(start, end, timezone);\r\n // todo: eventually handle the promise's then,\r\n // don't intercept success/error\r\n // tho will be a breaking API change\r\n this.calendar.pushLoading();\r\n return Promise_1.default.construct(function (onResolve, onReject) {\r\n $.ajax($.extend({}, // destination\r\n JsonFeedEventSource.AJAX_DEFAULTS, ajaxSettings, {\r\n url: _this.url,\r\n data: requestParams,\r\n success: function (rawEventDefs, status, xhr) {\r\n var callbackRes;\r\n _this.calendar.popLoading();\r\n if (rawEventDefs) {\r\n callbackRes = util_1.applyAll(onSuccess, _this, [rawEventDefs, status, xhr]); // redirect `this`\r\n if ($.isArray(callbackRes)) {\r\n rawEventDefs = callbackRes;\r\n }\r\n onResolve(_this.parseEventDefs(rawEventDefs));\r\n }\r\n else {\r\n onReject();\r\n }\r\n },\r\n error: function (xhr, statusText, errorThrown) {\r\n _this.calendar.popLoading();\r\n util_1.applyAll(onError, _this, [xhr, statusText, errorThrown]); // redirect `this`\r\n onReject();\r\n }\r\n }));\r\n });\r\n };\r\n JsonFeedEventSource.prototype.buildRequestParams = function (start, end, timezone) {\r\n var calendar = this.calendar;\r\n var ajaxSettings = this.ajaxSettings;\r\n var startParam;\r\n var endParam;\r\n var timezoneParam;\r\n var customRequestParams;\r\n var params = {};\r\n startParam = this.startParam;\r\n if (startParam == null) {\r\n startParam = calendar.opt('startParam');\r\n }\r\n endParam = this.endParam;\r\n if (endParam == null) {\r\n endParam = calendar.opt('endParam');\r\n }\r\n timezoneParam = this.timezoneParam;\r\n if (timezoneParam == null) {\r\n timezoneParam = calendar.opt('timezoneParam');\r\n }\r\n // retrieve any outbound GET/POST $.ajax data from the options\r\n if ($.isFunction(ajaxSettings.data)) {\r\n // supplied as a function that returns a key/value object\r\n customRequestParams = ajaxSettings.data();\r\n }\r\n else {\r\n // probably supplied as a straight key/value object\r\n customRequestParams = ajaxSettings.data || {};\r\n }\r\n $.extend(params, customRequestParams);\r\n params[startParam] = start.format();\r\n params[endParam] = end.format();\r\n if (timezone && timezone !== 'local') {\r\n params[timezoneParam] = timezone;\r\n }\r\n return params;\r\n };\r\n JsonFeedEventSource.prototype.getPrimitive = function () {\r\n return this.url;\r\n };\r\n JsonFeedEventSource.prototype.applyMiscProps = function (rawProps) {\r\n this.ajaxSettings = rawProps;\r\n };\r\n JsonFeedEventSource.AJAX_DEFAULTS = {\r\n dataType: 'json',\r\n cache: false\r\n };\r\n return JsonFeedEventSource;\r\n}(EventSource_1.default));\r\nexports.default = JsonFeedEventSource;\r\nJsonFeedEventSource.defineStandardProps({\r\n // automatically transfer (true)...\r\n url: true,\r\n startParam: true,\r\n endParam: true,\r\n timezoneParam: true\r\n});\r\n\n\n/***/ }),\n/* 225 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Iterator = /** @class */ (function () {\r\n function Iterator(items) {\r\n this.items = items || [];\r\n }\r\n /* Calls a method on every item passing the arguments through */\r\n Iterator.prototype.proxyCall = function (methodName) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n var results = [];\r\n this.items.forEach(function (item) {\r\n results.push(item[methodName].apply(item, args));\r\n });\r\n return results;\r\n };\r\n return Iterator;\r\n}());\r\nexports.default = Iterator;\r\n\n\n/***/ }),\n/* 226 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\n/* Creates a clone of an element and lets it track the mouse as it moves\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar MouseFollower = /** @class */ (function () {\r\n function MouseFollower(sourceEl, options) {\r\n this.isFollowing = false;\r\n this.isHidden = false;\r\n this.isAnimating = false; // doing the revert animation?\r\n this.options = options = options || {};\r\n this.sourceEl = sourceEl;\r\n this.parentEl = options.parentEl ? $(options.parentEl) : sourceEl.parent(); // default to sourceEl's parent\r\n }\r\n // Causes the element to start following the mouse\r\n MouseFollower.prototype.start = function (ev) {\r\n if (!this.isFollowing) {\r\n this.isFollowing = true;\r\n this.y0 = util_1.getEvY(ev);\r\n this.x0 = util_1.getEvX(ev);\r\n this.topDelta = 0;\r\n this.leftDelta = 0;\r\n if (!this.isHidden) {\r\n this.updatePosition();\r\n }\r\n if (util_1.getEvIsTouch(ev)) {\r\n this.listenTo($(document), 'touchmove', this.handleMove);\r\n }\r\n else {\r\n this.listenTo($(document), 'mousemove', this.handleMove);\r\n }\r\n }\r\n };\r\n // Causes the element to stop following the mouse. If shouldRevert is true, will animate back to original position.\r\n // `callback` gets invoked when the animation is complete. If no animation, it is invoked immediately.\r\n MouseFollower.prototype.stop = function (shouldRevert, callback) {\r\n var _this = this;\r\n var revertDuration = this.options.revertDuration;\r\n var complete = function () {\r\n _this.isAnimating = false;\r\n _this.removeElement();\r\n _this.top0 = _this.left0 = null; // reset state for future updatePosition calls\r\n if (callback) {\r\n callback();\r\n }\r\n };\r\n if (this.isFollowing && !this.isAnimating) { // disallow more than one stop animation at a time\r\n this.isFollowing = false;\r\n this.stopListeningTo($(document));\r\n if (shouldRevert && revertDuration && !this.isHidden) { // do a revert animation?\r\n this.isAnimating = true;\r\n this.el.animate({\r\n top: this.top0,\r\n left: this.left0\r\n }, {\r\n duration: revertDuration,\r\n complete: complete\r\n });\r\n }\r\n else {\r\n complete();\r\n }\r\n }\r\n };\r\n // Gets the tracking element. Create it if necessary\r\n MouseFollower.prototype.getEl = function () {\r\n var el = this.el;\r\n if (!el) {\r\n el = this.el = this.sourceEl.clone()\r\n .addClass(this.options.additionalClass || '')\r\n .css({\r\n position: 'absolute',\r\n visibility: '',\r\n display: this.isHidden ? 'none' : '',\r\n margin: 0,\r\n right: 'auto',\r\n bottom: 'auto',\r\n width: this.sourceEl.width(),\r\n height: this.sourceEl.height(),\r\n opacity: this.options.opacity || '',\r\n zIndex: this.options.zIndex\r\n });\r\n // we don't want long taps or any mouse interaction causing selection/menus.\r\n // would use preventSelection(), but that prevents selectstart, causing problems.\r\n el.addClass('fc-unselectable');\r\n el.appendTo(this.parentEl);\r\n }\r\n return el;\r\n };\r\n // Removes the tracking element if it has already been created\r\n MouseFollower.prototype.removeElement = function () {\r\n if (this.el) {\r\n this.el.remove();\r\n this.el = null;\r\n }\r\n };\r\n // Update the CSS position of the tracking element\r\n MouseFollower.prototype.updatePosition = function () {\r\n var sourceOffset;\r\n var origin;\r\n this.getEl(); // ensure this.el\r\n // make sure origin info was computed\r\n if (this.top0 == null) {\r\n sourceOffset = this.sourceEl.offset();\r\n origin = this.el.offsetParent().offset();\r\n this.top0 = sourceOffset.top - origin.top;\r\n this.left0 = sourceOffset.left - origin.left;\r\n }\r\n this.el.css({\r\n top: this.top0 + this.topDelta,\r\n left: this.left0 + this.leftDelta\r\n });\r\n };\r\n // Gets called when the user moves the mouse\r\n MouseFollower.prototype.handleMove = function (ev) {\r\n this.topDelta = util_1.getEvY(ev) - this.y0;\r\n this.leftDelta = util_1.getEvX(ev) - this.x0;\r\n if (!this.isHidden) {\r\n this.updatePosition();\r\n }\r\n };\r\n // Temporarily makes the tracking element invisible. Can be called before following starts\r\n MouseFollower.prototype.hide = function () {\r\n if (!this.isHidden) {\r\n this.isHidden = true;\r\n if (this.el) {\r\n this.el.hide();\r\n }\r\n }\r\n };\r\n // Show the tracking element after it has been temporarily hidden\r\n MouseFollower.prototype.show = function () {\r\n if (this.isHidden) {\r\n this.isHidden = false;\r\n this.updatePosition();\r\n this.getEl().show();\r\n }\r\n };\r\n return MouseFollower;\r\n}());\r\nexports.default = MouseFollower;\r\nListenerMixin_1.default.mixInto(MouseFollower);\r\n\n\n/***/ }),\n/* 227 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* A rectangular panel that is absolutely positioned over other content\r\n------------------------------------------------------------------------------------------------------------------------\r\nOptions:\r\n - className (string)\r\n - content (HTML string or jQuery element set)\r\n - parentEl\r\n - top\r\n - left\r\n - right (the x coord of where the right edge should be. not a \"CSS\" right)\r\n - autoHide (boolean)\r\n - show (callback)\r\n - hide (callback)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar Popover = /** @class */ (function () {\r\n function Popover(options) {\r\n this.isHidden = true;\r\n this.margin = 10; // the space required between the popover and the edges of the scroll container\r\n this.options = options || {};\r\n }\r\n // Shows the popover on the specified position. Renders it if not already\r\n Popover.prototype.show = function () {\r\n if (this.isHidden) {\r\n if (!this.el) {\r\n this.render();\r\n }\r\n this.el.show();\r\n this.position();\r\n this.isHidden = false;\r\n this.trigger('show');\r\n }\r\n };\r\n // Hides the popover, through CSS, but does not remove it from the DOM\r\n Popover.prototype.hide = function () {\r\n if (!this.isHidden) {\r\n this.el.hide();\r\n this.isHidden = true;\r\n this.trigger('hide');\r\n }\r\n };\r\n // Creates `this.el` and renders content inside of it\r\n Popover.prototype.render = function () {\r\n var _this = this;\r\n var options = this.options;\r\n this.el = $('
')\r\n .addClass(options.className || '')\r\n .css({\r\n // position initially to the top left to avoid creating scrollbars\r\n top: 0,\r\n left: 0\r\n })\r\n .append(options.content)\r\n .appendTo(options.parentEl);\r\n // when a click happens on anything inside with a 'fc-close' className, hide the popover\r\n this.el.on('click', '.fc-close', function () {\r\n _this.hide();\r\n });\r\n if (options.autoHide) {\r\n this.listenTo($(document), 'mousedown', this.documentMousedown);\r\n }\r\n };\r\n // Triggered when the user clicks *anywhere* in the document, for the autoHide feature\r\n Popover.prototype.documentMousedown = function (ev) {\r\n // only hide the popover if the click happened outside the popover\r\n if (this.el && !$(ev.target).closest(this.el).length) {\r\n this.hide();\r\n }\r\n };\r\n // Hides and unregisters any handlers\r\n Popover.prototype.removeElement = function () {\r\n this.hide();\r\n if (this.el) {\r\n this.el.remove();\r\n this.el = null;\r\n }\r\n this.stopListeningTo($(document), 'mousedown');\r\n };\r\n // Positions the popover optimally, using the top/left/right options\r\n Popover.prototype.position = function () {\r\n var options = this.options;\r\n var origin = this.el.offsetParent().offset();\r\n var width = this.el.outerWidth();\r\n var height = this.el.outerHeight();\r\n var windowEl = $(window);\r\n var viewportEl = util_1.getScrollParent(this.el);\r\n var viewportTop;\r\n var viewportLeft;\r\n var viewportOffset;\r\n var top; // the \"position\" (not \"offset\") values for the popover\r\n var left; //\r\n // compute top and left\r\n top = options.top || 0;\r\n if (options.left !== undefined) {\r\n left = options.left;\r\n }\r\n else if (options.right !== undefined) {\r\n left = options.right - width; // derive the left value from the right value\r\n }\r\n else {\r\n left = 0;\r\n }\r\n if (viewportEl.is(window) || viewportEl.is(document)) { // normalize getScrollParent's result\r\n viewportEl = windowEl;\r\n viewportTop = 0; // the window is always at the top left\r\n viewportLeft = 0; // (and .offset() won't work if called here)\r\n }\r\n else {\r\n viewportOffset = viewportEl.offset();\r\n viewportTop = viewportOffset.top;\r\n viewportLeft = viewportOffset.left;\r\n }\r\n // if the window is scrolled, it causes the visible area to be further down\r\n viewportTop += windowEl.scrollTop();\r\n viewportLeft += windowEl.scrollLeft();\r\n // constrain to the view port. if constrained by two edges, give precedence to top/left\r\n if (options.viewportConstrain !== false) {\r\n top = Math.min(top, viewportTop + viewportEl.outerHeight() - height - this.margin);\r\n top = Math.max(top, viewportTop + this.margin);\r\n left = Math.min(left, viewportLeft + viewportEl.outerWidth() - width - this.margin);\r\n left = Math.max(left, viewportLeft + this.margin);\r\n }\r\n this.el.css({\r\n top: top - origin.top,\r\n left: left - origin.left\r\n });\r\n };\r\n // Triggers a callback. Calls a function in the option hash of the same name.\r\n // Arguments beyond the first `name` are forwarded on.\r\n // TODO: better code reuse for this. Repeat code\r\n Popover.prototype.trigger = function (name) {\r\n if (this.options[name]) {\r\n this.options[name].apply(this, Array.prototype.slice.call(arguments, 1));\r\n }\r\n };\r\n return Popover;\r\n}());\r\nexports.default = Popover;\r\nListenerMixin_1.default.mixInto(Popover);\r\n\n\n/***/ }),\n/* 228 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar TaskQueue = /** @class */ (function () {\r\n function TaskQueue() {\r\n this.q = [];\r\n this.isPaused = false;\r\n this.isRunning = false;\r\n }\r\n TaskQueue.prototype.queue = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n this.q.push.apply(this.q, args); // append\r\n this.tryStart();\r\n };\r\n TaskQueue.prototype.pause = function () {\r\n this.isPaused = true;\r\n };\r\n TaskQueue.prototype.resume = function () {\r\n this.isPaused = false;\r\n this.tryStart();\r\n };\r\n TaskQueue.prototype.getIsIdle = function () {\r\n return !this.isRunning && !this.isPaused;\r\n };\r\n TaskQueue.prototype.tryStart = function () {\r\n if (!this.isRunning && this.canRunNext()) {\r\n this.isRunning = true;\r\n this.trigger('start');\r\n this.runRemaining();\r\n }\r\n };\r\n TaskQueue.prototype.canRunNext = function () {\r\n return !this.isPaused && this.q.length;\r\n };\r\n TaskQueue.prototype.runRemaining = function () {\r\n var _this = this;\r\n var task;\r\n var res;\r\n do {\r\n task = this.q.shift(); // always freshly reference q. might have been reassigned.\r\n res = this.runTask(task);\r\n if (res && res.then) {\r\n res.then(function () {\r\n if (_this.canRunNext()) {\r\n _this.runRemaining();\r\n }\r\n });\r\n return; // prevent marking as stopped\r\n }\r\n } while (this.canRunNext());\r\n this.trigger('stop'); // not really a 'stop' ... more of a 'drained'\r\n this.isRunning = false;\r\n // if 'stop' handler added more tasks.... TODO: write test for this\r\n this.tryStart();\r\n };\r\n TaskQueue.prototype.runTask = function (task) {\r\n return task(); // task *is* the function, but subclasses can change the format of a task\r\n };\r\n return TaskQueue;\r\n}());\r\nexports.default = TaskQueue;\r\nEmitterMixin_1.default.mixInto(TaskQueue);\r\n\n\n/***/ }),\n/* 229 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar TaskQueue_1 = __webpack_require__(228);\r\nvar RenderQueue = /** @class */ (function (_super) {\r\n tslib_1.__extends(RenderQueue, _super);\r\n function RenderQueue(waitsByNamespace) {\r\n var _this = _super.call(this) || this;\r\n _this.waitsByNamespace = waitsByNamespace || {};\r\n return _this;\r\n }\r\n RenderQueue.prototype.queue = function (taskFunc, namespace, type) {\r\n var task = {\r\n func: taskFunc,\r\n namespace: namespace,\r\n type: type\r\n };\r\n var waitMs;\r\n if (namespace) {\r\n waitMs = this.waitsByNamespace[namespace];\r\n }\r\n if (this.waitNamespace) {\r\n if (namespace === this.waitNamespace && waitMs != null) {\r\n this.delayWait(waitMs);\r\n }\r\n else {\r\n this.clearWait();\r\n this.tryStart();\r\n }\r\n }\r\n if (this.compoundTask(task)) { // appended to queue?\r\n if (!this.waitNamespace && waitMs != null) {\r\n this.startWait(namespace, waitMs);\r\n }\r\n else {\r\n this.tryStart();\r\n }\r\n }\r\n };\r\n RenderQueue.prototype.startWait = function (namespace, waitMs) {\r\n this.waitNamespace = namespace;\r\n this.spawnWait(waitMs);\r\n };\r\n RenderQueue.prototype.delayWait = function (waitMs) {\r\n clearTimeout(this.waitId);\r\n this.spawnWait(waitMs);\r\n };\r\n RenderQueue.prototype.spawnWait = function (waitMs) {\r\n var _this = this;\r\n this.waitId = setTimeout(function () {\r\n _this.waitNamespace = null;\r\n _this.tryStart();\r\n }, waitMs);\r\n };\r\n RenderQueue.prototype.clearWait = function () {\r\n if (this.waitNamespace) {\r\n clearTimeout(this.waitId);\r\n this.waitId = null;\r\n this.waitNamespace = null;\r\n }\r\n };\r\n RenderQueue.prototype.canRunNext = function () {\r\n if (!_super.prototype.canRunNext.call(this)) {\r\n return false;\r\n }\r\n // waiting for a certain namespace to stop receiving tasks?\r\n if (this.waitNamespace) {\r\n var q = this.q;\r\n // if there was a different namespace task in the meantime,\r\n // that forces all previously-waiting tasks to suddenly execute.\r\n // TODO: find a way to do this in constant time.\r\n for (var i = 0; i < q.length; i++) {\r\n if (q[i].namespace !== this.waitNamespace) {\r\n return true; // allow execution\r\n }\r\n }\r\n return false;\r\n }\r\n return true;\r\n };\r\n RenderQueue.prototype.runTask = function (task) {\r\n task.func();\r\n };\r\n RenderQueue.prototype.compoundTask = function (newTask) {\r\n var q = this.q;\r\n var shouldAppend = true;\r\n var i;\r\n var task;\r\n if (newTask.namespace && newTask.type === 'destroy') {\r\n // remove all init/add/remove ops with same namespace, regardless of order\r\n for (i = q.length - 1; i >= 0; i--) {\r\n task = q[i];\r\n if (task.namespace === newTask.namespace) {\r\n switch (task.type) {\r\n case 'init':\r\n shouldAppend = false;\r\n // the latest destroy is cancelled out by not doing the init\r\n /* falls through */\r\n case 'add':\r\n /* falls through */\r\n case 'remove':\r\n q.splice(i, 1); // remove task\r\n }\r\n }\r\n }\r\n }\r\n if (shouldAppend) {\r\n q.push(newTask);\r\n }\r\n return shouldAppend;\r\n };\r\n return RenderQueue;\r\n}(TaskQueue_1.default));\r\nexports.default = RenderQueue;\r\n\n\n/***/ }),\n/* 230 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Model_1 = __webpack_require__(51);\r\nvar Component = /** @class */ (function (_super) {\r\n tslib_1.__extends(Component, _super);\r\n function Component() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n Component.prototype.setElement = function (el) {\r\n this.el = el;\r\n this.bindGlobalHandlers();\r\n this.renderSkeleton();\r\n this.set('isInDom', true);\r\n };\r\n Component.prototype.removeElement = function () {\r\n this.unset('isInDom');\r\n this.unrenderSkeleton();\r\n this.unbindGlobalHandlers();\r\n this.el.remove();\r\n // NOTE: don't null-out this.el in case the View was destroyed within an API callback.\r\n // We don't null-out the View's other jQuery element references upon destroy,\r\n // so we shouldn't kill this.el either.\r\n };\r\n Component.prototype.bindGlobalHandlers = function () {\r\n // subclasses can override\r\n };\r\n Component.prototype.unbindGlobalHandlers = function () {\r\n // subclasses can override\r\n };\r\n /*\r\n NOTE: Can't have a `render` method. Read the deprecation notice in View::executeDateRender\r\n */\r\n // Renders the basic structure of the view before any content is rendered\r\n Component.prototype.renderSkeleton = function () {\r\n // subclasses should implement\r\n };\r\n // Unrenders the basic structure of the view\r\n Component.prototype.unrenderSkeleton = function () {\r\n // subclasses should implement\r\n };\r\n return Component;\r\n}(Model_1.default));\r\nexports.default = Component;\r\n\n\n/***/ }),\n/* 231 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar date_formatting_1 = __webpack_require__(49);\r\nvar Component_1 = __webpack_require__(230);\r\nvar util_2 = __webpack_require__(19);\r\nvar DateComponent = /** @class */ (function (_super) {\r\n tslib_1.__extends(DateComponent, _super);\r\n function DateComponent(_view, _options) {\r\n var _this = _super.call(this) || this;\r\n _this.isRTL = false; // frequently accessed options\r\n _this.hitsNeededDepth = 0; // necessary because multiple callers might need the same hits\r\n _this.hasAllDayBusinessHours = false; // TODO: unify with largeUnit and isTimeScale?\r\n _this.isDatesRendered = false;\r\n // hack to set options prior to the this.opt calls\r\n if (_view) {\r\n _this['view'] = _view;\r\n }\r\n if (_options) {\r\n _this['options'] = _options;\r\n }\r\n _this.uid = String(DateComponent.guid++);\r\n _this.childrenByUid = {};\r\n _this.nextDayThreshold = moment.duration(_this.opt('nextDayThreshold'));\r\n _this.isRTL = _this.opt('isRTL');\r\n if (_this.fillRendererClass) {\r\n _this.fillRenderer = new _this.fillRendererClass(_this);\r\n }\r\n if (_this.eventRendererClass) { // fillRenderer is optional -----v\r\n _this.eventRenderer = new _this.eventRendererClass(_this, _this.fillRenderer);\r\n }\r\n if (_this.helperRendererClass && _this.eventRenderer) {\r\n _this.helperRenderer = new _this.helperRendererClass(_this, _this.eventRenderer);\r\n }\r\n if (_this.businessHourRendererClass && _this.fillRenderer) {\r\n _this.businessHourRenderer = new _this.businessHourRendererClass(_this, _this.fillRenderer);\r\n }\r\n return _this;\r\n }\r\n DateComponent.prototype.addChild = function (child) {\r\n if (!this.childrenByUid[child.uid]) {\r\n this.childrenByUid[child.uid] = child;\r\n return true;\r\n }\r\n return false;\r\n };\r\n DateComponent.prototype.removeChild = function (child) {\r\n if (this.childrenByUid[child.uid]) {\r\n delete this.childrenByUid[child.uid];\r\n return true;\r\n }\r\n return false;\r\n };\r\n // TODO: only do if isInDom?\r\n // TODO: make part of Component, along with children/batch-render system?\r\n DateComponent.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n this.callChildren('updateSize', arguments);\r\n };\r\n // Options\r\n // -----------------------------------------------------------------------------------------------------------------\r\n DateComponent.prototype.opt = function (name) {\r\n return this._getView().opt(name); // default implementation\r\n };\r\n DateComponent.prototype.publiclyTrigger = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var calendar = this._getCalendar();\r\n return calendar.publiclyTrigger.apply(calendar, args);\r\n };\r\n DateComponent.prototype.hasPublicHandlers = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var calendar = this._getCalendar();\r\n return calendar.hasPublicHandlers.apply(calendar, args);\r\n };\r\n // Date\r\n // -----------------------------------------------------------------------------------------------------------------\r\n DateComponent.prototype.executeDateRender = function (dateProfile) {\r\n this.dateProfile = dateProfile; // for rendering\r\n this.renderDates(dateProfile);\r\n this.isDatesRendered = true;\r\n this.callChildren('executeDateRender', arguments);\r\n };\r\n DateComponent.prototype.executeDateUnrender = function () {\r\n this.callChildren('executeDateUnrender', arguments);\r\n this.dateProfile = null;\r\n this.unrenderDates();\r\n this.isDatesRendered = false;\r\n };\r\n // date-cell content only\r\n DateComponent.prototype.renderDates = function (dateProfile) {\r\n // subclasses should implement\r\n };\r\n // date-cell content only\r\n DateComponent.prototype.unrenderDates = function () {\r\n // subclasses should override\r\n };\r\n // Now-Indicator\r\n // -----------------------------------------------------------------------------------------------------------------\r\n // Returns a string unit, like 'second' or 'minute' that defined how often the current time indicator\r\n // should be refreshed. If something falsy is returned, no time indicator is rendered at all.\r\n DateComponent.prototype.getNowIndicatorUnit = function () {\r\n // subclasses should implement\r\n };\r\n // Renders a current time indicator at the given datetime\r\n DateComponent.prototype.renderNowIndicator = function (date) {\r\n this.callChildren('renderNowIndicator', arguments);\r\n };\r\n // Undoes the rendering actions from renderNowIndicator\r\n DateComponent.prototype.unrenderNowIndicator = function () {\r\n this.callChildren('unrenderNowIndicator', arguments);\r\n };\r\n // Business Hours\r\n // ---------------------------------------------------------------------------------------------------------------\r\n DateComponent.prototype.renderBusinessHours = function (businessHourGenerator) {\r\n if (this.businessHourRenderer) {\r\n this.businessHourRenderer.render(businessHourGenerator);\r\n }\r\n this.callChildren('renderBusinessHours', arguments);\r\n };\r\n // Unrenders previously-rendered business-hours\r\n DateComponent.prototype.unrenderBusinessHours = function () {\r\n this.callChildren('unrenderBusinessHours', arguments);\r\n if (this.businessHourRenderer) {\r\n this.businessHourRenderer.unrender();\r\n }\r\n };\r\n // Event Displaying\r\n // -----------------------------------------------------------------------------------------------------------------\r\n DateComponent.prototype.executeEventRender = function (eventsPayload) {\r\n if (this.eventRenderer) {\r\n this.eventRenderer.rangeUpdated(); // poorly named now\r\n this.eventRenderer.render(eventsPayload);\r\n }\r\n else if (this['renderEvents']) { // legacy\r\n this['renderEvents'](convertEventsPayloadToLegacyArray(eventsPayload));\r\n }\r\n this.callChildren('executeEventRender', arguments);\r\n };\r\n DateComponent.prototype.executeEventUnrender = function () {\r\n this.callChildren('executeEventUnrender', arguments);\r\n if (this.eventRenderer) {\r\n this.eventRenderer.unrender();\r\n }\r\n else if (this['destroyEvents']) { // legacy\r\n this['destroyEvents']();\r\n }\r\n };\r\n DateComponent.prototype.getBusinessHourSegs = function () {\r\n var segs = this.getOwnBusinessHourSegs();\r\n this.iterChildren(function (child) {\r\n segs.push.apply(segs, child.getBusinessHourSegs());\r\n });\r\n return segs;\r\n };\r\n DateComponent.prototype.getOwnBusinessHourSegs = function () {\r\n if (this.businessHourRenderer) {\r\n return this.businessHourRenderer.getSegs();\r\n }\r\n return [];\r\n };\r\n DateComponent.prototype.getEventSegs = function () {\r\n var segs = this.getOwnEventSegs();\r\n this.iterChildren(function (child) {\r\n segs.push.apply(segs, child.getEventSegs());\r\n });\r\n return segs;\r\n };\r\n DateComponent.prototype.getOwnEventSegs = function () {\r\n if (this.eventRenderer) {\r\n return this.eventRenderer.getSegs();\r\n }\r\n return [];\r\n };\r\n // Event Rendering Triggering\r\n // -----------------------------------------------------------------------------------------------------------------\r\n DateComponent.prototype.triggerAfterEventsRendered = function () {\r\n this.triggerAfterEventSegsRendered(this.getEventSegs());\r\n this.publiclyTrigger('eventAfterAllRender', {\r\n context: this,\r\n args: [this]\r\n });\r\n };\r\n DateComponent.prototype.triggerAfterEventSegsRendered = function (segs) {\r\n var _this = this;\r\n // an optimization, because getEventLegacy is expensive\r\n if (this.hasPublicHandlers('eventAfterRender')) {\r\n segs.forEach(function (seg) {\r\n var legacy;\r\n if (seg.el) { // necessary?\r\n legacy = seg.footprint.getEventLegacy();\r\n _this.publiclyTrigger('eventAfterRender', {\r\n context: legacy,\r\n args: [legacy, seg.el, _this]\r\n });\r\n }\r\n });\r\n }\r\n };\r\n DateComponent.prototype.triggerBeforeEventsDestroyed = function () {\r\n this.triggerBeforeEventSegsDestroyed(this.getEventSegs());\r\n };\r\n DateComponent.prototype.triggerBeforeEventSegsDestroyed = function (segs) {\r\n var _this = this;\r\n if (this.hasPublicHandlers('eventDestroy')) {\r\n segs.forEach(function (seg) {\r\n var legacy;\r\n if (seg.el) { // necessary?\r\n legacy = seg.footprint.getEventLegacy();\r\n _this.publiclyTrigger('eventDestroy', {\r\n context: legacy,\r\n args: [legacy, seg.el, _this]\r\n });\r\n }\r\n });\r\n }\r\n };\r\n // Event Rendering Utils\r\n // -----------------------------------------------------------------------------------------------------------------\r\n // Hides all rendered event segments linked to the given event\r\n // RECURSIVE with subcomponents\r\n DateComponent.prototype.showEventsWithId = function (eventDefId) {\r\n this.getEventSegs().forEach(function (seg) {\r\n if (seg.footprint.eventDef.id === eventDefId &&\r\n seg.el // necessary?\r\n ) {\r\n seg.el.css('visibility', '');\r\n }\r\n });\r\n this.callChildren('showEventsWithId', arguments);\r\n };\r\n // Shows all rendered event segments linked to the given event\r\n // RECURSIVE with subcomponents\r\n DateComponent.prototype.hideEventsWithId = function (eventDefId) {\r\n this.getEventSegs().forEach(function (seg) {\r\n if (seg.footprint.eventDef.id === eventDefId &&\r\n seg.el // necessary?\r\n ) {\r\n seg.el.css('visibility', 'hidden');\r\n }\r\n });\r\n this.callChildren('hideEventsWithId', arguments);\r\n };\r\n // Drag-n-Drop Rendering (for both events and external elements)\r\n // ---------------------------------------------------------------------------------------------------------------\r\n // Renders a visual indication of a event or external-element drag over the given drop zone.\r\n // If an external-element, seg will be `null`.\r\n // Must return elements used for any mock events.\r\n DateComponent.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n var renderedHelper = false;\r\n this.iterChildren(function (child) {\r\n if (child.renderDrag(eventFootprints, seg, isTouch)) {\r\n renderedHelper = true;\r\n }\r\n });\r\n return renderedHelper;\r\n };\r\n // Unrenders a visual indication of an event or external-element being dragged.\r\n DateComponent.prototype.unrenderDrag = function () {\r\n this.callChildren('unrenderDrag', arguments);\r\n };\r\n // Event Resizing\r\n // ---------------------------------------------------------------------------------------------------------------\r\n // Renders a visual indication of an event being resized.\r\n DateComponent.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n this.callChildren('renderEventResize', arguments);\r\n };\r\n // Unrenders a visual indication of an event being resized.\r\n DateComponent.prototype.unrenderEventResize = function () {\r\n this.callChildren('unrenderEventResize', arguments);\r\n };\r\n // Selection\r\n // ---------------------------------------------------------------------------------------------------------------\r\n // Renders a visual indication of the selection\r\n // TODO: rename to `renderSelection` after legacy is gone\r\n DateComponent.prototype.renderSelectionFootprint = function (componentFootprint) {\r\n this.renderHighlight(componentFootprint);\r\n this.callChildren('renderSelectionFootprint', arguments);\r\n };\r\n // Unrenders a visual indication of selection\r\n DateComponent.prototype.unrenderSelection = function () {\r\n this.unrenderHighlight();\r\n this.callChildren('unrenderSelection', arguments);\r\n };\r\n // Highlight\r\n // ---------------------------------------------------------------------------------------------------------------\r\n // Renders an emphasis on the given date range. Given a span (unzoned start/end and other misc data)\r\n DateComponent.prototype.renderHighlight = function (componentFootprint) {\r\n if (this.fillRenderer) {\r\n this.fillRenderer.renderFootprint('highlight', componentFootprint, {\r\n getClasses: function () {\r\n return ['fc-highlight'];\r\n }\r\n });\r\n }\r\n this.callChildren('renderHighlight', arguments);\r\n };\r\n // Unrenders the emphasis on a date range\r\n DateComponent.prototype.unrenderHighlight = function () {\r\n if (this.fillRenderer) {\r\n this.fillRenderer.unrender('highlight');\r\n }\r\n this.callChildren('unrenderHighlight', arguments);\r\n };\r\n // Hit Areas\r\n // ---------------------------------------------------------------------------------------------------------------\r\n // just because all DateComponents support this interface\r\n // doesn't mean they need to have their own internal coord system. they can defer to sub-components.\r\n DateComponent.prototype.hitsNeeded = function () {\r\n if (!(this.hitsNeededDepth++)) {\r\n this.prepareHits();\r\n }\r\n this.callChildren('hitsNeeded', arguments);\r\n };\r\n DateComponent.prototype.hitsNotNeeded = function () {\r\n if (this.hitsNeededDepth && !(--this.hitsNeededDepth)) {\r\n this.releaseHits();\r\n }\r\n this.callChildren('hitsNotNeeded', arguments);\r\n };\r\n DateComponent.prototype.prepareHits = function () {\r\n // subclasses can implement\r\n };\r\n DateComponent.prototype.releaseHits = function () {\r\n // subclasses can implement\r\n };\r\n // Given coordinates from the topleft of the document, return data about the date-related area underneath.\r\n // Can return an object with arbitrary properties (although top/right/left/bottom are encouraged).\r\n // Must have a `grid` property, a reference to this current grid. TODO: avoid this\r\n // The returned object will be processed by getHitFootprint and getHitEl.\r\n DateComponent.prototype.queryHit = function (leftOffset, topOffset) {\r\n var childrenByUid = this.childrenByUid;\r\n var uid;\r\n var hit;\r\n for (uid in childrenByUid) {\r\n hit = childrenByUid[uid].queryHit(leftOffset, topOffset);\r\n if (hit) {\r\n break;\r\n }\r\n }\r\n return hit;\r\n };\r\n DateComponent.prototype.getSafeHitFootprint = function (hit) {\r\n var footprint = this.getHitFootprint(hit);\r\n if (!this.dateProfile.activeUnzonedRange.containsRange(footprint.unzonedRange)) {\r\n return null;\r\n }\r\n return footprint;\r\n };\r\n DateComponent.prototype.getHitFootprint = function (hit) {\r\n // what about being abstract!?\r\n };\r\n // Given position-level information about a date-related area within the grid,\r\n // should return a jQuery element that best represents it. passed to dayClick callback.\r\n DateComponent.prototype.getHitEl = function (hit) {\r\n // what about being abstract!?\r\n };\r\n /* Converting eventRange -> eventFootprint\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n DateComponent.prototype.eventRangesToEventFootprints = function (eventRanges) {\r\n var eventFootprints = [];\r\n var i;\r\n for (i = 0; i < eventRanges.length; i++) {\r\n eventFootprints.push.apply(// append\r\n eventFootprints, this.eventRangeToEventFootprints(eventRanges[i]));\r\n }\r\n return eventFootprints;\r\n };\r\n DateComponent.prototype.eventRangeToEventFootprints = function (eventRange) {\r\n return [util_2.eventRangeToEventFootprint(eventRange)];\r\n };\r\n /* Converting componentFootprint/eventFootprint -> segs\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n DateComponent.prototype.eventFootprintsToSegs = function (eventFootprints) {\r\n var segs = [];\r\n var i;\r\n for (i = 0; i < eventFootprints.length; i++) {\r\n segs.push.apply(segs, this.eventFootprintToSegs(eventFootprints[i]));\r\n }\r\n return segs;\r\n };\r\n // Given an event's span (unzoned start/end and other misc data), and the event itself,\r\n // slices into segments and attaches event-derived properties to them.\r\n // eventSpan - { start, end, isStart, isEnd, otherthings... }\r\n DateComponent.prototype.eventFootprintToSegs = function (eventFootprint) {\r\n var unzonedRange = eventFootprint.componentFootprint.unzonedRange;\r\n var segs;\r\n var i;\r\n var seg;\r\n segs = this.componentFootprintToSegs(eventFootprint.componentFootprint);\r\n for (i = 0; i < segs.length; i++) {\r\n seg = segs[i];\r\n if (!unzonedRange.isStart) {\r\n seg.isStart = false;\r\n }\r\n if (!unzonedRange.isEnd) {\r\n seg.isEnd = false;\r\n }\r\n seg.footprint = eventFootprint;\r\n // TODO: rename to seg.eventFootprint\r\n }\r\n return segs;\r\n };\r\n DateComponent.prototype.componentFootprintToSegs = function (componentFootprint) {\r\n return [];\r\n };\r\n // Utils\r\n // ---------------------------------------------------------------------------------------------------------------\r\n DateComponent.prototype.callChildren = function (methodName, args) {\r\n this.iterChildren(function (child) {\r\n child[methodName].apply(child, args);\r\n });\r\n };\r\n DateComponent.prototype.iterChildren = function (func) {\r\n var childrenByUid = this.childrenByUid;\r\n var uid;\r\n for (uid in childrenByUid) {\r\n func(childrenByUid[uid]);\r\n }\r\n };\r\n DateComponent.prototype._getCalendar = function () {\r\n var t = this;\r\n return t.calendar || t.view.calendar;\r\n };\r\n DateComponent.prototype._getView = function () {\r\n return this.view;\r\n };\r\n DateComponent.prototype._getDateProfile = function () {\r\n return this._getView().get('dateProfile');\r\n };\r\n // Generates HTML for an anchor to another view into the calendar.\r\n // Will either generate an tag or a non-clickable tag, depending on enabled settings.\r\n // `gotoOptions` can either be a moment input, or an object with the form:\r\n // { date, type, forceOff }\r\n // `type` is a view-type like \"day\" or \"week\". default value is \"day\".\r\n // `attrs` and `innerHtml` are use to generate the rest of the HTML tag.\r\n DateComponent.prototype.buildGotoAnchorHtml = function (gotoOptions, attrs, innerHtml) {\r\n var date;\r\n var type;\r\n var forceOff;\r\n var finalOptions;\r\n if ($.isPlainObject(gotoOptions)) {\r\n date = gotoOptions.date;\r\n type = gotoOptions.type;\r\n forceOff = gotoOptions.forceOff;\r\n }\r\n else {\r\n date = gotoOptions; // a single moment input\r\n }\r\n date = moment_ext_1.default(date); // if a string, parse it\r\n finalOptions = {\r\n date: date.format('YYYY-MM-DD'),\r\n type: type || 'day'\r\n };\r\n if (typeof attrs === 'string') {\r\n innerHtml = attrs;\r\n attrs = null;\r\n }\r\n attrs = attrs ? ' ' + util_1.attrsToStr(attrs) : ''; // will have a leading space\r\n innerHtml = innerHtml || '';\r\n if (!forceOff && this.opt('navLinks')) {\r\n return '' +\r\n innerHtml +\r\n '';\r\n }\r\n else {\r\n return '' +\r\n innerHtml +\r\n '';\r\n }\r\n };\r\n DateComponent.prototype.getAllDayHtml = function () {\r\n return this.opt('allDayHtml') || util_1.htmlEscape(this.opt('allDayText'));\r\n };\r\n // Computes HTML classNames for a single-day element\r\n DateComponent.prototype.getDayClasses = function (date, noThemeHighlight) {\r\n var view = this._getView();\r\n var classes = [];\r\n var today;\r\n if (!this.dateProfile.activeUnzonedRange.containsDate(date)) {\r\n classes.push('fc-disabled-day'); // TODO: jQuery UI theme?\r\n }\r\n else {\r\n classes.push('fc-' + util_1.dayIDs[date.day()]);\r\n if (view.isDateInOtherMonth(date, this.dateProfile)) { // TODO: use DateComponent subclass somehow\r\n classes.push('fc-other-month');\r\n }\r\n today = view.calendar.getNow();\r\n if (date.isSame(today, 'day')) {\r\n classes.push('fc-today');\r\n if (noThemeHighlight !== true) {\r\n classes.push(view.calendar.theme.getClass('today'));\r\n }\r\n }\r\n else if (date < today) {\r\n classes.push('fc-past');\r\n }\r\n else {\r\n classes.push('fc-future');\r\n }\r\n }\r\n return classes;\r\n };\r\n // Utility for formatting a range. Accepts a range object, formatting string, and optional separator.\r\n // Displays all-day ranges naturally, with an inclusive end. Takes the current isRTL into account.\r\n // The timezones of the dates within `range` will be respected.\r\n DateComponent.prototype.formatRange = function (range, isAllDay, formatStr, separator) {\r\n var end = range.end;\r\n if (isAllDay) {\r\n end = end.clone().subtract(1); // convert to inclusive. last ms of previous day\r\n }\r\n return date_formatting_1.formatRange(range.start, end, formatStr, separator, this.isRTL);\r\n };\r\n // Compute the number of the give units in the \"current\" range.\r\n // Will return a floating-point number. Won't round.\r\n DateComponent.prototype.currentRangeAs = function (unit) {\r\n return this._getDateProfile().currentUnzonedRange.as(unit);\r\n };\r\n // Returns the date range of the full days the given range visually appears to occupy.\r\n // Returns a plain object with start/end, NOT an UnzonedRange!\r\n DateComponent.prototype.computeDayRange = function (unzonedRange) {\r\n var calendar = this._getCalendar();\r\n var startDay = calendar.msToUtcMoment(unzonedRange.startMs, true); // the beginning of the day the range starts\r\n var end = calendar.msToUtcMoment(unzonedRange.endMs);\r\n var endTimeMS = +end.time(); // # of milliseconds into `endDay`\r\n var endDay = end.clone().stripTime(); // the beginning of the day the range exclusively ends\r\n // If the end time is actually inclusively part of the next day and is equal to or\r\n // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.\r\n // Otherwise, leaving it as inclusive will cause it to exclude `endDay`.\r\n if (endTimeMS && endTimeMS >= this.nextDayThreshold) {\r\n endDay.add(1, 'days');\r\n }\r\n // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.\r\n if (endDay <= startDay) {\r\n endDay = startDay.clone().add(1, 'days');\r\n }\r\n return { start: startDay, end: endDay };\r\n };\r\n // Does the given range visually appear to occupy more than one day?\r\n DateComponent.prototype.isMultiDayRange = function (unzonedRange) {\r\n var dayRange = this.computeDayRange(unzonedRange);\r\n return dayRange.end.diff(dayRange.start, 'days') > 1;\r\n };\r\n DateComponent.guid = 0; // TODO: better system for this?\r\n return DateComponent;\r\n}(Component_1.default));\r\nexports.default = DateComponent;\r\n// legacy\r\nfunction convertEventsPayloadToLegacyArray(eventsPayload) {\r\n var eventDefId;\r\n var eventInstances;\r\n var legacyEvents = [];\r\n var i;\r\n for (eventDefId in eventsPayload) {\r\n eventInstances = eventsPayload[eventDefId].eventInstances;\r\n for (i = 0; i < eventInstances.length; i++) {\r\n legacyEvents.push(eventInstances[i].toLegacy());\r\n }\r\n }\r\n return legacyEvents;\r\n}\r\n\n\n/***/ }),\n/* 232 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar options_1 = __webpack_require__(33);\r\nvar Iterator_1 = __webpack_require__(225);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar Toolbar_1 = __webpack_require__(257);\r\nvar OptionsManager_1 = __webpack_require__(258);\r\nvar ViewSpecManager_1 = __webpack_require__(259);\r\nvar Constraints_1 = __webpack_require__(217);\r\nvar locale_1 = __webpack_require__(32);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar EventManager_1 = __webpack_require__(220);\r\nvar BusinessHourGenerator_1 = __webpack_require__(218);\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar ThemeRegistry_1 = __webpack_require__(57);\r\nvar Calendar = /** @class */ (function () {\r\n function Calendar(el, overrides) {\r\n this.loadingLevel = 0; // number of simultaneous loading tasks\r\n this.ignoreUpdateViewSize = 0;\r\n this.freezeContentHeightDepth = 0;\r\n // declare the current calendar instance relies on GlobalEmitter. needed for garbage collection.\r\n // unneeded() is called in destroy.\r\n GlobalEmitter_1.default.needed();\r\n this.el = el;\r\n this.viewsByType = {};\r\n this.optionsManager = new OptionsManager_1.default(this, overrides);\r\n this.viewSpecManager = new ViewSpecManager_1.default(this.optionsManager, this);\r\n this.initMomentInternals(); // needs to happen after options hash initialized\r\n this.initCurrentDate();\r\n this.initEventManager();\r\n this.constraints = new Constraints_1.default(this.eventManager, this);\r\n this.constructed();\r\n }\r\n Calendar.prototype.constructed = function () {\r\n // useful for monkeypatching. used?\r\n };\r\n Calendar.prototype.getView = function () {\r\n return this.view;\r\n };\r\n Calendar.prototype.publiclyTrigger = function (name, triggerInfo) {\r\n var optHandler = this.opt(name);\r\n var context;\r\n var args;\r\n if ($.isPlainObject(triggerInfo)) {\r\n context = triggerInfo.context;\r\n args = triggerInfo.args;\r\n }\r\n else if ($.isArray(triggerInfo)) {\r\n args = triggerInfo;\r\n }\r\n if (context == null) {\r\n context = this.el[0]; // fallback context\r\n }\r\n if (!args) {\r\n args = [];\r\n }\r\n this.triggerWith(name, context, args); // Emitter's method\r\n if (optHandler) {\r\n return optHandler.apply(context, args);\r\n }\r\n };\r\n Calendar.prototype.hasPublicHandlers = function (name) {\r\n return this.hasHandlers(name) ||\r\n this.opt(name); // handler specified in options\r\n };\r\n // Options Public API\r\n // -----------------------------------------------------------------------------------------------------------------\r\n // public getter/setter\r\n Calendar.prototype.option = function (name, value) {\r\n var newOptionHash;\r\n if (typeof name === 'string') {\r\n if (value === undefined) { // getter\r\n return this.optionsManager.get(name);\r\n }\r\n else { // setter for individual option\r\n newOptionHash = {};\r\n newOptionHash[name] = value;\r\n this.optionsManager.add(newOptionHash);\r\n }\r\n }\r\n else if (typeof name === 'object') { // compound setter with object input\r\n this.optionsManager.add(name);\r\n }\r\n };\r\n // private getter\r\n Calendar.prototype.opt = function (name) {\r\n return this.optionsManager.get(name);\r\n };\r\n // View\r\n // -----------------------------------------------------------------------------------------------------------------\r\n // Given a view name for a custom view or a standard view, creates a ready-to-go View object\r\n Calendar.prototype.instantiateView = function (viewType) {\r\n var spec = this.viewSpecManager.getViewSpec(viewType);\r\n if (!spec) {\r\n throw new Error(\"View type \\\"\" + viewType + \"\\\" is not valid\");\r\n }\r\n return new spec['class'](this, spec);\r\n };\r\n // Returns a boolean about whether the view is okay to instantiate at some point\r\n Calendar.prototype.isValidViewType = function (viewType) {\r\n return Boolean(this.viewSpecManager.getViewSpec(viewType));\r\n };\r\n Calendar.prototype.changeView = function (viewName, dateOrRange) {\r\n if (dateOrRange) {\r\n if (dateOrRange.start && dateOrRange.end) { // a range\r\n this.optionsManager.recordOverrides({\r\n visibleRange: dateOrRange\r\n });\r\n }\r\n else { // a date\r\n this.currentDate = this.moment(dateOrRange).stripZone(); // just like gotoDate\r\n }\r\n }\r\n this.renderView(viewName);\r\n };\r\n // Forces navigation to a view for the given date.\r\n // `viewType` can be a specific view name or a generic one like \"week\" or \"day\".\r\n Calendar.prototype.zoomTo = function (newDate, viewType) {\r\n var spec;\r\n viewType = viewType || 'day'; // day is default zoom\r\n spec = this.viewSpecManager.getViewSpec(viewType) ||\r\n this.viewSpecManager.getUnitViewSpec(viewType);\r\n this.currentDate = newDate.clone();\r\n this.renderView(spec ? spec.type : null);\r\n };\r\n // Current Date\r\n // -----------------------------------------------------------------------------------------------------------------\r\n Calendar.prototype.initCurrentDate = function () {\r\n var defaultDateInput = this.opt('defaultDate');\r\n // compute the initial ambig-timezone date\r\n if (defaultDateInput != null) {\r\n this.currentDate = this.moment(defaultDateInput).stripZone();\r\n }\r\n else {\r\n this.currentDate = this.getNow(); // getNow already returns unzoned\r\n }\r\n };\r\n Calendar.prototype.prev = function () {\r\n var view = this.view;\r\n var prevInfo = view.dateProfileGenerator.buildPrev(view.get('dateProfile'));\r\n if (prevInfo.isValid) {\r\n this.currentDate = prevInfo.date;\r\n this.renderView();\r\n }\r\n };\r\n Calendar.prototype.next = function () {\r\n var view = this.view;\r\n var nextInfo = view.dateProfileGenerator.buildNext(view.get('dateProfile'));\r\n if (nextInfo.isValid) {\r\n this.currentDate = nextInfo.date;\r\n this.renderView();\r\n }\r\n };\r\n Calendar.prototype.prevYear = function () {\r\n this.currentDate.add(-1, 'years');\r\n this.renderView();\r\n };\r\n Calendar.prototype.nextYear = function () {\r\n this.currentDate.add(1, 'years');\r\n this.renderView();\r\n };\r\n Calendar.prototype.today = function () {\r\n this.currentDate = this.getNow(); // should deny like prev/next?\r\n this.renderView();\r\n };\r\n Calendar.prototype.gotoDate = function (zonedDateInput) {\r\n this.currentDate = this.moment(zonedDateInput).stripZone();\r\n this.renderView();\r\n };\r\n Calendar.prototype.incrementDate = function (delta) {\r\n this.currentDate.add(moment.duration(delta));\r\n this.renderView();\r\n };\r\n // for external API\r\n Calendar.prototype.getDate = function () {\r\n return this.applyTimezone(this.currentDate); // infuse the calendar's timezone\r\n };\r\n // Loading Triggering\r\n // -----------------------------------------------------------------------------------------------------------------\r\n // Should be called when any type of async data fetching begins\r\n Calendar.prototype.pushLoading = function () {\r\n if (!(this.loadingLevel++)) {\r\n this.publiclyTrigger('loading', [true, this.view]);\r\n }\r\n };\r\n // Should be called when any type of async data fetching completes\r\n Calendar.prototype.popLoading = function () {\r\n if (!(--this.loadingLevel)) {\r\n this.publiclyTrigger('loading', [false, this.view]);\r\n }\r\n };\r\n // High-level Rendering\r\n // -----------------------------------------------------------------------------------\r\n Calendar.prototype.render = function () {\r\n if (!this.contentEl) {\r\n this.initialRender();\r\n }\r\n else if (this.elementVisible()) {\r\n // mainly for the public API\r\n this.calcSize();\r\n this.updateViewSize();\r\n }\r\n };\r\n Calendar.prototype.initialRender = function () {\r\n var _this = this;\r\n var el = this.el;\r\n el.addClass('fc');\r\n // event delegation for nav links\r\n el.on('click.fc', 'a[data-goto]', function (ev) {\r\n var anchorEl = $(ev.currentTarget);\r\n var gotoOptions = anchorEl.data('goto'); // will automatically parse JSON\r\n var date = _this.moment(gotoOptions.date);\r\n var viewType = gotoOptions.type;\r\n // property like \"navLinkDayClick\". might be a string or a function\r\n var customAction = _this.view.opt('navLink' + util_1.capitaliseFirstLetter(viewType) + 'Click');\r\n if (typeof customAction === 'function') {\r\n customAction(date, ev);\r\n }\r\n else {\r\n if (typeof customAction === 'string') {\r\n viewType = customAction;\r\n }\r\n _this.zoomTo(date, viewType);\r\n }\r\n });\r\n // called immediately, and upon option change\r\n this.optionsManager.watch('settingTheme', ['?theme', '?themeSystem'], function (opts) {\r\n var themeClass = ThemeRegistry_1.getThemeSystemClass(opts.themeSystem || opts.theme);\r\n var theme = new themeClass(_this.optionsManager);\r\n var widgetClass = theme.getClass('widget');\r\n _this.theme = theme;\r\n if (widgetClass) {\r\n el.addClass(widgetClass);\r\n }\r\n }, function () {\r\n var widgetClass = _this.theme.getClass('widget');\r\n _this.theme = null;\r\n if (widgetClass) {\r\n el.removeClass(widgetClass);\r\n }\r\n });\r\n this.optionsManager.watch('settingBusinessHourGenerator', ['?businessHours'], function (deps) {\r\n _this.businessHourGenerator = new BusinessHourGenerator_1.default(deps.businessHours, _this);\r\n if (_this.view) {\r\n _this.view.set('businessHourGenerator', _this.businessHourGenerator);\r\n }\r\n }, function () {\r\n _this.businessHourGenerator = null;\r\n });\r\n // called immediately, and upon option change.\r\n // HACK: locale often affects isRTL, so we explicitly listen to that too.\r\n this.optionsManager.watch('applyingDirClasses', ['?isRTL', '?locale'], function (opts) {\r\n el.toggleClass('fc-ltr', !opts.isRTL);\r\n el.toggleClass('fc-rtl', opts.isRTL);\r\n });\r\n this.contentEl = $(\"
\").prependTo(el);\r\n this.initToolbars();\r\n this.renderHeader();\r\n this.renderFooter();\r\n this.renderView(this.opt('defaultView'));\r\n if (this.opt('handleWindowResize')) {\r\n $(window).resize(this.windowResizeProxy = util_1.debounce(// prevents rapid calls\r\n this.windowResize.bind(this), this.opt('windowResizeDelay')));\r\n }\r\n };\r\n Calendar.prototype.destroy = function () {\r\n if (this.view) {\r\n this.clearView();\r\n }\r\n this.toolbarsManager.proxyCall('removeElement');\r\n this.contentEl.remove();\r\n this.el.removeClass('fc fc-ltr fc-rtl');\r\n // removes theme-related root className\r\n this.optionsManager.unwatch('settingTheme');\r\n this.optionsManager.unwatch('settingBusinessHourGenerator');\r\n this.el.off('.fc'); // unbind nav link handlers\r\n if (this.windowResizeProxy) {\r\n $(window).unbind('resize', this.windowResizeProxy);\r\n this.windowResizeProxy = null;\r\n }\r\n GlobalEmitter_1.default.unneeded();\r\n };\r\n Calendar.prototype.elementVisible = function () {\r\n return this.el.is(':visible');\r\n };\r\n // Render Queue\r\n // -----------------------------------------------------------------------------------------------------------------\r\n Calendar.prototype.bindViewHandlers = function (view) {\r\n var _this = this;\r\n view.watch('titleForCalendar', ['title'], function (deps) {\r\n if (view === _this.view) { // hack\r\n _this.setToolbarsTitle(deps.title);\r\n }\r\n });\r\n view.watch('dateProfileForCalendar', ['dateProfile'], function (deps) {\r\n if (view === _this.view) { // hack\r\n _this.currentDate = deps.dateProfile.date; // might have been constrained by view dates\r\n _this.updateToolbarButtons(deps.dateProfile);\r\n }\r\n });\r\n };\r\n Calendar.prototype.unbindViewHandlers = function (view) {\r\n view.unwatch('titleForCalendar');\r\n view.unwatch('dateProfileForCalendar');\r\n };\r\n // View Rendering\r\n // -----------------------------------------------------------------------------------\r\n // Renders a view because of a date change, view-type change, or for the first time.\r\n // If not given a viewType, keep the current view but render different dates.\r\n // Accepts an optional scroll state to restore to.\r\n Calendar.prototype.renderView = function (viewType) {\r\n var oldView = this.view;\r\n var newView;\r\n this.freezeContentHeight();\r\n if (oldView && viewType && oldView.type !== viewType) {\r\n this.clearView();\r\n }\r\n // if viewType changed, or the view was never created, create a fresh view\r\n if (!this.view && viewType) {\r\n newView = this.view =\r\n this.viewsByType[viewType] ||\r\n (this.viewsByType[viewType] = this.instantiateView(viewType));\r\n this.bindViewHandlers(newView);\r\n newView.startBatchRender(); // so that setElement+setDate rendering are joined\r\n newView.setElement($(\"
\").appendTo(this.contentEl));\r\n this.toolbarsManager.proxyCall('activateButton', viewType);\r\n }\r\n if (this.view) {\r\n // prevent unnecessary change firing\r\n if (this.view.get('businessHourGenerator') !== this.businessHourGenerator) {\r\n this.view.set('businessHourGenerator', this.businessHourGenerator);\r\n }\r\n this.view.setDate(this.currentDate);\r\n if (newView) {\r\n newView.stopBatchRender();\r\n }\r\n }\r\n this.thawContentHeight();\r\n };\r\n // Unrenders the current view and reflects this change in the Header.\r\n // Unregsiters the `view`, but does not remove from viewByType hash.\r\n Calendar.prototype.clearView = function () {\r\n var currentView = this.view;\r\n this.toolbarsManager.proxyCall('deactivateButton', currentView.type);\r\n this.unbindViewHandlers(currentView);\r\n currentView.removeElement();\r\n currentView.unsetDate(); // so bindViewHandlers doesn't fire with old values next time\r\n this.view = null;\r\n };\r\n // Destroys the view, including the view object. Then, re-instantiates it and renders it.\r\n // Maintains the same scroll state.\r\n // TODO: maintain any other user-manipulated state.\r\n Calendar.prototype.reinitView = function () {\r\n var oldView = this.view;\r\n var scroll = oldView.queryScroll(); // wouldn't be so complicated if Calendar owned the scroll\r\n this.freezeContentHeight();\r\n this.clearView();\r\n this.calcSize();\r\n this.renderView(oldView.type); // needs the type to freshly render\r\n this.view.applyScroll(scroll);\r\n this.thawContentHeight();\r\n };\r\n // Resizing\r\n // -----------------------------------------------------------------------------------\r\n Calendar.prototype.getSuggestedViewHeight = function () {\r\n if (this.suggestedViewHeight == null) {\r\n this.calcSize();\r\n }\r\n return this.suggestedViewHeight;\r\n };\r\n Calendar.prototype.isHeightAuto = function () {\r\n return this.opt('contentHeight') === 'auto' || this.opt('height') === 'auto';\r\n };\r\n Calendar.prototype.updateViewSize = function (isResize) {\r\n if (isResize === void 0) { isResize = false; }\r\n var view = this.view;\r\n var scroll;\r\n if (!this.ignoreUpdateViewSize && view) {\r\n if (isResize) {\r\n this.calcSize();\r\n scroll = view.queryScroll();\r\n }\r\n this.ignoreUpdateViewSize++;\r\n view.updateSize(this.getSuggestedViewHeight(), this.isHeightAuto(), isResize);\r\n this.ignoreUpdateViewSize--;\r\n if (isResize) {\r\n view.applyScroll(scroll);\r\n }\r\n return true; // signal success\r\n }\r\n };\r\n Calendar.prototype.calcSize = function () {\r\n if (this.elementVisible()) {\r\n this._calcSize();\r\n }\r\n };\r\n Calendar.prototype._calcSize = function () {\r\n var contentHeightInput = this.opt('contentHeight');\r\n var heightInput = this.opt('height');\r\n if (typeof contentHeightInput === 'number') { // exists and not 'auto'\r\n this.suggestedViewHeight = contentHeightInput;\r\n }\r\n else if (typeof contentHeightInput === 'function') { // exists and is a function\r\n this.suggestedViewHeight = contentHeightInput();\r\n }\r\n else if (typeof heightInput === 'number') { // exists and not 'auto'\r\n this.suggestedViewHeight = heightInput - this.queryToolbarsHeight();\r\n }\r\n else if (typeof heightInput === 'function') { // exists and is a function\r\n this.suggestedViewHeight = heightInput() - this.queryToolbarsHeight();\r\n }\r\n else if (heightInput === 'parent') { // set to height of parent element\r\n this.suggestedViewHeight = this.el.parent().height() - this.queryToolbarsHeight();\r\n }\r\n else {\r\n this.suggestedViewHeight = Math.round(this.contentEl.width() /\r\n Math.max(this.opt('aspectRatio'), .5));\r\n }\r\n };\r\n Calendar.prototype.windowResize = function (ev) {\r\n if (\r\n // the purpose: so we don't process jqui \"resize\" events that have bubbled up\r\n // cast to any because .target, which is Element, can't be compared to window for some reason.\r\n ev.target === window &&\r\n this.view &&\r\n this.view.isDatesRendered) {\r\n if (this.updateViewSize(true)) { // isResize=true, returns true on success\r\n this.publiclyTrigger('windowResize', [this.view]);\r\n }\r\n }\r\n };\r\n /* Height \"Freezing\"\r\n -----------------------------------------------------------------------------*/\r\n Calendar.prototype.freezeContentHeight = function () {\r\n if (!(this.freezeContentHeightDepth++)) {\r\n this.forceFreezeContentHeight();\r\n }\r\n };\r\n Calendar.prototype.forceFreezeContentHeight = function () {\r\n this.contentEl.css({\r\n width: '100%',\r\n height: this.contentEl.height(),\r\n overflow: 'hidden'\r\n });\r\n };\r\n Calendar.prototype.thawContentHeight = function () {\r\n this.freezeContentHeightDepth--;\r\n // always bring back to natural height\r\n this.contentEl.css({\r\n width: '',\r\n height: '',\r\n overflow: ''\r\n });\r\n // but if there are future thaws, re-freeze\r\n if (this.freezeContentHeightDepth) {\r\n this.forceFreezeContentHeight();\r\n }\r\n };\r\n // Toolbar\r\n // -----------------------------------------------------------------------------------------------------------------\r\n Calendar.prototype.initToolbars = function () {\r\n this.header = new Toolbar_1.default(this, this.computeHeaderOptions());\r\n this.footer = new Toolbar_1.default(this, this.computeFooterOptions());\r\n this.toolbarsManager = new Iterator_1.default([this.header, this.footer]);\r\n };\r\n Calendar.prototype.computeHeaderOptions = function () {\r\n return {\r\n extraClasses: 'fc-header-toolbar',\r\n layout: this.opt('header')\r\n };\r\n };\r\n Calendar.prototype.computeFooterOptions = function () {\r\n return {\r\n extraClasses: 'fc-footer-toolbar',\r\n layout: this.opt('footer')\r\n };\r\n };\r\n // can be called repeatedly and Header will rerender\r\n Calendar.prototype.renderHeader = function () {\r\n var header = this.header;\r\n header.setToolbarOptions(this.computeHeaderOptions());\r\n header.render();\r\n if (header.el) {\r\n this.el.prepend(header.el);\r\n }\r\n };\r\n // can be called repeatedly and Footer will rerender\r\n Calendar.prototype.renderFooter = function () {\r\n var footer = this.footer;\r\n footer.setToolbarOptions(this.computeFooterOptions());\r\n footer.render();\r\n if (footer.el) {\r\n this.el.append(footer.el);\r\n }\r\n };\r\n Calendar.prototype.setToolbarsTitle = function (title) {\r\n this.toolbarsManager.proxyCall('updateTitle', title);\r\n };\r\n Calendar.prototype.updateToolbarButtons = function (dateProfile) {\r\n var now = this.getNow();\r\n var view = this.view;\r\n var todayInfo = view.dateProfileGenerator.build(now);\r\n var prevInfo = view.dateProfileGenerator.buildPrev(view.get('dateProfile'));\r\n var nextInfo = view.dateProfileGenerator.buildNext(view.get('dateProfile'));\r\n this.toolbarsManager.proxyCall((todayInfo.isValid && !dateProfile.currentUnzonedRange.containsDate(now)) ?\r\n 'enableButton' :\r\n 'disableButton', 'today');\r\n this.toolbarsManager.proxyCall(prevInfo.isValid ?\r\n 'enableButton' :\r\n 'disableButton', 'prev');\r\n this.toolbarsManager.proxyCall(nextInfo.isValid ?\r\n 'enableButton' :\r\n 'disableButton', 'next');\r\n };\r\n Calendar.prototype.queryToolbarsHeight = function () {\r\n return this.toolbarsManager.items.reduce(function (accumulator, toolbar) {\r\n var toolbarHeight = toolbar.el ? toolbar.el.outerHeight(true) : 0; // includes margin\r\n return accumulator + toolbarHeight;\r\n }, 0);\r\n };\r\n // Selection\r\n // -----------------------------------------------------------------------------------------------------------------\r\n // this public method receives start/end dates in any format, with any timezone\r\n Calendar.prototype.select = function (zonedStartInput, zonedEndInput) {\r\n this.view.select(this.buildSelectFootprint.apply(this, arguments));\r\n };\r\n Calendar.prototype.unselect = function () {\r\n if (this.view) {\r\n this.view.unselect();\r\n }\r\n };\r\n // Given arguments to the select method in the API, returns a span (unzoned start/end and other info)\r\n Calendar.prototype.buildSelectFootprint = function (zonedStartInput, zonedEndInput) {\r\n var start = this.moment(zonedStartInput).stripZone();\r\n var end;\r\n if (zonedEndInput) {\r\n end = this.moment(zonedEndInput).stripZone();\r\n }\r\n else if (start.hasTime()) {\r\n end = start.clone().add(this.defaultTimedEventDuration);\r\n }\r\n else {\r\n end = start.clone().add(this.defaultAllDayEventDuration);\r\n }\r\n return new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), !start.hasTime());\r\n };\r\n // Date Utils\r\n // -----------------------------------------------------------------------------------------------------------------\r\n Calendar.prototype.initMomentInternals = function () {\r\n var _this = this;\r\n this.defaultAllDayEventDuration = moment.duration(this.opt('defaultAllDayEventDuration'));\r\n this.defaultTimedEventDuration = moment.duration(this.opt('defaultTimedEventDuration'));\r\n // Called immediately, and when any of the options change.\r\n // Happens before any internal objects rebuild or rerender, because this is very core.\r\n this.optionsManager.watch('buildingMomentLocale', [\r\n '?locale', '?monthNames', '?monthNamesShort', '?dayNames', '?dayNamesShort',\r\n '?firstDay', '?weekNumberCalculation'\r\n ], function (opts) {\r\n var weekNumberCalculation = opts.weekNumberCalculation;\r\n var firstDay = opts.firstDay;\r\n var _week;\r\n // normalize\r\n if (weekNumberCalculation === 'iso') {\r\n weekNumberCalculation = 'ISO'; // normalize\r\n }\r\n var localeData = Object.create(// make a cheap copy\r\n locale_1.getMomentLocaleData(opts.locale) // will fall back to en\r\n );\r\n if (opts.monthNames) {\r\n localeData._months = opts.monthNames;\r\n }\r\n if (opts.monthNamesShort) {\r\n localeData._monthsShort = opts.monthNamesShort;\r\n }\r\n if (opts.dayNames) {\r\n localeData._weekdays = opts.dayNames;\r\n }\r\n if (opts.dayNamesShort) {\r\n localeData._weekdaysShort = opts.dayNamesShort;\r\n }\r\n if (firstDay == null && weekNumberCalculation === 'ISO') {\r\n firstDay = 1;\r\n }\r\n if (firstDay != null) {\r\n _week = Object.create(localeData._week); // _week: { dow: # }\r\n _week.dow = firstDay;\r\n localeData._week = _week;\r\n }\r\n if ( // whitelist certain kinds of input\r\n weekNumberCalculation === 'ISO' ||\r\n weekNumberCalculation === 'local' ||\r\n typeof weekNumberCalculation === 'function') {\r\n localeData._fullCalendar_weekCalc = weekNumberCalculation; // moment-ext will know what to do with it\r\n }\r\n _this.localeData = localeData;\r\n // If the internal current date object already exists, move to new locale.\r\n // We do NOT need to do this technique for event dates, because this happens when converting to \"segments\".\r\n if (_this.currentDate) {\r\n _this.localizeMoment(_this.currentDate); // sets to localeData\r\n }\r\n });\r\n };\r\n // Builds a moment using the settings of the current calendar: timezone and locale.\r\n // Accepts anything the vanilla moment() constructor accepts.\r\n Calendar.prototype.moment = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var mom;\r\n if (this.opt('timezone') === 'local') {\r\n mom = moment_ext_1.default.apply(null, args);\r\n // Force the moment to be local, because momentExt doesn't guarantee it.\r\n if (mom.hasTime()) { // don't give ambiguously-timed moments a local zone\r\n mom.local();\r\n }\r\n }\r\n else if (this.opt('timezone') === 'UTC') {\r\n mom = moment_ext_1.default.utc.apply(null, args); // process as UTC\r\n }\r\n else {\r\n mom = moment_ext_1.default.parseZone.apply(null, args); // let the input decide the zone\r\n }\r\n this.localizeMoment(mom); // TODO\r\n return mom;\r\n };\r\n Calendar.prototype.msToMoment = function (ms, forceAllDay) {\r\n var mom = moment_ext_1.default.utc(ms); // TODO: optimize by using Date.UTC\r\n if (forceAllDay) {\r\n mom.stripTime();\r\n }\r\n else {\r\n mom = this.applyTimezone(mom); // may or may not apply locale\r\n }\r\n this.localizeMoment(mom);\r\n return mom;\r\n };\r\n Calendar.prototype.msToUtcMoment = function (ms, forceAllDay) {\r\n var mom = moment_ext_1.default.utc(ms); // TODO: optimize by using Date.UTC\r\n if (forceAllDay) {\r\n mom.stripTime();\r\n }\r\n this.localizeMoment(mom);\r\n return mom;\r\n };\r\n // Updates the given moment's locale settings to the current calendar locale settings.\r\n Calendar.prototype.localizeMoment = function (mom) {\r\n mom._locale = this.localeData;\r\n };\r\n // Returns a boolean about whether or not the calendar knows how to calculate\r\n // the timezone offset of arbitrary dates in the current timezone.\r\n Calendar.prototype.getIsAmbigTimezone = function () {\r\n return this.opt('timezone') !== 'local' && this.opt('timezone') !== 'UTC';\r\n };\r\n // Returns a copy of the given date in the current timezone. Has no effect on dates without times.\r\n Calendar.prototype.applyTimezone = function (date) {\r\n if (!date.hasTime()) {\r\n return date.clone();\r\n }\r\n var zonedDate = this.moment(date.toArray());\r\n var timeAdjust = date.time().asMilliseconds() - zonedDate.time().asMilliseconds();\r\n var adjustedZonedDate;\r\n // Safari sometimes has problems with this coersion when near DST. Adjust if necessary. (bug #2396)\r\n if (timeAdjust) { // is the time result different than expected?\r\n adjustedZonedDate = zonedDate.clone().add(timeAdjust); // add milliseconds\r\n if (date.time().asMilliseconds() - adjustedZonedDate.time().asMilliseconds() === 0) { // does it match perfectly now?\r\n zonedDate = adjustedZonedDate;\r\n }\r\n }\r\n return zonedDate;\r\n };\r\n /*\r\n Assumes the footprint is non-open-ended.\r\n */\r\n Calendar.prototype.footprintToDateProfile = function (componentFootprint, ignoreEnd) {\r\n if (ignoreEnd === void 0) { ignoreEnd = false; }\r\n var start = moment_ext_1.default.utc(componentFootprint.unzonedRange.startMs);\r\n var end;\r\n if (!ignoreEnd) {\r\n end = moment_ext_1.default.utc(componentFootprint.unzonedRange.endMs);\r\n }\r\n if (componentFootprint.isAllDay) {\r\n start.stripTime();\r\n if (end) {\r\n end.stripTime();\r\n }\r\n }\r\n else {\r\n start = this.applyTimezone(start);\r\n if (end) {\r\n end = this.applyTimezone(end);\r\n }\r\n }\r\n this.localizeMoment(start);\r\n if (end) {\r\n this.localizeMoment(end);\r\n }\r\n return new EventDateProfile_1.default(start, end, this);\r\n };\r\n // Returns a moment for the current date, as defined by the client's computer or from the `now` option.\r\n // Will return an moment with an ambiguous timezone.\r\n Calendar.prototype.getNow = function () {\r\n var now = this.opt('now');\r\n if (typeof now === 'function') {\r\n now = now();\r\n }\r\n return this.moment(now).stripZone();\r\n };\r\n // Produces a human-readable string for the given duration.\r\n // Side-effect: changes the locale of the given duration.\r\n Calendar.prototype.humanizeDuration = function (duration) {\r\n return duration.locale(this.opt('locale')).humanize();\r\n };\r\n // will return `null` if invalid range\r\n Calendar.prototype.parseUnzonedRange = function (rangeInput) {\r\n var start = null;\r\n var end = null;\r\n if (rangeInput.start) {\r\n start = this.moment(rangeInput.start).stripZone();\r\n }\r\n if (rangeInput.end) {\r\n end = this.moment(rangeInput.end).stripZone();\r\n }\r\n if (!start && !end) {\r\n return null;\r\n }\r\n if (start && end && end.isBefore(start)) {\r\n return null;\r\n }\r\n return new UnzonedRange_1.default(start, end);\r\n };\r\n // Event-Date Utilities\r\n // -----------------------------------------------------------------------------------------------------------------\r\n Calendar.prototype.initEventManager = function () {\r\n var _this = this;\r\n var eventManager = new EventManager_1.default(this);\r\n var rawSources = this.opt('eventSources') || [];\r\n var singleRawSource = this.opt('events');\r\n this.eventManager = eventManager;\r\n if (singleRawSource) {\r\n rawSources.unshift(singleRawSource);\r\n }\r\n eventManager.on('release', function (eventsPayload) {\r\n _this.trigger('eventsReset', eventsPayload);\r\n });\r\n eventManager.freeze();\r\n rawSources.forEach(function (rawSource) {\r\n var source = EventSourceParser_1.default.parse(rawSource, _this);\r\n if (source) {\r\n eventManager.addSource(source);\r\n }\r\n });\r\n eventManager.thaw();\r\n };\r\n Calendar.prototype.requestEvents = function (start, end) {\r\n return this.eventManager.requestEvents(start, end, this.opt('timezone'), !this.opt('lazyFetching'));\r\n };\r\n // Get an event's normalized end date. If not present, calculate it from the defaults.\r\n Calendar.prototype.getEventEnd = function (event) {\r\n if (event.end) {\r\n return event.end.clone();\r\n }\r\n else {\r\n return this.getDefaultEventEnd(event.allDay, event.start);\r\n }\r\n };\r\n // Given an event's allDay status and start date, return what its fallback end date should be.\r\n // TODO: rename to computeDefaultEventEnd\r\n Calendar.prototype.getDefaultEventEnd = function (allDay, zonedStart) {\r\n var end = zonedStart.clone();\r\n if (allDay) {\r\n end.stripTime().add(this.defaultAllDayEventDuration);\r\n }\r\n else {\r\n end.add(this.defaultTimedEventDuration);\r\n }\r\n if (this.getIsAmbigTimezone()) {\r\n end.stripZone(); // we don't know what the tzo should be\r\n }\r\n return end;\r\n };\r\n // Public Events API\r\n // -----------------------------------------------------------------------------------------------------------------\r\n Calendar.prototype.rerenderEvents = function () {\r\n this.view.flash('displayingEvents');\r\n };\r\n Calendar.prototype.refetchEvents = function () {\r\n this.eventManager.refetchAllSources();\r\n };\r\n Calendar.prototype.renderEvents = function (eventInputs, isSticky) {\r\n this.eventManager.freeze();\r\n for (var i = 0; i < eventInputs.length; i++) {\r\n this.renderEvent(eventInputs[i], isSticky);\r\n }\r\n this.eventManager.thaw();\r\n };\r\n Calendar.prototype.renderEvent = function (eventInput, isSticky) {\r\n if (isSticky === void 0) { isSticky = false; }\r\n var eventManager = this.eventManager;\r\n var eventDef = EventDefParser_1.default.parse(eventInput, eventInput.source || eventManager.stickySource);\r\n if (eventDef) {\r\n eventManager.addEventDef(eventDef, isSticky);\r\n }\r\n };\r\n // legacyQuery operates on legacy event instance objects\r\n Calendar.prototype.removeEvents = function (legacyQuery) {\r\n var eventManager = this.eventManager;\r\n var legacyInstances = [];\r\n var idMap = {};\r\n var eventDef;\r\n var i;\r\n if (legacyQuery == null) { // shortcut for removing all\r\n eventManager.removeAllEventDefs(); // persist=true\r\n }\r\n else {\r\n eventManager.getEventInstances().forEach(function (eventInstance) {\r\n legacyInstances.push(eventInstance.toLegacy());\r\n });\r\n legacyInstances = filterLegacyEventInstances(legacyInstances, legacyQuery);\r\n // compute unique IDs\r\n for (i = 0; i < legacyInstances.length; i++) {\r\n eventDef = this.eventManager.getEventDefByUid(legacyInstances[i]._id);\r\n idMap[eventDef.id] = true;\r\n }\r\n eventManager.freeze();\r\n for (i in idMap) { // reuse `i` as an \"id\"\r\n eventManager.removeEventDefsById(i); // persist=true\r\n }\r\n eventManager.thaw();\r\n }\r\n };\r\n // legacyQuery operates on legacy event instance objects\r\n Calendar.prototype.clientEvents = function (legacyQuery) {\r\n var legacyEventInstances = [];\r\n this.eventManager.getEventInstances().forEach(function (eventInstance) {\r\n legacyEventInstances.push(eventInstance.toLegacy());\r\n });\r\n return filterLegacyEventInstances(legacyEventInstances, legacyQuery);\r\n };\r\n Calendar.prototype.updateEvents = function (eventPropsArray) {\r\n this.eventManager.freeze();\r\n for (var i = 0; i < eventPropsArray.length; i++) {\r\n this.updateEvent(eventPropsArray[i]);\r\n }\r\n this.eventManager.thaw();\r\n };\r\n Calendar.prototype.updateEvent = function (eventProps) {\r\n var eventDef = this.eventManager.getEventDefByUid(eventProps._id);\r\n var eventInstance;\r\n var eventDefMutation;\r\n if (eventDef instanceof SingleEventDef_1.default) {\r\n eventInstance = eventDef.buildInstance();\r\n eventDefMutation = EventDefMutation_1.default.createFromRawProps(eventInstance, eventProps, // raw props\r\n null // largeUnit -- who uses it?\r\n );\r\n this.eventManager.mutateEventsWithId(eventDef.id, eventDefMutation); // will release\r\n }\r\n };\r\n // Public Event Sources API\r\n // ------------------------------------------------------------------------------------\r\n Calendar.prototype.getEventSources = function () {\r\n return this.eventManager.otherSources.slice(); // clone\r\n };\r\n Calendar.prototype.getEventSourceById = function (id) {\r\n return this.eventManager.getSourceById(EventSource_1.default.normalizeId(id));\r\n };\r\n Calendar.prototype.addEventSource = function (sourceInput) {\r\n var source = EventSourceParser_1.default.parse(sourceInput, this);\r\n if (source) {\r\n this.eventManager.addSource(source);\r\n }\r\n };\r\n Calendar.prototype.removeEventSources = function (sourceMultiQuery) {\r\n var eventManager = this.eventManager;\r\n var sources;\r\n var i;\r\n if (sourceMultiQuery == null) {\r\n this.eventManager.removeAllSources();\r\n }\r\n else {\r\n sources = eventManager.multiQuerySources(sourceMultiQuery);\r\n eventManager.freeze();\r\n for (i = 0; i < sources.length; i++) {\r\n eventManager.removeSource(sources[i]);\r\n }\r\n eventManager.thaw();\r\n }\r\n };\r\n Calendar.prototype.removeEventSource = function (sourceQuery) {\r\n var eventManager = this.eventManager;\r\n var sources = eventManager.querySources(sourceQuery);\r\n var i;\r\n eventManager.freeze();\r\n for (i = 0; i < sources.length; i++) {\r\n eventManager.removeSource(sources[i]);\r\n }\r\n eventManager.thaw();\r\n };\r\n Calendar.prototype.refetchEventSources = function (sourceMultiQuery) {\r\n var eventManager = this.eventManager;\r\n var sources = eventManager.multiQuerySources(sourceMultiQuery);\r\n var i;\r\n eventManager.freeze();\r\n for (i = 0; i < sources.length; i++) {\r\n eventManager.refetchSource(sources[i]);\r\n }\r\n eventManager.thaw();\r\n };\r\n // not for internal use. use options module directly instead.\r\n Calendar.defaults = options_1.globalDefaults;\r\n Calendar.englishDefaults = options_1.englishDefaults;\r\n Calendar.rtlDefaults = options_1.rtlDefaults;\r\n return Calendar;\r\n}());\r\nexports.default = Calendar;\r\nEmitterMixin_1.default.mixInto(Calendar);\r\nListenerMixin_1.default.mixInto(Calendar);\r\nfunction filterLegacyEventInstances(legacyEventInstances, legacyQuery) {\r\n if (legacyQuery == null) {\r\n return legacyEventInstances;\r\n }\r\n else if ($.isFunction(legacyQuery)) {\r\n return legacyEventInstances.filter(legacyQuery);\r\n }\r\n else { // an event ID\r\n legacyQuery += ''; // normalize to string\r\n return legacyEventInstances.filter(function (legacyEventInstance) {\r\n // soft comparison because id not be normalized to string\r\n // tslint:disable-next-line\r\n return legacyEventInstance.id == legacyQuery ||\r\n legacyEventInstance._id === legacyQuery; // can specify internal id, but must exactly match\r\n });\r\n }\r\n}\r\n\n\n/***/ }),\n/* 233 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar exportHooks = __webpack_require__(18);\r\nvar util_1 = __webpack_require__(4);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar ExternalDropping = /** @class */ (function (_super) {\r\n tslib_1.__extends(ExternalDropping, _super);\r\n function ExternalDropping() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.isDragging = false; // jqui-dragging an external element? boolean\r\n return _this;\r\n }\r\n /*\r\n component impements:\r\n - eventRangesToEventFootprints\r\n - isEventInstanceGroupAllowed\r\n - isExternalInstanceGroupAllowed\r\n - renderDrag\r\n - unrenderDrag\r\n */\r\n ExternalDropping.prototype.end = function () {\r\n if (this.dragListener) {\r\n this.dragListener.endInteraction();\r\n }\r\n };\r\n ExternalDropping.prototype.bindToDocument = function () {\r\n this.listenTo($(document), {\r\n dragstart: this.handleDragStart,\r\n sortstart: this.handleDragStart // jqui\r\n });\r\n };\r\n ExternalDropping.prototype.unbindFromDocument = function () {\r\n this.stopListeningTo($(document));\r\n };\r\n // Called when a jQuery UI drag is initiated anywhere in the DOM\r\n ExternalDropping.prototype.handleDragStart = function (ev, ui) {\r\n var el;\r\n var accept;\r\n if (this.opt('droppable')) { // only listen if this setting is on\r\n el = $((ui ? ui.item : null) || ev.target);\r\n // Test that the dragged element passes the dropAccept selector or filter function.\r\n // FYI, the default is \"*\" (matches all)\r\n accept = this.opt('dropAccept');\r\n if ($.isFunction(accept) ? accept.call(el[0], el) : el.is(accept)) {\r\n if (!this.isDragging) { // prevent double-listening if fired twice\r\n this.listenToExternalDrag(el, ev, ui);\r\n }\r\n }\r\n }\r\n };\r\n // Called when a jQuery UI drag starts and it needs to be monitored for dropping\r\n ExternalDropping.prototype.listenToExternalDrag = function (el, ev, ui) {\r\n var _this = this;\r\n var component = this.component;\r\n var view = this.view;\r\n var meta = getDraggedElMeta(el); // extra data about event drop, including possible event to create\r\n var singleEventDef; // a null value signals an unsuccessful drag\r\n // listener that tracks mouse movement over date-associated pixel regions\r\n var dragListener = this.dragListener = new HitDragListener_1.default(component, {\r\n interactionStart: function () {\r\n _this.isDragging = true;\r\n },\r\n hitOver: function (hit) {\r\n var isAllowed = true;\r\n var hitFootprint = hit.component.getSafeHitFootprint(hit); // hit might not belong to this grid\r\n var mutatedEventInstanceGroup;\r\n if (hitFootprint) {\r\n singleEventDef = _this.computeExternalDrop(hitFootprint, meta);\r\n if (singleEventDef) {\r\n mutatedEventInstanceGroup = new EventInstanceGroup_1.default(singleEventDef.buildInstances());\r\n isAllowed = meta.eventProps ? // isEvent?\r\n component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup) :\r\n component.isExternalInstanceGroupAllowed(mutatedEventInstanceGroup);\r\n }\r\n else {\r\n isAllowed = false;\r\n }\r\n }\r\n else {\r\n isAllowed = false;\r\n }\r\n if (!isAllowed) {\r\n singleEventDef = null;\r\n util_1.disableCursor();\r\n }\r\n if (singleEventDef) {\r\n component.renderDrag(// called without a seg parameter\r\n component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, view.calendar)));\r\n }\r\n },\r\n hitOut: function () {\r\n singleEventDef = null; // signal unsuccessful\r\n },\r\n hitDone: function () {\r\n util_1.enableCursor();\r\n component.unrenderDrag();\r\n },\r\n interactionEnd: function (ev) {\r\n if (singleEventDef) { // element was dropped on a valid hit\r\n view.reportExternalDrop(singleEventDef, Boolean(meta.eventProps), // isEvent\r\n Boolean(meta.stick), // isSticky\r\n el, ev, ui);\r\n }\r\n _this.isDragging = false;\r\n _this.dragListener = null;\r\n }\r\n });\r\n dragListener.startDrag(ev); // start listening immediately\r\n };\r\n // Given a hit to be dropped upon, and misc data associated with the jqui drag (guaranteed to be a plain object),\r\n // returns the zoned start/end dates for the event that would result from the hypothetical drop. end might be null.\r\n // Returning a null value signals an invalid drop hit.\r\n // DOES NOT consider overlap/constraint.\r\n // Assumes both footprints are non-open-ended.\r\n ExternalDropping.prototype.computeExternalDrop = function (componentFootprint, meta) {\r\n var calendar = this.view.calendar;\r\n var start = moment_ext_1.default.utc(componentFootprint.unzonedRange.startMs).stripZone();\r\n var end;\r\n var eventDef;\r\n if (componentFootprint.isAllDay) {\r\n // if dropped on an all-day span, and element's metadata specified a time, set it\r\n if (meta.startTime) {\r\n start.time(meta.startTime);\r\n }\r\n else {\r\n start.stripTime();\r\n }\r\n }\r\n if (meta.duration) {\r\n end = start.clone().add(meta.duration);\r\n }\r\n start = calendar.applyTimezone(start);\r\n if (end) {\r\n end = calendar.applyTimezone(end);\r\n }\r\n eventDef = SingleEventDef_1.default.parse($.extend({}, meta.eventProps, {\r\n start: start,\r\n end: end\r\n }), new EventSource_1.default(calendar));\r\n return eventDef;\r\n };\r\n return ExternalDropping;\r\n}(Interaction_1.default));\r\nexports.default = ExternalDropping;\r\nListenerMixin_1.default.mixInto(ExternalDropping);\r\n/* External-Dragging-Element Data\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Require all HTML5 data-* attributes used by FullCalendar to have this prefix.\r\n// A value of '' will query attributes like data-event. A value of 'fc' will query attributes like data-fc-event.\r\nexportHooks.dataAttrPrefix = '';\r\n// Given a jQuery element that might represent a dragged FullCalendar event, returns an intermediate data structure\r\n// to be used for Event Object creation.\r\n// A defined `.eventProps`, even when empty, indicates that an event should be created.\r\nfunction getDraggedElMeta(el) {\r\n var prefix = exportHooks.dataAttrPrefix;\r\n var eventProps; // properties for creating the event, not related to date/time\r\n var startTime; // a Duration\r\n var duration;\r\n var stick;\r\n if (prefix) {\r\n prefix += '-';\r\n }\r\n eventProps = el.data(prefix + 'event') || null;\r\n if (eventProps) {\r\n if (typeof eventProps === 'object') {\r\n eventProps = $.extend({}, eventProps); // make a copy\r\n }\r\n else { // something like 1 or true. still signal event creation\r\n eventProps = {};\r\n }\r\n // pluck special-cased date/time properties\r\n startTime = eventProps.start;\r\n if (startTime == null) {\r\n startTime = eventProps.time;\r\n } // accept 'time' as well\r\n duration = eventProps.duration;\r\n stick = eventProps.stick;\r\n delete eventProps.start;\r\n delete eventProps.time;\r\n delete eventProps.duration;\r\n delete eventProps.stick;\r\n }\r\n // fallback to standalone attribute values for each of the date/time properties\r\n if (startTime == null) {\r\n startTime = el.data(prefix + 'start');\r\n }\r\n if (startTime == null) {\r\n startTime = el.data(prefix + 'time');\r\n } // accept 'time' as well\r\n if (duration == null) {\r\n duration = el.data(prefix + 'duration');\r\n }\r\n if (stick == null) {\r\n stick = el.data(prefix + 'stick');\r\n }\r\n // massage into correct data types\r\n startTime = startTime != null ? moment.duration(startTime) : null;\r\n duration = duration != null ? moment.duration(duration) : null;\r\n stick = Boolean(stick);\r\n return { eventProps: eventProps, startTime: startTime, duration: duration, stick: stick };\r\n}\r\n\n\n/***/ }),\n/* 234 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar EventResizing = /** @class */ (function (_super) {\r\n tslib_1.__extends(EventResizing, _super);\r\n /*\r\n component impements:\r\n - bindSegHandlerToEl\r\n - publiclyTrigger\r\n - diffDates\r\n - eventRangesToEventFootprints\r\n - isEventInstanceGroupAllowed\r\n - getSafeHitFootprint\r\n */\r\n function EventResizing(component, eventPointing) {\r\n var _this = _super.call(this, component) || this;\r\n _this.isResizing = false;\r\n _this.eventPointing = eventPointing;\r\n return _this;\r\n }\r\n EventResizing.prototype.end = function () {\r\n if (this.dragListener) {\r\n this.dragListener.endInteraction();\r\n }\r\n };\r\n EventResizing.prototype.bindToEl = function (el) {\r\n var component = this.component;\r\n component.bindSegHandlerToEl(el, 'mousedown', this.handleMouseDown.bind(this));\r\n component.bindSegHandlerToEl(el, 'touchstart', this.handleTouchStart.bind(this));\r\n };\r\n EventResizing.prototype.handleMouseDown = function (seg, ev) {\r\n if (this.component.canStartResize(seg, ev)) {\r\n this.buildDragListener(seg, $(ev.target).is('.fc-start-resizer'))\r\n .startInteraction(ev, { distance: 5 });\r\n }\r\n };\r\n EventResizing.prototype.handleTouchStart = function (seg, ev) {\r\n if (this.component.canStartResize(seg, ev)) {\r\n this.buildDragListener(seg, $(ev.target).is('.fc-start-resizer'))\r\n .startInteraction(ev);\r\n }\r\n };\r\n // Creates a listener that tracks the user as they resize an event segment.\r\n // Generic enough to work with any type of Grid.\r\n EventResizing.prototype.buildDragListener = function (seg, isStart) {\r\n var _this = this;\r\n var component = this.component;\r\n var view = this.view;\r\n var calendar = view.calendar;\r\n var eventManager = calendar.eventManager;\r\n var el = seg.el;\r\n var eventDef = seg.footprint.eventDef;\r\n var eventInstance = seg.footprint.eventInstance;\r\n var isDragging;\r\n var resizeMutation; // zoned event date properties. falsy if invalid resize\r\n // Tracks mouse movement over the *grid's* coordinate map\r\n var dragListener = this.dragListener = new HitDragListener_1.default(component, {\r\n scroll: this.opt('dragScroll'),\r\n subjectEl: el,\r\n interactionStart: function () {\r\n isDragging = false;\r\n },\r\n dragStart: function (ev) {\r\n isDragging = true;\r\n // ensure a mouseout on the manipulated event has been reported\r\n _this.eventPointing.handleMouseout(seg, ev);\r\n _this.segResizeStart(seg, ev);\r\n },\r\n hitOver: function (hit, isOrig, origHit) {\r\n var isAllowed = true;\r\n var origHitFootprint = component.getSafeHitFootprint(origHit);\r\n var hitFootprint = component.getSafeHitFootprint(hit);\r\n var mutatedEventInstanceGroup;\r\n if (origHitFootprint && hitFootprint) {\r\n resizeMutation = isStart ?\r\n _this.computeEventStartResizeMutation(origHitFootprint, hitFootprint, seg.footprint) :\r\n _this.computeEventEndResizeMutation(origHitFootprint, hitFootprint, seg.footprint);\r\n if (resizeMutation) {\r\n mutatedEventInstanceGroup = eventManager.buildMutatedEventInstanceGroup(eventDef.id, resizeMutation);\r\n isAllowed = component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup);\r\n }\r\n else {\r\n isAllowed = false;\r\n }\r\n }\r\n else {\r\n isAllowed = false;\r\n }\r\n if (!isAllowed) {\r\n resizeMutation = null;\r\n util_1.disableCursor();\r\n }\r\n else if (resizeMutation.isEmpty()) {\r\n // no change. (FYI, event dates might have zones)\r\n resizeMutation = null;\r\n }\r\n if (resizeMutation) {\r\n view.hideEventsWithId(seg.footprint.eventDef.id);\r\n view.renderEventResize(component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, calendar)), seg);\r\n }\r\n },\r\n hitOut: function () {\r\n resizeMutation = null;\r\n },\r\n hitDone: function () {\r\n view.unrenderEventResize(seg);\r\n view.showEventsWithId(seg.footprint.eventDef.id);\r\n util_1.enableCursor();\r\n },\r\n interactionEnd: function (ev) {\r\n if (isDragging) {\r\n _this.segResizeStop(seg, ev);\r\n }\r\n if (resizeMutation) { // valid date to resize to?\r\n // no need to re-show original, will rerender all anyways. esp important if eventRenderWait\r\n view.reportEventResize(eventInstance, resizeMutation, el, ev);\r\n }\r\n _this.dragListener = null;\r\n }\r\n });\r\n return dragListener;\r\n };\r\n // Called before event segment resizing starts\r\n EventResizing.prototype.segResizeStart = function (seg, ev) {\r\n this.isResizing = true;\r\n this.component.publiclyTrigger('eventResizeStart', {\r\n context: seg.el[0],\r\n args: [\r\n seg.footprint.getEventLegacy(),\r\n ev,\r\n {},\r\n this.view\r\n ]\r\n });\r\n };\r\n // Called after event segment resizing stops\r\n EventResizing.prototype.segResizeStop = function (seg, ev) {\r\n this.isResizing = false;\r\n this.component.publiclyTrigger('eventResizeStop', {\r\n context: seg.el[0],\r\n args: [\r\n seg.footprint.getEventLegacy(),\r\n ev,\r\n {},\r\n this.view\r\n ]\r\n });\r\n };\r\n // Returns new date-information for an event segment being resized from its start\r\n EventResizing.prototype.computeEventStartResizeMutation = function (startFootprint, endFootprint, origEventFootprint) {\r\n var origRange = origEventFootprint.componentFootprint.unzonedRange;\r\n var startDelta = this.component.diffDates(endFootprint.unzonedRange.getStart(), startFootprint.unzonedRange.getStart());\r\n var dateMutation;\r\n var eventDefMutation;\r\n if (origRange.getStart().add(startDelta) < origRange.getEnd()) {\r\n dateMutation = new EventDefDateMutation_1.default();\r\n dateMutation.setStartDelta(startDelta);\r\n eventDefMutation = new EventDefMutation_1.default();\r\n eventDefMutation.setDateMutation(dateMutation);\r\n return eventDefMutation;\r\n }\r\n return false;\r\n };\r\n // Returns new date-information for an event segment being resized from its end\r\n EventResizing.prototype.computeEventEndResizeMutation = function (startFootprint, endFootprint, origEventFootprint) {\r\n var origRange = origEventFootprint.componentFootprint.unzonedRange;\r\n var endDelta = this.component.diffDates(endFootprint.unzonedRange.getEnd(), startFootprint.unzonedRange.getEnd());\r\n var dateMutation;\r\n var eventDefMutation;\r\n if (origRange.getEnd().add(endDelta) > origRange.getStart()) {\r\n dateMutation = new EventDefDateMutation_1.default();\r\n dateMutation.setEndDelta(endDelta);\r\n eventDefMutation = new EventDefMutation_1.default();\r\n eventDefMutation.setDateMutation(dateMutation);\r\n return eventDefMutation;\r\n }\r\n return false;\r\n };\r\n return EventResizing;\r\n}(Interaction_1.default));\r\nexports.default = EventResizing;\r\n\n\n/***/ }),\n/* 235 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nvar DragListener_1 = __webpack_require__(59);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar MouseFollower_1 = __webpack_require__(226);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar EventDragging = /** @class */ (function (_super) {\r\n tslib_1.__extends(EventDragging, _super);\r\n /*\r\n component implements:\r\n - bindSegHandlerToEl\r\n - publiclyTrigger\r\n - diffDates\r\n - eventRangesToEventFootprints\r\n - isEventInstanceGroupAllowed\r\n */\r\n function EventDragging(component, eventPointing) {\r\n var _this = _super.call(this, component) || this;\r\n _this.isDragging = false;\r\n _this.eventPointing = eventPointing;\r\n return _this;\r\n }\r\n EventDragging.prototype.end = function () {\r\n if (this.dragListener) {\r\n this.dragListener.endInteraction();\r\n }\r\n };\r\n EventDragging.prototype.getSelectionDelay = function () {\r\n var delay = this.opt('eventLongPressDelay');\r\n if (delay == null) {\r\n delay = this.opt('longPressDelay'); // fallback\r\n }\r\n return delay;\r\n };\r\n EventDragging.prototype.bindToEl = function (el) {\r\n var component = this.component;\r\n component.bindSegHandlerToEl(el, 'mousedown', this.handleMousedown.bind(this));\r\n component.bindSegHandlerToEl(el, 'touchstart', this.handleTouchStart.bind(this));\r\n };\r\n EventDragging.prototype.handleMousedown = function (seg, ev) {\r\n if (!this.component.shouldIgnoreMouse() &&\r\n this.component.canStartDrag(seg, ev)) {\r\n this.buildDragListener(seg).startInteraction(ev, { distance: 5 });\r\n }\r\n };\r\n EventDragging.prototype.handleTouchStart = function (seg, ev) {\r\n var component = this.component;\r\n var settings = {\r\n delay: this.view.isEventDefSelected(seg.footprint.eventDef) ? // already selected?\r\n 0 : this.getSelectionDelay()\r\n };\r\n if (component.canStartDrag(seg, ev)) {\r\n this.buildDragListener(seg).startInteraction(ev, settings);\r\n }\r\n else if (component.canStartSelection(seg, ev)) {\r\n this.buildSelectListener(seg).startInteraction(ev, settings);\r\n }\r\n };\r\n // seg isn't draggable, but let's use a generic DragListener\r\n // simply for the delay, so it can be selected.\r\n // Has side effect of setting/unsetting `dragListener`\r\n EventDragging.prototype.buildSelectListener = function (seg) {\r\n var _this = this;\r\n var view = this.view;\r\n var eventDef = seg.footprint.eventDef;\r\n var eventInstance = seg.footprint.eventInstance; // null for inverse-background events\r\n if (this.dragListener) {\r\n return this.dragListener;\r\n }\r\n var dragListener = this.dragListener = new DragListener_1.default({\r\n dragStart: function (ev) {\r\n if (dragListener.isTouch &&\r\n !view.isEventDefSelected(eventDef) &&\r\n eventInstance) {\r\n // if not previously selected, will fire after a delay. then, select the event\r\n view.selectEventInstance(eventInstance);\r\n }\r\n },\r\n interactionEnd: function (ev) {\r\n _this.dragListener = null;\r\n }\r\n });\r\n return dragListener;\r\n };\r\n // Builds a listener that will track user-dragging on an event segment.\r\n // Generic enough to work with any type of Grid.\r\n // Has side effect of setting/unsetting `dragListener`\r\n EventDragging.prototype.buildDragListener = function (seg) {\r\n var _this = this;\r\n var component = this.component;\r\n var view = this.view;\r\n var calendar = view.calendar;\r\n var eventManager = calendar.eventManager;\r\n var el = seg.el;\r\n var eventDef = seg.footprint.eventDef;\r\n var eventInstance = seg.footprint.eventInstance; // null for inverse-background events\r\n var isDragging;\r\n var mouseFollower; // A clone of the original element that will move with the mouse\r\n var eventDefMutation;\r\n if (this.dragListener) {\r\n return this.dragListener;\r\n }\r\n // Tracks mouse movement over the *view's* coordinate map. Allows dragging and dropping between subcomponents\r\n // of the view.\r\n var dragListener = this.dragListener = new HitDragListener_1.default(view, {\r\n scroll: this.opt('dragScroll'),\r\n subjectEl: el,\r\n subjectCenter: true,\r\n interactionStart: function (ev) {\r\n seg.component = component; // for renderDrag\r\n isDragging = false;\r\n mouseFollower = new MouseFollower_1.default(seg.el, {\r\n additionalClass: 'fc-dragging',\r\n parentEl: view.el,\r\n opacity: dragListener.isTouch ? null : _this.opt('dragOpacity'),\r\n revertDuration: _this.opt('dragRevertDuration'),\r\n zIndex: 2 // one above the .fc-view\r\n });\r\n mouseFollower.hide(); // don't show until we know this is a real drag\r\n mouseFollower.start(ev);\r\n },\r\n dragStart: function (ev) {\r\n if (dragListener.isTouch &&\r\n !view.isEventDefSelected(eventDef) &&\r\n eventInstance) {\r\n // if not previously selected, will fire after a delay. then, select the event\r\n view.selectEventInstance(eventInstance);\r\n }\r\n isDragging = true;\r\n // ensure a mouseout on the manipulated event has been reported\r\n _this.eventPointing.handleMouseout(seg, ev);\r\n _this.segDragStart(seg, ev);\r\n view.hideEventsWithId(seg.footprint.eventDef.id);\r\n },\r\n hitOver: function (hit, isOrig, origHit) {\r\n var isAllowed = true;\r\n var origFootprint;\r\n var footprint;\r\n var mutatedEventInstanceGroup;\r\n // starting hit could be forced (DayGrid.limit)\r\n if (seg.hit) {\r\n origHit = seg.hit;\r\n }\r\n // hit might not belong to this grid, so query origin grid\r\n origFootprint = origHit.component.getSafeHitFootprint(origHit);\r\n footprint = hit.component.getSafeHitFootprint(hit);\r\n if (origFootprint && footprint) {\r\n eventDefMutation = _this.computeEventDropMutation(origFootprint, footprint, eventDef);\r\n if (eventDefMutation) {\r\n mutatedEventInstanceGroup = eventManager.buildMutatedEventInstanceGroup(eventDef.id, eventDefMutation);\r\n isAllowed = component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup);\r\n }\r\n else {\r\n isAllowed = false;\r\n }\r\n }\r\n else {\r\n isAllowed = false;\r\n }\r\n if (!isAllowed) {\r\n eventDefMutation = null;\r\n util_1.disableCursor();\r\n }\r\n // if a valid drop location, have the subclass render a visual indication\r\n if (eventDefMutation &&\r\n view.renderDrag(// truthy if rendered something\r\n component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, calendar)), seg, dragListener.isTouch)) {\r\n mouseFollower.hide(); // if the subclass is already using a mock event \"helper\", hide our own\r\n }\r\n else {\r\n mouseFollower.show(); // otherwise, have the helper follow the mouse (no snapping)\r\n }\r\n if (isOrig) {\r\n // needs to have moved hits to be a valid drop\r\n eventDefMutation = null;\r\n }\r\n },\r\n hitOut: function () {\r\n view.unrenderDrag(seg); // unrender whatever was done in renderDrag\r\n mouseFollower.show(); // show in case we are moving out of all hits\r\n eventDefMutation = null;\r\n },\r\n hitDone: function () {\r\n util_1.enableCursor();\r\n },\r\n interactionEnd: function (ev) {\r\n delete seg.component; // prevent side effects\r\n // do revert animation if hasn't changed. calls a callback when finished (whether animation or not)\r\n mouseFollower.stop(!eventDefMutation, function () {\r\n if (isDragging) {\r\n view.unrenderDrag(seg);\r\n _this.segDragStop(seg, ev);\r\n }\r\n view.showEventsWithId(seg.footprint.eventDef.id);\r\n if (eventDefMutation) {\r\n // no need to re-show original, will rerender all anyways. esp important if eventRenderWait\r\n view.reportEventDrop(eventInstance, eventDefMutation, el, ev);\r\n }\r\n });\r\n _this.dragListener = null;\r\n }\r\n });\r\n return dragListener;\r\n };\r\n // Called before event segment dragging starts\r\n EventDragging.prototype.segDragStart = function (seg, ev) {\r\n this.isDragging = true;\r\n this.component.publiclyTrigger('eventDragStart', {\r\n context: seg.el[0],\r\n args: [\r\n seg.footprint.getEventLegacy(),\r\n ev,\r\n {},\r\n this.view\r\n ]\r\n });\r\n };\r\n // Called after event segment dragging stops\r\n EventDragging.prototype.segDragStop = function (seg, ev) {\r\n this.isDragging = false;\r\n this.component.publiclyTrigger('eventDragStop', {\r\n context: seg.el[0],\r\n args: [\r\n seg.footprint.getEventLegacy(),\r\n ev,\r\n {},\r\n this.view\r\n ]\r\n });\r\n };\r\n // DOES NOT consider overlap/constraint\r\n EventDragging.prototype.computeEventDropMutation = function (startFootprint, endFootprint, eventDef) {\r\n var eventDefMutation = new EventDefMutation_1.default();\r\n eventDefMutation.setDateMutation(this.computeEventDateMutation(startFootprint, endFootprint));\r\n return eventDefMutation;\r\n };\r\n EventDragging.prototype.computeEventDateMutation = function (startFootprint, endFootprint) {\r\n var date0 = startFootprint.unzonedRange.getStart();\r\n var date1 = endFootprint.unzonedRange.getStart();\r\n var clearEnd = false;\r\n var forceTimed = false;\r\n var forceAllDay = false;\r\n var dateDelta;\r\n var dateMutation;\r\n if (startFootprint.isAllDay !== endFootprint.isAllDay) {\r\n clearEnd = true;\r\n if (endFootprint.isAllDay) {\r\n forceAllDay = true;\r\n date0.stripTime();\r\n }\r\n else {\r\n forceTimed = true;\r\n }\r\n }\r\n dateDelta = this.component.diffDates(date1, date0);\r\n dateMutation = new EventDefDateMutation_1.default();\r\n dateMutation.clearEnd = clearEnd;\r\n dateMutation.forceTimed = forceTimed;\r\n dateMutation.forceAllDay = forceAllDay;\r\n dateMutation.setDateDelta(dateDelta);\r\n return dateMutation;\r\n };\r\n return EventDragging;\r\n}(Interaction_1.default));\r\nexports.default = EventDragging;\r\n\n\n/***/ }),\n/* 236 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar DateSelecting = /** @class */ (function (_super) {\r\n tslib_1.__extends(DateSelecting, _super);\r\n /*\r\n component must implement:\r\n - bindDateHandlerToEl\r\n - getSafeHitFootprint\r\n - renderHighlight\r\n - unrenderHighlight\r\n */\r\n function DateSelecting(component) {\r\n var _this = _super.call(this, component) || this;\r\n _this.dragListener = _this.buildDragListener();\r\n return _this;\r\n }\r\n DateSelecting.prototype.end = function () {\r\n this.dragListener.endInteraction();\r\n };\r\n DateSelecting.prototype.getDelay = function () {\r\n var delay = this.opt('selectLongPressDelay');\r\n if (delay == null) {\r\n delay = this.opt('longPressDelay'); // fallback\r\n }\r\n return delay;\r\n };\r\n DateSelecting.prototype.bindToEl = function (el) {\r\n var _this = this;\r\n var component = this.component;\r\n var dragListener = this.dragListener;\r\n component.bindDateHandlerToEl(el, 'mousedown', function (ev) {\r\n if (_this.opt('selectable') && !component.shouldIgnoreMouse()) {\r\n dragListener.startInteraction(ev, {\r\n distance: _this.opt('selectMinDistance')\r\n });\r\n }\r\n });\r\n component.bindDateHandlerToEl(el, 'touchstart', function (ev) {\r\n if (_this.opt('selectable') && !component.shouldIgnoreTouch()) {\r\n dragListener.startInteraction(ev, {\r\n delay: _this.getDelay()\r\n });\r\n }\r\n });\r\n util_1.preventSelection(el);\r\n };\r\n // Creates a listener that tracks the user's drag across day elements, for day selecting.\r\n DateSelecting.prototype.buildDragListener = function () {\r\n var _this = this;\r\n var component = this.component;\r\n var selectionFootprint; // null if invalid selection\r\n var dragListener = new HitDragListener_1.default(component, {\r\n scroll: this.opt('dragScroll'),\r\n interactionStart: function () {\r\n selectionFootprint = null;\r\n },\r\n dragStart: function (ev) {\r\n _this.view.unselect(ev); // since we could be rendering a new selection, we want to clear any old one\r\n },\r\n hitOver: function (hit, isOrig, origHit) {\r\n var origHitFootprint;\r\n var hitFootprint;\r\n if (origHit) { // click needs to have started on a hit\r\n origHitFootprint = component.getSafeHitFootprint(origHit);\r\n hitFootprint = component.getSafeHitFootprint(hit);\r\n if (origHitFootprint && hitFootprint) {\r\n selectionFootprint = _this.computeSelection(origHitFootprint, hitFootprint);\r\n }\r\n else {\r\n selectionFootprint = null;\r\n }\r\n if (selectionFootprint) {\r\n component.renderSelectionFootprint(selectionFootprint);\r\n }\r\n else if (selectionFootprint === false) {\r\n util_1.disableCursor();\r\n }\r\n }\r\n },\r\n hitOut: function () {\r\n selectionFootprint = null;\r\n component.unrenderSelection();\r\n },\r\n hitDone: function () {\r\n util_1.enableCursor();\r\n },\r\n interactionEnd: function (ev, isCancelled) {\r\n if (!isCancelled && selectionFootprint) {\r\n // the selection will already have been rendered. just report it\r\n _this.view.reportSelection(selectionFootprint, ev);\r\n }\r\n }\r\n });\r\n return dragListener;\r\n };\r\n // Given the first and last date-spans of a selection, returns another date-span object.\r\n // Subclasses can override and provide additional data in the span object. Will be passed to renderSelectionFootprint().\r\n // Will return false if the selection is invalid and this should be indicated to the user.\r\n // Will return null/undefined if a selection invalid but no error should be reported.\r\n DateSelecting.prototype.computeSelection = function (footprint0, footprint1) {\r\n var wholeFootprint = this.computeSelectionFootprint(footprint0, footprint1);\r\n if (wholeFootprint && !this.isSelectionFootprintAllowed(wholeFootprint)) {\r\n return false;\r\n }\r\n return wholeFootprint;\r\n };\r\n // Given two spans, must return the combination of the two.\r\n // TODO: do this separation of concerns (combining VS validation) for event dnd/resize too.\r\n // Assumes both footprints are non-open-ended.\r\n DateSelecting.prototype.computeSelectionFootprint = function (footprint0, footprint1) {\r\n var ms = [\r\n footprint0.unzonedRange.startMs,\r\n footprint0.unzonedRange.endMs,\r\n footprint1.unzonedRange.startMs,\r\n footprint1.unzonedRange.endMs\r\n ];\r\n ms.sort(util_1.compareNumbers);\r\n return new ComponentFootprint_1.default(new UnzonedRange_1.default(ms[0], ms[3]), footprint0.isAllDay);\r\n };\r\n DateSelecting.prototype.isSelectionFootprintAllowed = function (componentFootprint) {\r\n return this.component.dateProfile.validUnzonedRange.containsRange(componentFootprint.unzonedRange) &&\r\n this.view.calendar.constraints.isSelectionFootprintAllowed(componentFootprint);\r\n };\r\n return DateSelecting;\r\n}(Interaction_1.default));\r\nexports.default = DateSelecting;\r\n\n\n/***/ }),\n/* 237 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar DateClicking = /** @class */ (function (_super) {\r\n tslib_1.__extends(DateClicking, _super);\r\n /*\r\n component must implement:\r\n - bindDateHandlerToEl\r\n - getSafeHitFootprint\r\n - getHitEl\r\n */\r\n function DateClicking(component) {\r\n var _this = _super.call(this, component) || this;\r\n _this.dragListener = _this.buildDragListener();\r\n return _this;\r\n }\r\n DateClicking.prototype.end = function () {\r\n this.dragListener.endInteraction();\r\n };\r\n DateClicking.prototype.bindToEl = function (el) {\r\n var component = this.component;\r\n var dragListener = this.dragListener;\r\n component.bindDateHandlerToEl(el, 'mousedown', function (ev) {\r\n if (!component.shouldIgnoreMouse()) {\r\n dragListener.startInteraction(ev);\r\n }\r\n });\r\n component.bindDateHandlerToEl(el, 'touchstart', function (ev) {\r\n if (!component.shouldIgnoreTouch()) {\r\n dragListener.startInteraction(ev);\r\n }\r\n });\r\n };\r\n // Creates a listener that tracks the user's drag across day elements, for day clicking.\r\n DateClicking.prototype.buildDragListener = function () {\r\n var _this = this;\r\n var component = this.component;\r\n var dayClickHit; // null if invalid dayClick\r\n var dragListener = new HitDragListener_1.default(component, {\r\n scroll: this.opt('dragScroll'),\r\n interactionStart: function () {\r\n dayClickHit = dragListener.origHit;\r\n },\r\n hitOver: function (hit, isOrig, origHit) {\r\n // if user dragged to another cell at any point, it can no longer be a dayClick\r\n if (!isOrig) {\r\n dayClickHit = null;\r\n }\r\n },\r\n hitOut: function () {\r\n dayClickHit = null;\r\n },\r\n interactionEnd: function (ev, isCancelled) {\r\n var componentFootprint;\r\n if (!isCancelled && dayClickHit) {\r\n componentFootprint = component.getSafeHitFootprint(dayClickHit);\r\n if (componentFootprint) {\r\n _this.view.triggerDayClick(componentFootprint, component.getHitEl(dayClickHit), ev);\r\n }\r\n }\r\n }\r\n });\r\n // because dragListener won't be called with any time delay, \"dragging\" will begin immediately,\r\n // which will kill any touchmoving/scrolling. Prevent this.\r\n dragListener.shouldCancelTouchScroll = false;\r\n dragListener.scrollAlwaysKills = true;\r\n return dragListener;\r\n };\r\n return DateClicking;\r\n}(Interaction_1.default));\r\nexports.default = DateClicking;\r\n\n\n/***/ }),\n/* 238 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Scroller_1 = __webpack_require__(41);\r\nvar View_1 = __webpack_require__(43);\r\nvar TimeGrid_1 = __webpack_require__(239);\r\nvar DayGrid_1 = __webpack_require__(66);\r\nvar AGENDA_ALL_DAY_EVENT_LIMIT = 5;\r\nvar agendaTimeGridMethods;\r\nvar agendaDayGridMethods;\r\n/* An abstract class for all agenda-related views. Displays one more columns with time slots running vertically.\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Is a manager for the TimeGrid subcomponent and possibly the DayGrid subcomponent (if allDaySlot is on).\r\n// Responsible for managing width/height.\r\nvar AgendaView = /** @class */ (function (_super) {\r\n tslib_1.__extends(AgendaView, _super);\r\n function AgendaView(calendar, viewSpec) {\r\n var _this = _super.call(this, calendar, viewSpec) || this;\r\n _this.usesMinMaxTime = true; // indicates that minTime/maxTime affects rendering\r\n _this.timeGrid = _this.instantiateTimeGrid();\r\n _this.addChild(_this.timeGrid);\r\n if (_this.opt('allDaySlot')) { // should we display the \"all-day\" area?\r\n _this.dayGrid = _this.instantiateDayGrid(); // the all-day subcomponent of this view\r\n _this.addChild(_this.dayGrid);\r\n }\r\n _this.scroller = new Scroller_1.default({\r\n overflowX: 'hidden',\r\n overflowY: 'auto'\r\n });\r\n return _this;\r\n }\r\n // Instantiates the TimeGrid object this view needs. Draws from this.timeGridClass\r\n AgendaView.prototype.instantiateTimeGrid = function () {\r\n var timeGrid = new this.timeGridClass(this);\r\n util_1.copyOwnProps(agendaTimeGridMethods, timeGrid);\r\n return timeGrid;\r\n };\r\n // Instantiates the DayGrid object this view might need. Draws from this.dayGridClass\r\n AgendaView.prototype.instantiateDayGrid = function () {\r\n var dayGrid = new this.dayGridClass(this);\r\n util_1.copyOwnProps(agendaDayGridMethods, dayGrid);\r\n return dayGrid;\r\n };\r\n /* Rendering\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n AgendaView.prototype.renderSkeleton = function () {\r\n var timeGridWrapEl;\r\n var timeGridEl;\r\n this.el.addClass('fc-agenda-view').html(this.renderSkeletonHtml());\r\n this.scroller.render();\r\n timeGridWrapEl = this.scroller.el.addClass('fc-time-grid-container');\r\n timeGridEl = $('
').appendTo(timeGridWrapEl);\r\n this.el.find('.fc-body > tr > td').append(timeGridWrapEl);\r\n this.timeGrid.headContainerEl = this.el.find('.fc-head-container');\r\n this.timeGrid.setElement(timeGridEl);\r\n if (this.dayGrid) {\r\n this.dayGrid.setElement(this.el.find('.fc-day-grid'));\r\n // have the day-grid extend it's coordinate area over the
dividing the two grids\r\n this.dayGrid.bottomCoordPadding = this.dayGrid.el.next('hr').outerHeight();\r\n }\r\n };\r\n AgendaView.prototype.unrenderSkeleton = function () {\r\n this.timeGrid.removeElement();\r\n if (this.dayGrid) {\r\n this.dayGrid.removeElement();\r\n }\r\n this.scroller.destroy();\r\n };\r\n // Builds the HTML skeleton for the view.\r\n // The day-grid and time-grid components will render inside containers defined by this HTML.\r\n AgendaView.prototype.renderSkeletonHtml = function () {\r\n var theme = this.calendar.theme;\r\n return '' +\r\n '' +\r\n (this.opt('columnHeader') ?\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' :\r\n '') +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '
 
' +\r\n (this.dayGrid ?\r\n '
' +\r\n '
' :\r\n '') +\r\n '
';\r\n };\r\n // Generates an HTML attribute string for setting the width of the axis, if it is known\r\n AgendaView.prototype.axisStyleAttr = function () {\r\n if (this.axisWidth != null) {\r\n return 'style=\"width:' + this.axisWidth + 'px\"';\r\n }\r\n return '';\r\n };\r\n /* Now Indicator\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n AgendaView.prototype.getNowIndicatorUnit = function () {\r\n return this.timeGrid.getNowIndicatorUnit();\r\n };\r\n /* Dimensions\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Adjusts the vertical dimensions of the view to the specified values\r\n AgendaView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n var eventLimit;\r\n var scrollerHeight;\r\n var scrollbarWidths;\r\n _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n // make all axis cells line up, and record the width so newly created axis cells will have it\r\n this.axisWidth = util_1.matchCellWidths(this.el.find('.fc-axis'));\r\n // hack to give the view some height prior to timeGrid's columns being rendered\r\n // TODO: separate setting height from scroller VS timeGrid.\r\n if (!this.timeGrid.colEls) {\r\n if (!isAuto) {\r\n scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n this.scroller.setHeight(scrollerHeight);\r\n }\r\n return;\r\n }\r\n // set of fake row elements that must compensate when scroller has scrollbars\r\n var noScrollRowEls = this.el.find('.fc-row:not(.fc-scroller *)');\r\n // reset all dimensions back to the original state\r\n this.timeGrid.bottomRuleEl.hide(); // .show() will be called later if this
is necessary\r\n this.scroller.clear(); // sets height to 'auto' and clears overflow\r\n util_1.uncompensateScroll(noScrollRowEls);\r\n // limit number of events in the all-day area\r\n if (this.dayGrid) {\r\n this.dayGrid.removeSegPopover(); // kill the \"more\" popover if displayed\r\n eventLimit = this.opt('eventLimit');\r\n if (eventLimit && typeof eventLimit !== 'number') {\r\n eventLimit = AGENDA_ALL_DAY_EVENT_LIMIT; // make sure \"auto\" goes to a real number\r\n }\r\n if (eventLimit) {\r\n this.dayGrid.limitRows(eventLimit);\r\n }\r\n }\r\n if (!isAuto) { // should we force dimensions of the scroll container?\r\n scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n this.scroller.setHeight(scrollerHeight);\r\n scrollbarWidths = this.scroller.getScrollbarWidths();\r\n if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?\r\n // make the all-day and header rows lines up\r\n util_1.compensateScroll(noScrollRowEls, scrollbarWidths);\r\n // the scrollbar compensation might have changed text flow, which might affect height, so recalculate\r\n // and reapply the desired height to the scroller.\r\n scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n this.scroller.setHeight(scrollerHeight);\r\n }\r\n // guarantees the same scrollbar widths\r\n this.scroller.lockOverflow(scrollbarWidths);\r\n // if there's any space below the slats, show the horizontal rule.\r\n // this won't cause any new overflow, because lockOverflow already called.\r\n if (this.timeGrid.getTotalSlatHeight() < scrollerHeight) {\r\n this.timeGrid.bottomRuleEl.show();\r\n }\r\n }\r\n };\r\n // given a desired total height of the view, returns what the height of the scroller should be\r\n AgendaView.prototype.computeScrollerHeight = function (totalHeight) {\r\n return totalHeight -\r\n util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\r\n };\r\n /* Scroll\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Computes the initial pre-configured scroll state prior to allowing the user to change it\r\n AgendaView.prototype.computeInitialDateScroll = function () {\r\n var scrollTime = moment.duration(this.opt('scrollTime'));\r\n var top = this.timeGrid.computeTimeTop(scrollTime);\r\n // zoom can give weird floating-point values. rather scroll a little bit further\r\n top = Math.ceil(top);\r\n if (top) {\r\n top++; // to overcome top border that slots beyond the first have. looks better\r\n }\r\n return { top: top };\r\n };\r\n AgendaView.prototype.queryDateScroll = function () {\r\n return { top: this.scroller.getScrollTop() };\r\n };\r\n AgendaView.prototype.applyDateScroll = function (scroll) {\r\n if (scroll.top !== undefined) {\r\n this.scroller.setScrollTop(scroll.top);\r\n }\r\n };\r\n /* Hit Areas\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // forward all hit-related method calls to the grids (dayGrid might not be defined)\r\n AgendaView.prototype.getHitFootprint = function (hit) {\r\n // TODO: hit.component is set as a hack to identify where the hit came from\r\n return hit.component.getHitFootprint(hit);\r\n };\r\n AgendaView.prototype.getHitEl = function (hit) {\r\n // TODO: hit.component is set as a hack to identify where the hit came from\r\n return hit.component.getHitEl(hit);\r\n };\r\n /* Event Rendering\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n AgendaView.prototype.executeEventRender = function (eventsPayload) {\r\n var dayEventsPayload = {};\r\n var timedEventsPayload = {};\r\n var id;\r\n var eventInstanceGroup;\r\n // separate the events into all-day and timed\r\n for (id in eventsPayload) {\r\n eventInstanceGroup = eventsPayload[id];\r\n if (eventInstanceGroup.getEventDef().isAllDay()) {\r\n dayEventsPayload[id] = eventInstanceGroup;\r\n }\r\n else {\r\n timedEventsPayload[id] = eventInstanceGroup;\r\n }\r\n }\r\n this.timeGrid.executeEventRender(timedEventsPayload);\r\n if (this.dayGrid) {\r\n this.dayGrid.executeEventRender(dayEventsPayload);\r\n }\r\n };\r\n /* Dragging/Resizing Routing\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // A returned value of `true` signals that a mock \"helper\" event has been rendered.\r\n AgendaView.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n var groups = groupEventFootprintsByAllDay(eventFootprints);\r\n var renderedHelper = false;\r\n renderedHelper = this.timeGrid.renderDrag(groups.timed, seg, isTouch);\r\n if (this.dayGrid) {\r\n renderedHelper = this.dayGrid.renderDrag(groups.allDay, seg, isTouch) || renderedHelper;\r\n }\r\n return renderedHelper;\r\n };\r\n AgendaView.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n var groups = groupEventFootprintsByAllDay(eventFootprints);\r\n this.timeGrid.renderEventResize(groups.timed, seg, isTouch);\r\n if (this.dayGrid) {\r\n this.dayGrid.renderEventResize(groups.allDay, seg, isTouch);\r\n }\r\n };\r\n /* Selection\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Renders a visual indication of a selection\r\n AgendaView.prototype.renderSelectionFootprint = function (componentFootprint) {\r\n if (!componentFootprint.isAllDay) {\r\n this.timeGrid.renderSelectionFootprint(componentFootprint);\r\n }\r\n else if (this.dayGrid) {\r\n this.dayGrid.renderSelectionFootprint(componentFootprint);\r\n }\r\n };\r\n return AgendaView;\r\n}(View_1.default));\r\nexports.default = AgendaView;\r\nAgendaView.prototype.timeGridClass = TimeGrid_1.default;\r\nAgendaView.prototype.dayGridClass = DayGrid_1.default;\r\n// Will customize the rendering behavior of the AgendaView's timeGrid\r\nagendaTimeGridMethods = {\r\n // Generates the HTML that will go before the day-of week header cells\r\n renderHeadIntroHtml: function () {\r\n var view = this.view;\r\n var calendar = view.calendar;\r\n var weekStart = calendar.msToUtcMoment(this.dateProfile.renderUnzonedRange.startMs, true);\r\n var weekText;\r\n if (this.opt('weekNumbers')) {\r\n weekText = weekStart.format(this.opt('smallWeekFormat'));\r\n return '' +\r\n '' +\r\n view.buildGotoAnchorHtml(// aside from link, important for matchCellWidths\r\n { date: weekStart, type: 'week', forceOff: this.colCnt > 1 }, util_1.htmlEscape(weekText) // inner HTML\r\n ) +\r\n '';\r\n }\r\n else {\r\n return '';\r\n }\r\n },\r\n // Generates the HTML that goes before the bg of the TimeGrid slot area. Long vertical column.\r\n renderBgIntroHtml: function () {\r\n var view = this.view;\r\n return '';\r\n },\r\n // Generates the HTML that goes before all other types of cells.\r\n // Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.\r\n renderIntroHtml: function () {\r\n var view = this.view;\r\n return '';\r\n }\r\n};\r\n// Will customize the rendering behavior of the AgendaView's dayGrid\r\nagendaDayGridMethods = {\r\n // Generates the HTML that goes before the all-day cells\r\n renderBgIntroHtml: function () {\r\n var view = this.view;\r\n return '' +\r\n '' +\r\n '' + // needed for matchCellWidths\r\n view.getAllDayHtml() +\r\n '' +\r\n '';\r\n },\r\n // Generates the HTML that goes before all other types of cells.\r\n // Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.\r\n renderIntroHtml: function () {\r\n var view = this.view;\r\n return '';\r\n }\r\n};\r\nfunction groupEventFootprintsByAllDay(eventFootprints) {\r\n var allDay = [];\r\n var timed = [];\r\n var i;\r\n for (i = 0; i < eventFootprints.length; i++) {\r\n if (eventFootprints[i].componentFootprint.isAllDay) {\r\n allDay.push(eventFootprints[i]);\r\n }\r\n else {\r\n timed.push(eventFootprints[i]);\r\n }\r\n }\r\n return { allDay: allDay, timed: timed };\r\n}\r\n\n\n/***/ }),\n/* 239 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nvar BusinessHourRenderer_1 = __webpack_require__(61);\r\nvar StandardInteractionsMixin_1 = __webpack_require__(65);\r\nvar DayTableMixin_1 = __webpack_require__(60);\r\nvar CoordCache_1 = __webpack_require__(58);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar TimeGridEventRenderer_1 = __webpack_require__(240);\r\nvar TimeGridHelperRenderer_1 = __webpack_require__(241);\r\nvar TimeGridFillRenderer_1 = __webpack_require__(242);\r\n/* A component that renders one or more columns of vertical time slots\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// We mixin DayTable, even though there is only a single row of days\r\n// potential nice values for the slot-duration and interval-duration\r\n// from largest to smallest\r\nvar AGENDA_STOCK_SUB_DURATIONS = [\r\n { hours: 1 },\r\n { minutes: 30 },\r\n { minutes: 15 },\r\n { seconds: 30 },\r\n { seconds: 15 }\r\n];\r\nvar TimeGrid = /** @class */ (function (_super) {\r\n tslib_1.__extends(TimeGrid, _super);\r\n function TimeGrid(view) {\r\n var _this = _super.call(this, view) || this;\r\n _this.processOptions();\r\n return _this;\r\n }\r\n // Slices up the given span (unzoned start/end with other misc data) into an array of segments\r\n TimeGrid.prototype.componentFootprintToSegs = function (componentFootprint) {\r\n var segs = this.sliceRangeByTimes(componentFootprint.unzonedRange);\r\n var i;\r\n for (i = 0; i < segs.length; i++) {\r\n if (this.isRTL) {\r\n segs[i].col = this.daysPerRow - 1 - segs[i].dayIndex;\r\n }\r\n else {\r\n segs[i].col = segs[i].dayIndex;\r\n }\r\n }\r\n return segs;\r\n };\r\n /* Date Handling\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n TimeGrid.prototype.sliceRangeByTimes = function (unzonedRange) {\r\n var segs = [];\r\n var segRange;\r\n var dayIndex;\r\n for (dayIndex = 0; dayIndex < this.daysPerRow; dayIndex++) {\r\n segRange = unzonedRange.intersect(this.dayRanges[dayIndex]);\r\n if (segRange) {\r\n segs.push({\r\n startMs: segRange.startMs,\r\n endMs: segRange.endMs,\r\n isStart: segRange.isStart,\r\n isEnd: segRange.isEnd,\r\n dayIndex: dayIndex\r\n });\r\n }\r\n }\r\n return segs;\r\n };\r\n /* Options\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Parses various options into properties of this object\r\n TimeGrid.prototype.processOptions = function () {\r\n var slotDuration = this.opt('slotDuration');\r\n var snapDuration = this.opt('snapDuration');\r\n var input;\r\n slotDuration = moment.duration(slotDuration);\r\n snapDuration = snapDuration ? moment.duration(snapDuration) : slotDuration;\r\n this.slotDuration = slotDuration;\r\n this.snapDuration = snapDuration;\r\n this.snapsPerSlot = slotDuration / snapDuration; // TODO: ensure an integer multiple?\r\n // might be an array value (for TimelineView).\r\n // if so, getting the most granular entry (the last one probably).\r\n input = this.opt('slotLabelFormat');\r\n if ($.isArray(input)) {\r\n input = input[input.length - 1];\r\n }\r\n this.labelFormat = input ||\r\n this.opt('smallTimeFormat'); // the computed default\r\n input = this.opt('slotLabelInterval');\r\n this.labelInterval = input ?\r\n moment.duration(input) :\r\n this.computeLabelInterval(slotDuration);\r\n };\r\n // Computes an automatic value for slotLabelInterval\r\n TimeGrid.prototype.computeLabelInterval = function (slotDuration) {\r\n var i;\r\n var labelInterval;\r\n var slotsPerLabel;\r\n // find the smallest stock label interval that results in more than one slots-per-label\r\n for (i = AGENDA_STOCK_SUB_DURATIONS.length - 1; i >= 0; i--) {\r\n labelInterval = moment.duration(AGENDA_STOCK_SUB_DURATIONS[i]);\r\n slotsPerLabel = util_1.divideDurationByDuration(labelInterval, slotDuration);\r\n if (util_1.isInt(slotsPerLabel) && slotsPerLabel > 1) {\r\n return labelInterval;\r\n }\r\n }\r\n return moment.duration(slotDuration); // fall back. clone\r\n };\r\n /* Date Rendering\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n TimeGrid.prototype.renderDates = function (dateProfile) {\r\n this.dateProfile = dateProfile;\r\n this.updateDayTable();\r\n this.renderSlats();\r\n this.renderColumns();\r\n };\r\n TimeGrid.prototype.unrenderDates = function () {\r\n // this.unrenderSlats(); // don't need this because repeated .html() calls clear\r\n this.unrenderColumns();\r\n };\r\n TimeGrid.prototype.renderSkeleton = function () {\r\n var theme = this.view.calendar.theme;\r\n this.el.html('
' +\r\n '
' +\r\n '
');\r\n this.bottomRuleEl = this.el.find('hr');\r\n };\r\n TimeGrid.prototype.renderSlats = function () {\r\n var theme = this.view.calendar.theme;\r\n this.slatContainerEl = this.el.find('> .fc-slats')\r\n .html(// avoids needing ::unrenderSlats()\r\n '' +\r\n this.renderSlatRowHtml() +\r\n '
');\r\n this.slatEls = this.slatContainerEl.find('tr');\r\n this.slatCoordCache = new CoordCache_1.default({\r\n els: this.slatEls,\r\n isVertical: true\r\n });\r\n };\r\n // Generates the HTML for the horizontal \"slats\" that run width-wise. Has a time axis on a side. Depends on RTL.\r\n TimeGrid.prototype.renderSlatRowHtml = function () {\r\n var view = this.view;\r\n var calendar = view.calendar;\r\n var theme = calendar.theme;\r\n var isRTL = this.isRTL;\r\n var dateProfile = this.dateProfile;\r\n var html = '';\r\n var slotTime = moment.duration(+dateProfile.minTime); // wish there was .clone() for durations\r\n var slotIterator = moment.duration(0);\r\n var slotDate; // will be on the view's first day, but we only care about its time\r\n var isLabeled;\r\n var axisHtml;\r\n // Calculate the time for each slot\r\n while (slotTime < dateProfile.maxTime) {\r\n slotDate = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.startMs).time(slotTime);\r\n isLabeled = util_1.isInt(util_1.divideDurationByDuration(slotIterator, this.labelInterval));\r\n axisHtml =\r\n '' +\r\n (isLabeled ?\r\n '' + // for matchCellWidths\r\n util_1.htmlEscape(slotDate.format(this.labelFormat)) +\r\n '' :\r\n '') +\r\n '';\r\n html +=\r\n '' +\r\n (!isRTL ? axisHtml : '') +\r\n '' +\r\n (isRTL ? axisHtml : '') +\r\n '';\r\n slotTime.add(this.slotDuration);\r\n slotIterator.add(this.slotDuration);\r\n }\r\n return html;\r\n };\r\n TimeGrid.prototype.renderColumns = function () {\r\n var dateProfile = this.dateProfile;\r\n var theme = this.view.calendar.theme;\r\n this.dayRanges = this.dayDates.map(function (dayDate) {\r\n return new UnzonedRange_1.default(dayDate.clone().add(dateProfile.minTime), dayDate.clone().add(dateProfile.maxTime));\r\n });\r\n if (this.headContainerEl) {\r\n this.headContainerEl.html(this.renderHeadHtml());\r\n }\r\n this.el.find('> .fc-bg').html('' +\r\n this.renderBgTrHtml(0) + // row=0\r\n '
');\r\n this.colEls = this.el.find('.fc-day, .fc-disabled-day');\r\n this.colCoordCache = new CoordCache_1.default({\r\n els: this.colEls,\r\n isHorizontal: true\r\n });\r\n this.renderContentSkeleton();\r\n };\r\n TimeGrid.prototype.unrenderColumns = function () {\r\n this.unrenderContentSkeleton();\r\n };\r\n /* Content Skeleton\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Renders the DOM that the view's content will live in\r\n TimeGrid.prototype.renderContentSkeleton = function () {\r\n var cellHtml = '';\r\n var i;\r\n var skeletonEl;\r\n for (i = 0; i < this.colCnt; i++) {\r\n cellHtml +=\r\n '' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '';\r\n }\r\n skeletonEl = this.contentSkeletonEl = $('
' +\r\n '' +\r\n '' + cellHtml + '' +\r\n '
' +\r\n '
');\r\n this.colContainerEls = skeletonEl.find('.fc-content-col');\r\n this.helperContainerEls = skeletonEl.find('.fc-helper-container');\r\n this.fgContainerEls = skeletonEl.find('.fc-event-container:not(.fc-helper-container)');\r\n this.bgContainerEls = skeletonEl.find('.fc-bgevent-container');\r\n this.highlightContainerEls = skeletonEl.find('.fc-highlight-container');\r\n this.businessContainerEls = skeletonEl.find('.fc-business-container');\r\n this.bookendCells(skeletonEl.find('tr')); // TODO: do this on string level\r\n this.el.append(skeletonEl);\r\n };\r\n TimeGrid.prototype.unrenderContentSkeleton = function () {\r\n if (this.contentSkeletonEl) { // defensive :(\r\n this.contentSkeletonEl.remove();\r\n this.contentSkeletonEl = null;\r\n this.colContainerEls = null;\r\n this.helperContainerEls = null;\r\n this.fgContainerEls = null;\r\n this.bgContainerEls = null;\r\n this.highlightContainerEls = null;\r\n this.businessContainerEls = null;\r\n }\r\n };\r\n // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's col\r\n TimeGrid.prototype.groupSegsByCol = function (segs) {\r\n var segsByCol = [];\r\n var i;\r\n for (i = 0; i < this.colCnt; i++) {\r\n segsByCol.push([]);\r\n }\r\n for (i = 0; i < segs.length; i++) {\r\n segsByCol[segs[i].col].push(segs[i]);\r\n }\r\n return segsByCol;\r\n };\r\n // Given segments grouped by column, insert the segments' elements into a parallel array of container\r\n // elements, each living within a column.\r\n TimeGrid.prototype.attachSegsByCol = function (segsByCol, containerEls) {\r\n var col;\r\n var segs;\r\n var i;\r\n for (col = 0; col < this.colCnt; col++) { // iterate each column grouping\r\n segs = segsByCol[col];\r\n for (i = 0; i < segs.length; i++) {\r\n containerEls.eq(col).append(segs[i].el);\r\n }\r\n }\r\n };\r\n /* Now Indicator\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n TimeGrid.prototype.getNowIndicatorUnit = function () {\r\n return 'minute'; // will refresh on the minute\r\n };\r\n TimeGrid.prototype.renderNowIndicator = function (date) {\r\n // HACK: if date columns not ready for some reason (scheduler)\r\n if (!this.colContainerEls) {\r\n return;\r\n }\r\n // seg system might be overkill, but it handles scenario where line needs to be rendered\r\n // more than once because of columns with the same date (resources columns for example)\r\n var segs = this.componentFootprintToSegs(new ComponentFootprint_1.default(new UnzonedRange_1.default(date, date.valueOf() + 1), // protect against null range\r\n false // all-day\r\n ));\r\n var top = this.computeDateTop(date, date);\r\n var nodes = [];\r\n var i;\r\n // render lines within the columns\r\n for (i = 0; i < segs.length; i++) {\r\n nodes.push($('
')\r\n .css('top', top)\r\n .appendTo(this.colContainerEls.eq(segs[i].col))[0]);\r\n }\r\n // render an arrow over the axis\r\n if (segs.length > 0) { // is the current time in view?\r\n nodes.push($('
')\r\n .css('top', top)\r\n .appendTo(this.el.find('.fc-content-skeleton'))[0]);\r\n }\r\n this.nowIndicatorEls = $(nodes);\r\n };\r\n TimeGrid.prototype.unrenderNowIndicator = function () {\r\n if (this.nowIndicatorEls) {\r\n this.nowIndicatorEls.remove();\r\n this.nowIndicatorEls = null;\r\n }\r\n };\r\n /* Coordinates\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n TimeGrid.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n this.slatCoordCache.build();\r\n if (isResize) {\r\n this.updateSegVerticals([].concat(this.eventRenderer.getSegs(), this.businessSegs || []));\r\n }\r\n };\r\n TimeGrid.prototype.getTotalSlatHeight = function () {\r\n return this.slatContainerEl.outerHeight();\r\n };\r\n // Computes the top coordinate, relative to the bounds of the grid, of the given date.\r\n // `ms` can be a millisecond UTC time OR a UTC moment.\r\n // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.\r\n TimeGrid.prototype.computeDateTop = function (ms, startOfDayDate) {\r\n return this.computeTimeTop(moment.duration(ms - startOfDayDate.clone().stripTime()));\r\n };\r\n // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).\r\n TimeGrid.prototype.computeTimeTop = function (time) {\r\n var len = this.slatEls.length;\r\n var dateProfile = this.dateProfile;\r\n var slatCoverage = (time - dateProfile.minTime) / this.slotDuration; // floating-point value of # of slots covered\r\n var slatIndex;\r\n var slatRemainder;\r\n // compute a floating-point number for how many slats should be progressed through.\r\n // from 0 to number of slats (inclusive)\r\n // constrained because minTime/maxTime might be customized.\r\n slatCoverage = Math.max(0, slatCoverage);\r\n slatCoverage = Math.min(len, slatCoverage);\r\n // an integer index of the furthest whole slat\r\n // from 0 to number slats (*exclusive*, so len-1)\r\n slatIndex = Math.floor(slatCoverage);\r\n slatIndex = Math.min(slatIndex, len - 1);\r\n // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.\r\n // could be 1.0 if slatCoverage is covering *all* the slots\r\n slatRemainder = slatCoverage - slatIndex;\r\n return this.slatCoordCache.getTopPosition(slatIndex) +\r\n this.slatCoordCache.getHeight(slatIndex) * slatRemainder;\r\n };\r\n // Refreshes the CSS top/bottom coordinates for each segment element.\r\n // Works when called after initial render, after a window resize/zoom for example.\r\n TimeGrid.prototype.updateSegVerticals = function (segs) {\r\n this.computeSegVerticals(segs);\r\n this.assignSegVerticals(segs);\r\n };\r\n // For each segment in an array, computes and assigns its top and bottom properties\r\n TimeGrid.prototype.computeSegVerticals = function (segs) {\r\n var eventMinHeight = this.opt('agendaEventMinHeight');\r\n var i;\r\n var seg;\r\n var dayDate;\r\n for (i = 0; i < segs.length; i++) {\r\n seg = segs[i];\r\n dayDate = this.dayDates[seg.dayIndex];\r\n seg.top = this.computeDateTop(seg.startMs, dayDate);\r\n seg.bottom = Math.max(seg.top + eventMinHeight, this.computeDateTop(seg.endMs, dayDate));\r\n }\r\n };\r\n // Given segments that already have their top/bottom properties computed, applies those values to\r\n // the segments' elements.\r\n TimeGrid.prototype.assignSegVerticals = function (segs) {\r\n var i;\r\n var seg;\r\n for (i = 0; i < segs.length; i++) {\r\n seg = segs[i];\r\n seg.el.css(this.generateSegVerticalCss(seg));\r\n }\r\n };\r\n // Generates an object with CSS properties for the top/bottom coordinates of a segment element\r\n TimeGrid.prototype.generateSegVerticalCss = function (seg) {\r\n return {\r\n top: seg.top,\r\n bottom: -seg.bottom // flipped because needs to be space beyond bottom edge of event container\r\n };\r\n };\r\n /* Hit System\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n TimeGrid.prototype.prepareHits = function () {\r\n this.colCoordCache.build();\r\n this.slatCoordCache.build();\r\n };\r\n TimeGrid.prototype.releaseHits = function () {\r\n this.colCoordCache.clear();\r\n // NOTE: don't clear slatCoordCache because we rely on it for computeTimeTop\r\n };\r\n TimeGrid.prototype.queryHit = function (leftOffset, topOffset) {\r\n var snapsPerSlot = this.snapsPerSlot;\r\n var colCoordCache = this.colCoordCache;\r\n var slatCoordCache = this.slatCoordCache;\r\n if (colCoordCache.isLeftInBounds(leftOffset) && slatCoordCache.isTopInBounds(topOffset)) {\r\n var colIndex = colCoordCache.getHorizontalIndex(leftOffset);\r\n var slatIndex = slatCoordCache.getVerticalIndex(topOffset);\r\n if (colIndex != null && slatIndex != null) {\r\n var slatTop = slatCoordCache.getTopOffset(slatIndex);\r\n var slatHeight = slatCoordCache.getHeight(slatIndex);\r\n var partial = (topOffset - slatTop) / slatHeight; // floating point number between 0 and 1\r\n var localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat\r\n var snapIndex = slatIndex * snapsPerSlot + localSnapIndex;\r\n var snapTop = slatTop + (localSnapIndex / snapsPerSlot) * slatHeight;\r\n var snapBottom = slatTop + ((localSnapIndex + 1) / snapsPerSlot) * slatHeight;\r\n return {\r\n col: colIndex,\r\n snap: snapIndex,\r\n component: this,\r\n left: colCoordCache.getLeftOffset(colIndex),\r\n right: colCoordCache.getRightOffset(colIndex),\r\n top: snapTop,\r\n bottom: snapBottom\r\n };\r\n }\r\n }\r\n };\r\n TimeGrid.prototype.getHitFootprint = function (hit) {\r\n var start = this.getCellDate(0, hit.col); // row=0\r\n var time = this.computeSnapTime(hit.snap); // pass in the snap-index\r\n var end;\r\n start.time(time);\r\n end = start.clone().add(this.snapDuration);\r\n return new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), false // all-day?\r\n );\r\n };\r\n // Given a row number of the grid, representing a \"snap\", returns a time (Duration) from its start-of-day\r\n TimeGrid.prototype.computeSnapTime = function (snapIndex) {\r\n return moment.duration(this.dateProfile.minTime + this.snapDuration * snapIndex);\r\n };\r\n TimeGrid.prototype.getHitEl = function (hit) {\r\n return this.colEls.eq(hit.col);\r\n };\r\n /* Event Drag Visualization\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Renders a visual indication of an event being dragged over the specified date(s).\r\n // A returned value of `true` signals that a mock \"helper\" event has been rendered.\r\n TimeGrid.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n var i;\r\n if (seg) { // if there is event information for this drag, render a helper event\r\n if (eventFootprints.length) {\r\n this.helperRenderer.renderEventDraggingFootprints(eventFootprints, seg, isTouch);\r\n // signal that a helper has been rendered\r\n return true;\r\n }\r\n }\r\n else { // otherwise, just render a highlight\r\n for (i = 0; i < eventFootprints.length; i++) {\r\n this.renderHighlight(eventFootprints[i].componentFootprint);\r\n }\r\n }\r\n };\r\n // Unrenders any visual indication of an event being dragged\r\n TimeGrid.prototype.unrenderDrag = function () {\r\n this.unrenderHighlight();\r\n this.helperRenderer.unrender();\r\n };\r\n /* Event Resize Visualization\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Renders a visual indication of an event being resized\r\n TimeGrid.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n this.helperRenderer.renderEventResizingFootprints(eventFootprints, seg, isTouch);\r\n };\r\n // Unrenders any visual indication of an event being resized\r\n TimeGrid.prototype.unrenderEventResize = function () {\r\n this.helperRenderer.unrender();\r\n };\r\n /* Selection\r\n ------------------------------------------------------------------------------------------------------------------*/\r\n // Renders a visual indication of a selection. Overrides the default, which was to simply render a highlight.\r\n TimeGrid.prototype.renderSelectionFootprint = function (componentFootprint) {\r\n if (this.opt('selectHelper')) { // this setting signals that a mock helper event should be rendered\r\n this.helperRenderer.renderComponentFootprint(componentFootprint);\r\n }\r\n else {\r\n this.renderHighlight(componentFootprint);\r\n }\r\n };\r\n // Unrenders any visual indication of a selection\r\n TimeGrid.prototype.unrenderSelection = function () {\r\n this.helperRenderer.unrender();\r\n this.unrenderHighlight();\r\n };\r\n return TimeGrid;\r\n}(InteractiveDateComponent_1.default));\r\nexports.default = TimeGrid;\r\nTimeGrid.prototype.eventRendererClass = TimeGridEventRenderer_1.default;\r\nTimeGrid.prototype.businessHourRendererClass = BusinessHourRenderer_1.default;\r\nTimeGrid.prototype.helperRendererClass = TimeGridHelperRenderer_1.default;\r\nTimeGrid.prototype.fillRendererClass = TimeGridFillRenderer_1.default;\r\nStandardInteractionsMixin_1.default.mixInto(TimeGrid);\r\nDayTableMixin_1.default.mixInto(TimeGrid);\r\n\n\n/***/ }),\n/* 240 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer_1 = __webpack_require__(44);\r\n/*\r\nOnly handles foreground segs.\r\nDoes not own rendering. Use for low-level util methods by TimeGrid.\r\n*/\r\nvar TimeGridEventRenderer = /** @class */ (function (_super) {\r\n tslib_1.__extends(TimeGridEventRenderer, _super);\r\n function TimeGridEventRenderer(timeGrid, fillRenderer) {\r\n var _this = _super.call(this, timeGrid, fillRenderer) || this;\r\n _this.timeGrid = timeGrid;\r\n return _this;\r\n }\r\n TimeGridEventRenderer.prototype.renderFgSegs = function (segs) {\r\n this.renderFgSegsIntoContainers(segs, this.timeGrid.fgContainerEls);\r\n };\r\n // Given an array of foreground segments, render a DOM element for each, computes position,\r\n // and attaches to the column inner-container elements.\r\n TimeGridEventRenderer.prototype.renderFgSegsIntoContainers = function (segs, containerEls) {\r\n var segsByCol;\r\n var col;\r\n segsByCol = this.timeGrid.groupSegsByCol(segs);\r\n for (col = 0; col < this.timeGrid.colCnt; col++) {\r\n this.updateFgSegCoords(segsByCol[col]);\r\n }\r\n this.timeGrid.attachSegsByCol(segsByCol, containerEls);\r\n };\r\n TimeGridEventRenderer.prototype.unrenderFgSegs = function () {\r\n if (this.fgSegs) { // hack\r\n this.fgSegs.forEach(function (seg) {\r\n seg.el.remove();\r\n });\r\n }\r\n };\r\n // Computes a default event time formatting string if `timeFormat` is not explicitly defined\r\n TimeGridEventRenderer.prototype.computeEventTimeFormat = function () {\r\n return this.opt('noMeridiemTimeFormat'); // like \"6:30\" (no AM/PM)\r\n };\r\n // Computes a default `displayEventEnd` value if one is not expliclty defined\r\n TimeGridEventRenderer.prototype.computeDisplayEventEnd = function () {\r\n return true;\r\n };\r\n // Renders the HTML for a single event segment's default rendering\r\n TimeGridEventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {\r\n var view = this.view;\r\n var calendar = view.calendar;\r\n var componentFootprint = seg.footprint.componentFootprint;\r\n var isAllDay = componentFootprint.isAllDay;\r\n var eventDef = seg.footprint.eventDef;\r\n var isDraggable = view.isEventDefDraggable(eventDef);\r\n var isResizableFromStart = !disableResizing && seg.isStart && view.isEventDefResizableFromStart(eventDef);\r\n var isResizableFromEnd = !disableResizing && seg.isEnd && view.isEventDefResizableFromEnd(eventDef);\r\n var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);\r\n var skinCss = util_1.cssToStr(this.getSkinCss(eventDef));\r\n var timeText;\r\n var fullTimeText; // more verbose time text. for the print stylesheet\r\n var startTimeText; // just the start time text\r\n classes.unshift('fc-time-grid-event', 'fc-v-event');\r\n // if the event appears to span more than one day...\r\n if (view.isMultiDayRange(componentFootprint.unzonedRange)) {\r\n // Don't display time text on segments that run entirely through a day.\r\n // That would appear as midnight-midnight and would look dumb.\r\n // Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am)\r\n if (seg.isStart || seg.isEnd) {\r\n var zonedStart = calendar.msToMoment(seg.startMs);\r\n var zonedEnd = calendar.msToMoment(seg.endMs);\r\n timeText = this._getTimeText(zonedStart, zonedEnd, isAllDay);\r\n fullTimeText = this._getTimeText(zonedStart, zonedEnd, isAllDay, 'LT');\r\n startTimeText = this._getTimeText(zonedStart, zonedEnd, isAllDay, null, false); // displayEnd=false\r\n }\r\n }\r\n else {\r\n // Display the normal time text for the *event's* times\r\n timeText = this.getTimeText(seg.footprint);\r\n fullTimeText = this.getTimeText(seg.footprint, 'LT');\r\n startTimeText = this.getTimeText(seg.footprint, null, false); // displayEnd=false\r\n }\r\n return '' +\r\n '
' +\r\n (timeText ?\r\n '
' +\r\n '' + util_1.htmlEscape(timeText) + '' +\r\n '
' :\r\n '') +\r\n (eventDef.title ?\r\n '
' +\r\n util_1.htmlEscape(eventDef.title) +\r\n '
' :\r\n '') +\r\n '
' +\r\n '
' +\r\n /* TODO: write CSS for this\r\n (isResizableFromStart ?\r\n '
' :\r\n ''\r\n ) +\r\n */\r\n (isResizableFromEnd ?\r\n '
' :\r\n '') +\r\n '';\r\n };\r\n // Given segments that are assumed to all live in the *same column*,\r\n // compute their verical/horizontal coordinates and assign to their elements.\r\n TimeGridEventRenderer.prototype.updateFgSegCoords = function (segs) {\r\n this.timeGrid.computeSegVerticals(segs); // horizontals relies on this\r\n this.computeFgSegHorizontals(segs); // compute horizontal coordinates, z-index's, and reorder the array\r\n this.timeGrid.assignSegVerticals(segs);\r\n this.assignFgSegHorizontals(segs);\r\n };\r\n // Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each.\r\n // NOTE: Also reorders the given array by date!\r\n TimeGridEventRenderer.prototype.computeFgSegHorizontals = function (segs) {\r\n var levels;\r\n var level0;\r\n var i;\r\n this.sortEventSegs(segs); // order by certain criteria\r\n levels = buildSlotSegLevels(segs);\r\n computeForwardSlotSegs(levels);\r\n if ((level0 = levels[0])) {\r\n for (i = 0; i < level0.length; i++) {\r\n computeSlotSegPressures(level0[i]);\r\n }\r\n for (i = 0; i < level0.length; i++) {\r\n this.computeFgSegForwardBack(level0[i], 0, 0);\r\n }\r\n }\r\n };\r\n // Calculate seg.forwardCoord and seg.backwardCoord for the segment, where both values range\r\n // from 0 to 1. If the calendar is left-to-right, the seg.backwardCoord maps to \"left\" and\r\n // seg.forwardCoord maps to \"right\" (via percentage). Vice-versa if the calendar is right-to-left.\r\n //\r\n // The segment might be part of a \"series\", which means consecutive segments with the same pressure\r\n // who's width is unknown until an edge has been hit. `seriesBackwardPressure` is the number of\r\n // segments behind this one in the current series, and `seriesBackwardCoord` is the starting\r\n // coordinate of the first segment in the series.\r\n TimeGridEventRenderer.prototype.computeFgSegForwardBack = function (seg, seriesBackwardPressure, seriesBackwardCoord) {\r\n var forwardSegs = seg.forwardSegs;\r\n var i;\r\n if (seg.forwardCoord === undefined) { // not already computed\r\n if (!forwardSegs.length) {\r\n // if there are no forward segments, this segment should butt up against the edge\r\n seg.forwardCoord = 1;\r\n }\r\n else {\r\n // sort highest pressure first\r\n this.sortForwardSegs(forwardSegs);\r\n // this segment's forwardCoord will be calculated from the backwardCoord of the\r\n // highest-pressure forward segment.\r\n this.computeFgSegForwardBack(forwardSegs[0], seriesBackwardPressure + 1, seriesBackwardCoord);\r\n seg.forwardCoord = forwardSegs[0].backwardCoord;\r\n }\r\n // calculate the backwardCoord from the forwardCoord. consider the series\r\n seg.backwardCoord = seg.forwardCoord -\r\n (seg.forwardCoord - seriesBackwardCoord) / // available width for series\r\n (seriesBackwardPressure + 1); // # of segments in the series\r\n // use this segment's coordinates to computed the coordinates of the less-pressurized\r\n // forward segments\r\n for (i = 0; i < forwardSegs.length; i++) {\r\n this.computeFgSegForwardBack(forwardSegs[i], 0, seg.forwardCoord);\r\n }\r\n }\r\n };\r\n TimeGridEventRenderer.prototype.sortForwardSegs = function (forwardSegs) {\r\n forwardSegs.sort(util_1.proxy(this, 'compareForwardSegs'));\r\n };\r\n // A cmp function for determining which forward segment to rely on more when computing coordinates.\r\n TimeGridEventRenderer.prototype.compareForwardSegs = function (seg1, seg2) {\r\n // put higher-pressure first\r\n return seg2.forwardPressure - seg1.forwardPressure ||\r\n // put segments that are closer to initial edge first (and favor ones with no coords yet)\r\n (seg1.backwardCoord || 0) - (seg2.backwardCoord || 0) ||\r\n // do normal sorting...\r\n this.compareEventSegs(seg1, seg2);\r\n };\r\n // Given foreground event segments that have already had their position coordinates computed,\r\n // assigns position-related CSS values to their elements.\r\n TimeGridEventRenderer.prototype.assignFgSegHorizontals = function (segs) {\r\n var i;\r\n var seg;\r\n for (i = 0; i < segs.length; i++) {\r\n seg = segs[i];\r\n seg.el.css(this.generateFgSegHorizontalCss(seg));\r\n // if the event is short that the title will be cut off,\r\n // attach a className that condenses the title into the time area.\r\n if (seg.footprint.eventDef.title && seg.bottom - seg.top < 30) {\r\n seg.el.addClass('fc-short'); // TODO: \"condensed\" is a better name\r\n }\r\n }\r\n };\r\n // Generates an object with CSS properties/values that should be applied to an event segment element.\r\n // Contains important positioning-related properties that should be applied to any event element, customized or not.\r\n TimeGridEventRenderer.prototype.generateFgSegHorizontalCss = function (seg) {\r\n var shouldOverlap = this.opt('slotEventOverlap');\r\n var backwardCoord = seg.backwardCoord; // the left side if LTR. the right side if RTL. floating-point\r\n var forwardCoord = seg.forwardCoord; // the right side if LTR. the left side if RTL. floating-point\r\n var props = this.timeGrid.generateSegVerticalCss(seg); // get top/bottom first\r\n var isRTL = this.timeGrid.isRTL;\r\n var left; // amount of space from left edge, a fraction of the total width\r\n var right; // amount of space from right edge, a fraction of the total width\r\n if (shouldOverlap) {\r\n // double the width, but don't go beyond the maximum forward coordinate (1.0)\r\n forwardCoord = Math.min(1, backwardCoord + (forwardCoord - backwardCoord) * 2);\r\n }\r\n if (isRTL) {\r\n left = 1 - forwardCoord;\r\n right = backwardCoord;\r\n }\r\n else {\r\n left = backwardCoord;\r\n right = 1 - forwardCoord;\r\n }\r\n props.zIndex = seg.level + 1; // convert from 0-base to 1-based\r\n props.left = left * 100 + '%';\r\n props.right = right * 100 + '%';\r\n if (shouldOverlap && seg.forwardPressure) {\r\n // add padding to the edge so that forward stacked events don't cover the resizer's icon\r\n props[isRTL ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width\r\n }\r\n return props;\r\n };\r\n return TimeGridEventRenderer;\r\n}(EventRenderer_1.default));\r\nexports.default = TimeGridEventRenderer;\r\n// Builds an array of segments \"levels\". The first level will be the leftmost tier of segments if the calendar is\r\n// left-to-right, or the rightmost if the calendar is right-to-left. Assumes the segments are already ordered by date.\r\nfunction buildSlotSegLevels(segs) {\r\n var levels = [];\r\n var i;\r\n var seg;\r\n var j;\r\n for (i = 0; i < segs.length; i++) {\r\n seg = segs[i];\r\n // go through all the levels and stop on the first level where there are no collisions\r\n for (j = 0; j < levels.length; j++) {\r\n if (!computeSlotSegCollisions(seg, levels[j]).length) {\r\n break;\r\n }\r\n }\r\n seg.level = j;\r\n (levels[j] || (levels[j] = [])).push(seg);\r\n }\r\n return levels;\r\n}\r\n// For every segment, figure out the other segments that are in subsequent\r\n// levels that also occupy the same vertical space. Accumulate in seg.forwardSegs\r\nfunction computeForwardSlotSegs(levels) {\r\n var i;\r\n var level;\r\n var j;\r\n var seg;\r\n var k;\r\n for (i = 0; i < levels.length; i++) {\r\n level = levels[i];\r\n for (j = 0; j < level.length; j++) {\r\n seg = level[j];\r\n seg.forwardSegs = [];\r\n for (k = i + 1; k < levels.length; k++) {\r\n computeSlotSegCollisions(seg, levels[k], seg.forwardSegs);\r\n }\r\n }\r\n }\r\n}\r\n// Figure out which path forward (via seg.forwardSegs) results in the longest path until\r\n// the furthest edge is reached. The number of segments in this path will be seg.forwardPressure\r\nfunction computeSlotSegPressures(seg) {\r\n var forwardSegs = seg.forwardSegs;\r\n var forwardPressure = 0;\r\n var i;\r\n var forwardSeg;\r\n if (seg.forwardPressure === undefined) { // not already computed\r\n for (i = 0; i < forwardSegs.length; i++) {\r\n forwardSeg = forwardSegs[i];\r\n // figure out the child's maximum forward path\r\n computeSlotSegPressures(forwardSeg);\r\n // either use the existing maximum, or use the child's forward pressure\r\n // plus one (for the forwardSeg itself)\r\n forwardPressure = Math.max(forwardPressure, 1 + forwardSeg.forwardPressure);\r\n }\r\n seg.forwardPressure = forwardPressure;\r\n }\r\n}\r\n// Find all the segments in `otherSegs` that vertically collide with `seg`.\r\n// Append into an optionally-supplied `results` array and return.\r\nfunction computeSlotSegCollisions(seg, otherSegs, results) {\r\n if (results === void 0) { results = []; }\r\n for (var i = 0; i < otherSegs.length; i++) {\r\n if (isSlotSegCollision(seg, otherSegs[i])) {\r\n results.push(otherSegs[i]);\r\n }\r\n }\r\n return results;\r\n}\r\n// Do these segments occupy the same vertical space?\r\nfunction isSlotSegCollision(seg1, seg2) {\r\n return seg1.bottom > seg2.top && seg1.top < seg2.bottom;\r\n}\r\n\n\n/***/ }),\n/* 241 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar HelperRenderer_1 = __webpack_require__(63);\r\nvar TimeGridHelperRenderer = /** @class */ (function (_super) {\r\n tslib_1.__extends(TimeGridHelperRenderer, _super);\r\n function TimeGridHelperRenderer() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n TimeGridHelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {\r\n var helperNodes = [];\r\n var i;\r\n var seg;\r\n var sourceEl;\r\n // TODO: not good to call eventRenderer this way\r\n this.eventRenderer.renderFgSegsIntoContainers(segs, this.component.helperContainerEls);\r\n // Try to make the segment that is in the same row as sourceSeg look the same\r\n for (i = 0; i < segs.length; i++) {\r\n seg = segs[i];\r\n if (sourceSeg && sourceSeg.col === seg.col) {\r\n sourceEl = sourceSeg.el;\r\n seg.el.css({\r\n left: sourceEl.css('left'),\r\n right: sourceEl.css('right'),\r\n 'margin-left': sourceEl.css('margin-left'),\r\n 'margin-right': sourceEl.css('margin-right')\r\n });\r\n }\r\n helperNodes.push(seg.el[0]);\r\n }\r\n return $(helperNodes); // must return the elements rendered\r\n };\r\n return TimeGridHelperRenderer;\r\n}(HelperRenderer_1.default));\r\nexports.default = TimeGridHelperRenderer;\r\n\n\n/***/ }),\n/* 242 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar FillRenderer_1 = __webpack_require__(62);\r\nvar TimeGridFillRenderer = /** @class */ (function (_super) {\r\n tslib_1.__extends(TimeGridFillRenderer, _super);\r\n function TimeGridFillRenderer() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n TimeGridFillRenderer.prototype.attachSegEls = function (type, segs) {\r\n var timeGrid = this.component;\r\n var containerEls;\r\n // TODO: more efficient lookup\r\n if (type === 'bgEvent') {\r\n containerEls = timeGrid.bgContainerEls;\r\n }\r\n else if (type === 'businessHours') {\r\n containerEls = timeGrid.businessContainerEls;\r\n }\r\n else if (type === 'highlight') {\r\n containerEls = timeGrid.highlightContainerEls;\r\n }\r\n timeGrid.updateSegVerticals(segs);\r\n timeGrid.attachSegsByCol(timeGrid.groupSegsByCol(segs), containerEls);\r\n return segs.map(function (seg) {\r\n return seg.el[0];\r\n });\r\n };\r\n return TimeGridFillRenderer;\r\n}(FillRenderer_1.default));\r\nexports.default = TimeGridFillRenderer;\r\n\n\n/***/ }),\n/* 243 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer_1 = __webpack_require__(44);\r\n/* Event-rendering methods for the DayGrid class\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar DayGridEventRenderer = /** @class */ (function (_super) {\r\n tslib_1.__extends(DayGridEventRenderer, _super);\r\n function DayGridEventRenderer(dayGrid, fillRenderer) {\r\n var _this = _super.call(this, dayGrid, fillRenderer) || this;\r\n _this.dayGrid = dayGrid;\r\n return _this;\r\n }\r\n DayGridEventRenderer.prototype.renderBgRanges = function (eventRanges) {\r\n // don't render timed background events\r\n eventRanges = $.grep(eventRanges, function (eventRange) {\r\n return eventRange.eventDef.isAllDay();\r\n });\r\n _super.prototype.renderBgRanges.call(this, eventRanges);\r\n };\r\n // Renders the given foreground event segments onto the grid\r\n DayGridEventRenderer.prototype.renderFgSegs = function (segs) {\r\n var rowStructs = this.rowStructs = this.renderSegRows(segs);\r\n // append to each row's content skeleton\r\n this.dayGrid.rowEls.each(function (i, rowNode) {\r\n $(rowNode).find('.fc-content-skeleton > table').append(rowStructs[i].tbodyEl);\r\n });\r\n };\r\n // Unrenders all currently rendered foreground event segments\r\n DayGridEventRenderer.prototype.unrenderFgSegs = function () {\r\n var rowStructs = this.rowStructs || [];\r\n var rowStruct;\r\n while ((rowStruct = rowStructs.pop())) {\r\n rowStruct.tbodyEl.remove();\r\n }\r\n this.rowStructs = null;\r\n };\r\n // Uses the given events array to generate elements that should be appended to each row's content skeleton.\r\n // Returns an array of rowStruct objects (see the bottom of `renderSegRow`).\r\n // PRECONDITION: each segment shoud already have a rendered and assigned `.el`\r\n DayGridEventRenderer.prototype.renderSegRows = function (segs) {\r\n var rowStructs = [];\r\n var segRows;\r\n var row;\r\n segRows = this.groupSegRows(segs); // group into nested arrays\r\n // iterate each row of segment groupings\r\n for (row = 0; row < segRows.length; row++) {\r\n rowStructs.push(this.renderSegRow(row, segRows[row]));\r\n }\r\n return rowStructs;\r\n };\r\n // Given a row # and an array of segments all in the same row, render a element, a skeleton that contains\r\n // the segments. Returns object with a bunch of internal data about how the render was calculated.\r\n // NOTE: modifies rowSegs\r\n DayGridEventRenderer.prototype.renderSegRow = function (row, rowSegs) {\r\n var colCnt = this.dayGrid.colCnt;\r\n var segLevels = this.buildSegLevels(rowSegs); // group into sub-arrays of levels\r\n var levelCnt = Math.max(1, segLevels.length); // ensure at least one level\r\n var tbody = $('');\r\n var segMatrix = []; // lookup for which segments are rendered into which level+col cells\r\n var cellMatrix = []; // lookup for all elements of the level+col matrix\r\n var loneCellMatrix = []; // lookup for elements that only take up a single column\r\n var i;\r\n var levelSegs;\r\n var col;\r\n var tr;\r\n var j;\r\n var seg;\r\n var td;\r\n // populates empty cells from the current column (`col`) to `endCol`\r\n function emptyCellsUntil(endCol) {\r\n while (col < endCol) {\r\n // try to grab a cell from the level above and extend its rowspan. otherwise, create a fresh cell\r\n td = (loneCellMatrix[i - 1] || [])[col];\r\n if (td) {\r\n td.attr('rowspan', parseInt(td.attr('rowspan') || 1, 10) + 1);\r\n }\r\n else {\r\n td = $('');\r\n tr.append(td);\r\n }\r\n cellMatrix[i][col] = td;\r\n loneCellMatrix[i][col] = td;\r\n col++;\r\n }\r\n }\r\n for (i = 0; i < levelCnt; i++) { // iterate through all levels\r\n levelSegs = segLevels[i];\r\n col = 0;\r\n tr = $('');\r\n segMatrix.push([]);\r\n cellMatrix.push([]);\r\n loneCellMatrix.push([]);\r\n // levelCnt might be 1 even though there are no actual levels. protect against this.\r\n // this single empty row is useful for styling.\r\n if (levelSegs) {\r\n for (j = 0; j < levelSegs.length; j++) { // iterate through segments in level\r\n seg = levelSegs[j];\r\n emptyCellsUntil(seg.leftCol);\r\n // create a container that occupies or more columns. append the event element.\r\n td = $('').append(seg.el);\r\n if (seg.leftCol !== seg.rightCol) {\r\n td.attr('colspan', seg.rightCol - seg.leftCol + 1);\r\n }\r\n else { // a single-column segment\r\n loneCellMatrix[i][col] = td;\r\n }\r\n while (col <= seg.rightCol) {\r\n cellMatrix[i][col] = td;\r\n segMatrix[i][col] = seg;\r\n col++;\r\n }\r\n tr.append(td);\r\n }\r\n }\r\n emptyCellsUntil(colCnt); // finish off the row\r\n this.dayGrid.bookendCells(tr);\r\n tbody.append(tr);\r\n }\r\n return {\r\n row: row,\r\n tbodyEl: tbody,\r\n cellMatrix: cellMatrix,\r\n segMatrix: segMatrix,\r\n segLevels: segLevels,\r\n segs: rowSegs\r\n };\r\n };\r\n // Stacks a flat array of segments, which are all assumed to be in the same row, into subarrays of vertical levels.\r\n // NOTE: modifies segs\r\n DayGridEventRenderer.prototype.buildSegLevels = function (segs) {\r\n var levels = [];\r\n var i;\r\n var seg;\r\n var j;\r\n // Give preference to elements with certain criteria, so they have\r\n // a chance to be closer to the top.\r\n this.sortEventSegs(segs);\r\n for (i = 0; i < segs.length; i++) {\r\n seg = segs[i];\r\n // loop through levels, starting with the topmost, until the segment doesn't collide with other segments\r\n for (j = 0; j < levels.length; j++) {\r\n if (!isDaySegCollision(seg, levels[j])) {\r\n break;\r\n }\r\n }\r\n // `j` now holds the desired subrow index\r\n seg.level = j;\r\n // create new level array if needed and append segment\r\n (levels[j] || (levels[j] = [])).push(seg);\r\n }\r\n // order segments left-to-right. very important if calendar is RTL\r\n for (j = 0; j < levels.length; j++) {\r\n levels[j].sort(compareDaySegCols);\r\n }\r\n return levels;\r\n };\r\n // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's row\r\n DayGridEventRenderer.prototype.groupSegRows = function (segs) {\r\n var segRows = [];\r\n var i;\r\n for (i = 0; i < this.dayGrid.rowCnt; i++) {\r\n segRows.push([]);\r\n }\r\n for (i = 0; i < segs.length; i++) {\r\n segRows[segs[i].row].push(segs[i]);\r\n }\r\n return segRows;\r\n };\r\n // Computes a default event time formatting string if `timeFormat` is not explicitly defined\r\n DayGridEventRenderer.prototype.computeEventTimeFormat = function () {\r\n return this.opt('extraSmallTimeFormat'); // like \"6p\" or \"6:30p\"\r\n };\r\n // Computes a default `displayEventEnd` value if one is not expliclty defined\r\n DayGridEventRenderer.prototype.computeDisplayEventEnd = function () {\r\n return this.dayGrid.colCnt === 1; // we'll likely have space if there's only one day\r\n };\r\n // Builds the HTML to be used for the default element for an individual segment\r\n DayGridEventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {\r\n var view = this.view;\r\n var eventDef = seg.footprint.eventDef;\r\n var isAllDay = seg.footprint.componentFootprint.isAllDay;\r\n var isDraggable = view.isEventDefDraggable(eventDef);\r\n var isResizableFromStart = !disableResizing && isAllDay &&\r\n seg.isStart && view.isEventDefResizableFromStart(eventDef);\r\n var isResizableFromEnd = !disableResizing && isAllDay &&\r\n seg.isEnd && view.isEventDefResizableFromEnd(eventDef);\r\n var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);\r\n var skinCss = util_1.cssToStr(this.getSkinCss(eventDef));\r\n var timeHtml = '';\r\n var timeText;\r\n var titleHtml;\r\n classes.unshift('fc-day-grid-event', 'fc-h-event');\r\n // Only display a timed events time if it is the starting segment\r\n if (seg.isStart) {\r\n timeText = this.getTimeText(seg.footprint);\r\n if (timeText) {\r\n timeHtml = '' + util_1.htmlEscape(timeText) + '';\r\n }\r\n }\r\n titleHtml =\r\n '' +\r\n (util_1.htmlEscape(eventDef.title || '') || ' ') + // we always want one line of height\r\n '';\r\n return '' +\r\n '
' +\r\n (this.dayGrid.isRTL ?\r\n titleHtml + ' ' + timeHtml : // put a natural space in between\r\n timeHtml + ' ' + titleHtml //\r\n ) +\r\n '
' +\r\n (isResizableFromStart ?\r\n '
' :\r\n '') +\r\n (isResizableFromEnd ?\r\n '
' :\r\n '') +\r\n '';\r\n };\r\n return DayGridEventRenderer;\r\n}(EventRenderer_1.default));\r\nexports.default = DayGridEventRenderer;\r\n// Computes whether two segments' columns collide. They are assumed to be in the same row.\r\nfunction isDaySegCollision(seg, otherSegs) {\r\n var i;\r\n var otherSeg;\r\n for (i = 0; i < otherSegs.length; i++) {\r\n otherSeg = otherSegs[i];\r\n if (otherSeg.leftCol <= seg.rightCol &&\r\n otherSeg.rightCol >= seg.leftCol) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n// A cmp function for determining the leftmost event\r\nfunction compareDaySegCols(a, b) {\r\n return a.leftCol - b.leftCol;\r\n}\r\n\n\n/***/ }),\n/* 244 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar HelperRenderer_1 = __webpack_require__(63);\r\nvar DayGridHelperRenderer = /** @class */ (function (_super) {\r\n tslib_1.__extends(DayGridHelperRenderer, _super);\r\n function DayGridHelperRenderer() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n // Renders a mock \"helper\" event. `sourceSeg` is the associated internal segment object. It can be null.\r\n DayGridHelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {\r\n var helperNodes = [];\r\n var rowStructs;\r\n // TODO: not good to call eventRenderer this way\r\n rowStructs = this.eventRenderer.renderSegRows(segs);\r\n // inject each new event skeleton into each associated row\r\n this.component.rowEls.each(function (row, rowNode) {\r\n var rowEl = $(rowNode); // the .fc-row\r\n var skeletonEl = $('
'); // will be absolutely positioned\r\n var skeletonTopEl;\r\n var skeletonTop;\r\n // If there is an original segment, match the top position. Otherwise, put it at the row's top level\r\n if (sourceSeg && sourceSeg.row === row) {\r\n skeletonTop = sourceSeg.el.position().top;\r\n }\r\n else {\r\n skeletonTopEl = rowEl.find('.fc-content-skeleton tbody');\r\n if (!skeletonTopEl.length) { // when no events\r\n skeletonTopEl = rowEl.find('.fc-content-skeleton table');\r\n }\r\n skeletonTop = skeletonTopEl.position().top;\r\n }\r\n skeletonEl.css('top', skeletonTop)\r\n .find('table')\r\n .append(rowStructs[row].tbodyEl);\r\n rowEl.append(skeletonEl);\r\n helperNodes.push(skeletonEl[0]);\r\n });\r\n return $(helperNodes); // must return the elements rendered\r\n };\r\n return DayGridHelperRenderer;\r\n}(HelperRenderer_1.default));\r\nexports.default = DayGridHelperRenderer;\r\n\n\n/***/ }),\n/* 245 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar FillRenderer_1 = __webpack_require__(62);\r\nvar DayGridFillRenderer = /** @class */ (function (_super) {\r\n tslib_1.__extends(DayGridFillRenderer, _super);\r\n function DayGridFillRenderer() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.fillSegTag = 'td'; // override the default tag name\r\n return _this;\r\n }\r\n DayGridFillRenderer.prototype.attachSegEls = function (type, segs) {\r\n var nodes = [];\r\n var i;\r\n var seg;\r\n var skeletonEl;\r\n for (i = 0; i < segs.length; i++) {\r\n seg = segs[i];\r\n skeletonEl = this.renderFillRow(type, seg);\r\n this.component.rowEls.eq(seg.row).append(skeletonEl);\r\n nodes.push(skeletonEl[0]);\r\n }\r\n return nodes;\r\n };\r\n // Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered.\r\n DayGridFillRenderer.prototype.renderFillRow = function (type, seg) {\r\n var colCnt = this.component.colCnt;\r\n var startCol = seg.leftCol;\r\n var endCol = seg.rightCol + 1;\r\n var className;\r\n var skeletonEl;\r\n var trEl;\r\n if (type === 'businessHours') {\r\n className = 'bgevent';\r\n }\r\n else {\r\n className = type.toLowerCase();\r\n }\r\n skeletonEl = $('
' +\r\n '
' +\r\n '
');\r\n trEl = skeletonEl.find('tr');\r\n if (startCol > 0) {\r\n trEl.append(\r\n // will create (startCol + 1) td's\r\n new Array(startCol + 1).join(''));\r\n }\r\n trEl.append(seg.el.attr('colspan', endCol - startCol));\r\n if (endCol < colCnt) {\r\n trEl.append(\r\n // will create (colCnt - endCol) td's\r\n new Array(colCnt - endCol + 1).join(''));\r\n }\r\n this.component.bookendCells(trEl);\r\n return skeletonEl;\r\n };\r\n return DayGridFillRenderer;\r\n}(FillRenderer_1.default));\r\nexports.default = DayGridFillRenderer;\r\n\n\n/***/ }),\n/* 246 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar BasicView_1 = __webpack_require__(67);\r\nvar MonthViewDateProfileGenerator_1 = __webpack_require__(247);\r\n/* A month view with day cells running in rows (one-per-week) and columns\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar MonthView = /** @class */ (function (_super) {\r\n tslib_1.__extends(MonthView, _super);\r\n function MonthView() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n // Overrides the default BasicView behavior to have special multi-week auto-height logic\r\n MonthView.prototype.setGridHeight = function (height, isAuto) {\r\n // if auto, make the height of each row the height that it would be if there were 6 weeks\r\n if (isAuto) {\r\n height *= this.dayGrid.rowCnt / 6;\r\n }\r\n util_1.distributeHeight(this.dayGrid.rowEls, height, !isAuto); // if auto, don't compensate for height-hogging rows\r\n };\r\n MonthView.prototype.isDateInOtherMonth = function (date, dateProfile) {\r\n return date.month() !== moment.utc(dateProfile.currentUnzonedRange.startMs).month(); // TODO: optimize\r\n };\r\n return MonthView;\r\n}(BasicView_1.default));\r\nexports.default = MonthView;\r\nMonthView.prototype.dateProfileGeneratorClass = MonthViewDateProfileGenerator_1.default;\r\n\n\n/***/ }),\n/* 247 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar BasicViewDateProfileGenerator_1 = __webpack_require__(68);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar MonthViewDateProfileGenerator = /** @class */ (function (_super) {\r\n tslib_1.__extends(MonthViewDateProfileGenerator, _super);\r\n function MonthViewDateProfileGenerator() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n // Computes the date range that will be rendered.\r\n MonthViewDateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {\r\n var renderUnzonedRange = _super.prototype.buildRenderRange.call(this, currentUnzonedRange, currentRangeUnit, isRangeAllDay);\r\n var start = this.msToUtcMoment(renderUnzonedRange.startMs, isRangeAllDay);\r\n var end = this.msToUtcMoment(renderUnzonedRange.endMs, isRangeAllDay);\r\n var rowCnt;\r\n // ensure 6 weeks\r\n if (this.opt('fixedWeekCount')) {\r\n rowCnt = Math.ceil(// could be partial weeks due to hiddenDays\r\n end.diff(start, 'weeks', true) // dontRound=true\r\n );\r\n end.add(6 - rowCnt, 'weeks');\r\n }\r\n return new UnzonedRange_1.default(start, end);\r\n };\r\n return MonthViewDateProfileGenerator;\r\n}(BasicViewDateProfileGenerator_1.default));\r\nexports.default = MonthViewDateProfileGenerator;\r\n\n\n/***/ }),\n/* 248 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar View_1 = __webpack_require__(43);\r\nvar Scroller_1 = __webpack_require__(41);\r\nvar ListEventRenderer_1 = __webpack_require__(249);\r\nvar ListEventPointing_1 = __webpack_require__(250);\r\n/*\r\nResponsible for the scroller, and forwarding event-related actions into the \"grid\".\r\n*/\r\nvar ListView = /** @class */ (function (_super) {\r\n tslib_1.__extends(ListView, _super);\r\n function ListView(calendar, viewSpec) {\r\n var _this = _super.call(this, calendar, viewSpec) || this;\r\n _this.segSelector = '.fc-list-item'; // which elements accept event actions\r\n _this.scroller = new Scroller_1.default({\r\n overflowX: 'hidden',\r\n overflowY: 'auto'\r\n });\r\n return _this;\r\n }\r\n ListView.prototype.renderSkeleton = function () {\r\n this.el.addClass('fc-list-view ' +\r\n this.calendar.theme.getClass('listView'));\r\n this.scroller.render();\r\n this.scroller.el.appendTo(this.el);\r\n this.contentEl = this.scroller.scrollEl; // shortcut\r\n };\r\n ListView.prototype.unrenderSkeleton = function () {\r\n this.scroller.destroy(); // will remove the Grid too\r\n };\r\n ListView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n this.scroller.clear(); // sets height to 'auto' and clears overflow\r\n if (!isAuto) {\r\n this.scroller.setHeight(this.computeScrollerHeight(totalHeight));\r\n }\r\n };\r\n ListView.prototype.computeScrollerHeight = function (totalHeight) {\r\n return totalHeight -\r\n util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\r\n };\r\n ListView.prototype.renderDates = function (dateProfile) {\r\n var calendar = this.calendar;\r\n var dayStart = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.startMs, true);\r\n var viewEnd = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.endMs, true);\r\n var dayDates = [];\r\n var dayRanges = [];\r\n while (dayStart < viewEnd) {\r\n dayDates.push(dayStart.clone());\r\n dayRanges.push(new UnzonedRange_1.default(dayStart, dayStart.clone().add(1, 'day')));\r\n dayStart.add(1, 'day');\r\n }\r\n this.dayDates = dayDates;\r\n this.dayRanges = dayRanges;\r\n // all real rendering happens in EventRenderer\r\n };\r\n // slices by day\r\n ListView.prototype.componentFootprintToSegs = function (footprint) {\r\n var dayRanges = this.dayRanges;\r\n var dayIndex;\r\n var segRange;\r\n var seg;\r\n var segs = [];\r\n for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex++) {\r\n segRange = footprint.unzonedRange.intersect(dayRanges[dayIndex]);\r\n if (segRange) {\r\n seg = {\r\n startMs: segRange.startMs,\r\n endMs: segRange.endMs,\r\n isStart: segRange.isStart,\r\n isEnd: segRange.isEnd,\r\n dayIndex: dayIndex\r\n };\r\n segs.push(seg);\r\n // detect when footprint won't go fully into the next day,\r\n // and mutate the latest seg to the be the end.\r\n if (!seg.isEnd && !footprint.isAllDay &&\r\n dayIndex + 1 < dayRanges.length &&\r\n footprint.unzonedRange.endMs < dayRanges[dayIndex + 1].startMs + this.nextDayThreshold) {\r\n seg.endMs = footprint.unzonedRange.endMs;\r\n seg.isEnd = true;\r\n break;\r\n }\r\n }\r\n }\r\n return segs;\r\n };\r\n ListView.prototype.renderEmptyMessage = function () {\r\n this.contentEl.html('
' + // TODO: try less wraps\r\n '
' +\r\n '
' +\r\n util_1.htmlEscape(this.opt('noEventsMessage')) +\r\n '
' +\r\n '
' +\r\n '
');\r\n };\r\n // render the event segments in the view\r\n ListView.prototype.renderSegList = function (allSegs) {\r\n var segsByDay = this.groupSegsByDay(allSegs); // sparse array\r\n var dayIndex;\r\n var daySegs;\r\n var i;\r\n var tableEl = $('
');\r\n var tbodyEl = tableEl.find('tbody');\r\n for (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) {\r\n daySegs = segsByDay[dayIndex];\r\n if (daySegs) { // sparse array, so might be undefined\r\n // append a day header\r\n tbodyEl.append(this.dayHeaderHtml(this.dayDates[dayIndex]));\r\n this.eventRenderer.sortEventSegs(daySegs);\r\n for (i = 0; i < daySegs.length; i++) {\r\n tbodyEl.append(daySegs[i].el); // append event row\r\n }\r\n }\r\n }\r\n this.contentEl.empty().append(tableEl);\r\n };\r\n // Returns a sparse array of arrays, segs grouped by their dayIndex\r\n ListView.prototype.groupSegsByDay = function (segs) {\r\n var segsByDay = []; // sparse array\r\n var i;\r\n var seg;\r\n for (i = 0; i < segs.length; i++) {\r\n seg = segs[i];\r\n (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = []))\r\n .push(seg);\r\n }\r\n return segsByDay;\r\n };\r\n // generates the HTML for the day headers that live amongst the event rows\r\n ListView.prototype.dayHeaderHtml = function (dayDate) {\r\n var mainFormat = this.opt('listDayFormat');\r\n var altFormat = this.opt('listDayAltFormat');\r\n return '' +\r\n '' +\r\n (mainFormat ?\r\n this.buildGotoAnchorHtml(dayDate, { 'class': 'fc-list-heading-main' }, util_1.htmlEscape(dayDate.format(mainFormat)) // inner HTML\r\n ) :\r\n '') +\r\n (altFormat ?\r\n this.buildGotoAnchorHtml(dayDate, { 'class': 'fc-list-heading-alt' }, util_1.htmlEscape(dayDate.format(altFormat)) // inner HTML\r\n ) :\r\n '') +\r\n '' +\r\n '';\r\n };\r\n return ListView;\r\n}(View_1.default));\r\nexports.default = ListView;\r\nListView.prototype.eventRendererClass = ListEventRenderer_1.default;\r\nListView.prototype.eventPointingClass = ListEventPointing_1.default;\r\n\n\n/***/ }),\n/* 249 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer_1 = __webpack_require__(44);\r\nvar ListEventRenderer = /** @class */ (function (_super) {\r\n tslib_1.__extends(ListEventRenderer, _super);\r\n function ListEventRenderer() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n ListEventRenderer.prototype.renderFgSegs = function (segs) {\r\n if (!segs.length) {\r\n this.component.renderEmptyMessage();\r\n }\r\n else {\r\n this.component.renderSegList(segs);\r\n }\r\n };\r\n // generates the HTML for a single event row\r\n ListEventRenderer.prototype.fgSegHtml = function (seg) {\r\n var view = this.view;\r\n var calendar = view.calendar;\r\n var theme = calendar.theme;\r\n var eventFootprint = seg.footprint;\r\n var eventDef = eventFootprint.eventDef;\r\n var componentFootprint = eventFootprint.componentFootprint;\r\n var url = eventDef.url;\r\n var classes = ['fc-list-item'].concat(this.getClasses(eventDef));\r\n var bgColor = this.getBgColor(eventDef);\r\n var timeHtml;\r\n if (componentFootprint.isAllDay) {\r\n timeHtml = view.getAllDayHtml();\r\n }\r\n else if (view.isMultiDayRange(componentFootprint.unzonedRange)) {\r\n if (seg.isStart || seg.isEnd) { // outer segment that probably lasts part of the day\r\n timeHtml = util_1.htmlEscape(this._getTimeText(calendar.msToMoment(seg.startMs), calendar.msToMoment(seg.endMs), componentFootprint.isAllDay));\r\n }\r\n else { // inner segment that lasts the whole day\r\n timeHtml = view.getAllDayHtml();\r\n }\r\n }\r\n else {\r\n // Display the normal time text for the *event's* times\r\n timeHtml = util_1.htmlEscape(this.getTimeText(eventFootprint));\r\n }\r\n if (url) {\r\n classes.push('fc-has-url');\r\n }\r\n return '' +\r\n (this.displayEventTime ?\r\n '' +\r\n (timeHtml || '') +\r\n '' :\r\n '') +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n util_1.htmlEscape(eventDef.title || '') +\r\n '' +\r\n '' +\r\n '';\r\n };\r\n // like \"4:00am\"\r\n ListEventRenderer.prototype.computeEventTimeFormat = function () {\r\n return this.opt('mediumTimeFormat');\r\n };\r\n return ListEventRenderer;\r\n}(EventRenderer_1.default));\r\nexports.default = ListEventRenderer;\r\n\n\n/***/ }),\n/* 250 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar EventPointing_1 = __webpack_require__(64);\r\nvar ListEventPointing = /** @class */ (function (_super) {\r\n tslib_1.__extends(ListEventPointing, _super);\r\n function ListEventPointing() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n // for events with a url, the whole should be clickable,\r\n // but it's impossible to wrap with an tag. simulate this.\r\n ListEventPointing.prototype.handleClick = function (seg, ev) {\r\n var url;\r\n _super.prototype.handleClick.call(this, seg, ev); // might prevent the default action\r\n // not clicking on or within an with an href\r\n if (!$(ev.target).closest('a[href]').length) {\r\n url = seg.footprint.eventDef.url;\r\n if (url && !ev.isDefaultPrevented()) { // jsEvent not cancelled in handler\r\n window.location.href = url; // simulate link click\r\n }\r\n }\r\n };\r\n return ListEventPointing;\r\n}(EventPointing_1.default));\r\nexports.default = ListEventPointing;\r\n\n\n/***/ }),\n/* 251 */,\n/* 252 */,\n/* 253 */,\n/* 254 */,\n/* 255 */,\n/* 256 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $ = __webpack_require__(3);\r\nvar exportHooks = __webpack_require__(18);\r\nvar util_1 = __webpack_require__(4);\r\nvar Calendar_1 = __webpack_require__(232);\r\n// for intentional side-effects\r\n__webpack_require__(11);\r\n__webpack_require__(49);\r\n__webpack_require__(260);\r\n__webpack_require__(261);\r\n__webpack_require__(264);\r\n__webpack_require__(265);\r\n__webpack_require__(266);\r\n__webpack_require__(267);\r\n$.fullCalendar = exportHooks;\r\n$.fn.fullCalendar = function (options) {\r\n var args = Array.prototype.slice.call(arguments, 1); // for a possible method call\r\n var res = this; // what this function will return (this jQuery object by default)\r\n this.each(function (i, _element) {\r\n var element = $(_element);\r\n var calendar = element.data('fullCalendar'); // get the existing calendar object (if any)\r\n var singleRes; // the returned value of this single method call\r\n // a method call\r\n if (typeof options === 'string') {\r\n if (options === 'getCalendar') {\r\n if (!i) { // first element only\r\n res = calendar;\r\n }\r\n }\r\n else if (options === 'destroy') { // don't warn if no calendar object\r\n if (calendar) {\r\n calendar.destroy();\r\n element.removeData('fullCalendar');\r\n }\r\n }\r\n else if (!calendar) {\r\n util_1.warn('Attempting to call a FullCalendar method on an element with no calendar.');\r\n }\r\n else if ($.isFunction(calendar[options])) {\r\n singleRes = calendar[options].apply(calendar, args);\r\n if (!i) {\r\n res = singleRes; // record the first method call result\r\n }\r\n if (options === 'destroy') { // for the destroy method, must remove Calendar object data\r\n element.removeData('fullCalendar');\r\n }\r\n }\r\n else {\r\n util_1.warn(\"'\" + options + \"' is an unknown FullCalendar method.\");\r\n }\r\n }\r\n else if (!calendar) { // don't initialize twice\r\n calendar = new Calendar_1.default(element, options);\r\n element.data('fullCalendar', calendar);\r\n calendar.render();\r\n }\r\n });\r\n return res;\r\n};\r\nmodule.exports = exportHooks;\r\n\n\n/***/ }),\n/* 257 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\n/* Toolbar with buttons and title\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar Toolbar = /** @class */ (function () {\r\n function Toolbar(calendar, toolbarOptions) {\r\n this.el = null; // mirrors local `el`\r\n this.viewsWithButtons = [];\r\n this.calendar = calendar;\r\n this.toolbarOptions = toolbarOptions;\r\n }\r\n // method to update toolbar-specific options, not calendar-wide options\r\n Toolbar.prototype.setToolbarOptions = function (newToolbarOptions) {\r\n this.toolbarOptions = newToolbarOptions;\r\n };\r\n // can be called repeatedly and will rerender\r\n Toolbar.prototype.render = function () {\r\n var sections = this.toolbarOptions.layout;\r\n var el = this.el;\r\n if (sections) {\r\n if (!el) {\r\n el = this.el = $(\"
\");\r\n }\r\n else {\r\n el.empty();\r\n }\r\n el.append(this.renderSection('left'))\r\n .append(this.renderSection('right'))\r\n .append(this.renderSection('center'))\r\n .append('
');\r\n }\r\n else {\r\n this.removeElement();\r\n }\r\n };\r\n Toolbar.prototype.removeElement = function () {\r\n if (this.el) {\r\n this.el.remove();\r\n this.el = null;\r\n }\r\n };\r\n Toolbar.prototype.renderSection = function (position) {\r\n var _this = this;\r\n var calendar = this.calendar;\r\n var theme = calendar.theme;\r\n var optionsManager = calendar.optionsManager;\r\n var viewSpecManager = calendar.viewSpecManager;\r\n var sectionEl = $('
');\r\n var buttonStr = this.toolbarOptions.layout[position];\r\n var calendarCustomButtons = optionsManager.get('customButtons') || {};\r\n var calendarButtonTextOverrides = optionsManager.overrides.buttonText || {};\r\n var calendarButtonText = optionsManager.get('buttonText') || {};\r\n if (buttonStr) {\r\n $.each(buttonStr.split(' '), function (i, buttonGroupStr) {\r\n var groupChildren = $();\r\n var isOnlyButtons = true;\r\n var groupEl;\r\n $.each(buttonGroupStr.split(','), function (j, buttonName) {\r\n var customButtonProps;\r\n var viewSpec;\r\n var buttonClick;\r\n var buttonIcon; // only one of these will be set\r\n var buttonText; // \"\r\n var buttonInnerHtml;\r\n var buttonClasses;\r\n var buttonEl;\r\n var buttonAriaAttr;\r\n if (buttonName === 'title') {\r\n groupChildren = groupChildren.add($('

 

')); // we always want it to take up height\r\n isOnlyButtons = false;\r\n }\r\n else {\r\n if ((customButtonProps = calendarCustomButtons[buttonName])) {\r\n buttonClick = function (ev) {\r\n if (customButtonProps.click) {\r\n customButtonProps.click.call(buttonEl[0], ev);\r\n }\r\n };\r\n (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) ||\r\n (buttonIcon = theme.getIconClass(buttonName)) ||\r\n (buttonText = customButtonProps.text);\r\n }\r\n else if ((viewSpec = viewSpecManager.getViewSpec(buttonName))) {\r\n _this.viewsWithButtons.push(buttonName);\r\n buttonClick = function () {\r\n calendar.changeView(buttonName);\r\n };\r\n (buttonText = viewSpec.buttonTextOverride) ||\r\n (buttonIcon = theme.getIconClass(buttonName)) ||\r\n (buttonText = viewSpec.buttonTextDefault);\r\n }\r\n else if (calendar[buttonName]) { // a calendar method\r\n buttonClick = function () {\r\n calendar[buttonName]();\r\n };\r\n (buttonText = calendarButtonTextOverrides[buttonName]) ||\r\n (buttonIcon = theme.getIconClass(buttonName)) ||\r\n (buttonText = calendarButtonText[buttonName]);\r\n // ^ everything else is considered default\r\n }\r\n if (buttonClick) {\r\n buttonClasses = [\r\n 'fc-' + buttonName + '-button',\r\n theme.getClass('button'),\r\n theme.getClass('stateDefault')\r\n ];\r\n if (buttonText) {\r\n buttonInnerHtml = util_1.htmlEscape(buttonText);\r\n buttonAriaAttr = '';\r\n }\r\n else if (buttonIcon) {\r\n buttonInnerHtml = \"\";\r\n buttonAriaAttr = ' aria-label=\"' + buttonName + '\"';\r\n }\r\n buttonEl = $(// type=\"button\" so that it doesn't submit a form\r\n '')\r\n .click(function (ev) {\r\n // don't process clicks for disabled buttons\r\n if (!buttonEl.hasClass(theme.getClass('stateDisabled'))) {\r\n buttonClick(ev);\r\n // after the click action, if the button becomes the \"active\" tab, or disabled,\r\n // it should never have a hover class, so remove it now.\r\n if (buttonEl.hasClass(theme.getClass('stateActive')) ||\r\n buttonEl.hasClass(theme.getClass('stateDisabled'))) {\r\n buttonEl.removeClass(theme.getClass('stateHover'));\r\n }\r\n }\r\n })\r\n .mousedown(function () {\r\n // the *down* effect (mouse pressed in).\r\n // only on buttons that are not the \"active\" tab, or disabled\r\n buttonEl\r\n .not('.' + theme.getClass('stateActive'))\r\n .not('.' + theme.getClass('stateDisabled'))\r\n .addClass(theme.getClass('stateDown'));\r\n })\r\n .mouseup(function () {\r\n // undo the *down* effect\r\n buttonEl.removeClass(theme.getClass('stateDown'));\r\n })\r\n .hover(function () {\r\n // the *hover* effect.\r\n // only on buttons that are not the \"active\" tab, or disabled\r\n buttonEl\r\n .not('.' + theme.getClass('stateActive'))\r\n .not('.' + theme.getClass('stateDisabled'))\r\n .addClass(theme.getClass('stateHover'));\r\n }, function () {\r\n // undo the *hover* effect\r\n buttonEl\r\n .removeClass(theme.getClass('stateHover'))\r\n .removeClass(theme.getClass('stateDown')); // if mouseleave happens before mouseup\r\n });\r\n groupChildren = groupChildren.add(buttonEl);\r\n }\r\n }\r\n });\r\n if (isOnlyButtons) {\r\n groupChildren\r\n .first().addClass(theme.getClass('cornerLeft')).end()\r\n .last().addClass(theme.getClass('cornerRight')).end();\r\n }\r\n if (groupChildren.length > 1) {\r\n groupEl = $('
');\r\n if (isOnlyButtons) {\r\n groupEl.addClass(theme.getClass('buttonGroup'));\r\n }\r\n groupEl.append(groupChildren);\r\n sectionEl.append(groupEl);\r\n }\r\n else {\r\n sectionEl.append(groupChildren); // 1 or 0 children\r\n }\r\n });\r\n }\r\n return sectionEl;\r\n };\r\n Toolbar.prototype.updateTitle = function (text) {\r\n if (this.el) {\r\n this.el.find('h2').text(text);\r\n }\r\n };\r\n Toolbar.prototype.activateButton = function (buttonName) {\r\n if (this.el) {\r\n this.el.find('.fc-' + buttonName + '-button')\r\n .addClass(this.calendar.theme.getClass('stateActive'));\r\n }\r\n };\r\n Toolbar.prototype.deactivateButton = function (buttonName) {\r\n if (this.el) {\r\n this.el.find('.fc-' + buttonName + '-button')\r\n .removeClass(this.calendar.theme.getClass('stateActive'));\r\n }\r\n };\r\n Toolbar.prototype.disableButton = function (buttonName) {\r\n if (this.el) {\r\n this.el.find('.fc-' + buttonName + '-button')\r\n .prop('disabled', true)\r\n .addClass(this.calendar.theme.getClass('stateDisabled'));\r\n }\r\n };\r\n Toolbar.prototype.enableButton = function (buttonName) {\r\n if (this.el) {\r\n this.el.find('.fc-' + buttonName + '-button')\r\n .prop('disabled', false)\r\n .removeClass(this.calendar.theme.getClass('stateDisabled'));\r\n }\r\n };\r\n Toolbar.prototype.getViewsWithButtons = function () {\r\n return this.viewsWithButtons;\r\n };\r\n return Toolbar;\r\n}());\r\nexports.default = Toolbar;\r\n\n\n/***/ }),\n/* 258 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar options_1 = __webpack_require__(33);\r\nvar locale_1 = __webpack_require__(32);\r\nvar Model_1 = __webpack_require__(51);\r\nvar OptionsManager = /** @class */ (function (_super) {\r\n tslib_1.__extends(OptionsManager, _super);\r\n function OptionsManager(_calendar, overrides) {\r\n var _this = _super.call(this) || this;\r\n _this._calendar = _calendar;\r\n _this.overrides = $.extend({}, overrides); // make a copy\r\n _this.dynamicOverrides = {};\r\n _this.compute();\r\n return _this;\r\n }\r\n OptionsManager.prototype.add = function (newOptionHash) {\r\n var optionCnt = 0;\r\n var optionName;\r\n this.recordOverrides(newOptionHash); // will trigger this model's watchers\r\n for (optionName in newOptionHash) {\r\n optionCnt++;\r\n }\r\n // special-case handling of single option change.\r\n // if only one option change, `optionName` will be its name.\r\n if (optionCnt === 1) {\r\n if (optionName === 'height' || optionName === 'contentHeight' || optionName === 'aspectRatio') {\r\n this._calendar.updateViewSize(true); // isResize=true\r\n return;\r\n }\r\n else if (optionName === 'defaultDate') {\r\n return; // can't change date this way. use gotoDate instead\r\n }\r\n else if (optionName === 'businessHours') {\r\n return; // this model already reacts to this\r\n }\r\n else if (/^(event|select)(Overlap|Constraint|Allow)$/.test(optionName)) {\r\n return; // doesn't affect rendering. only interactions.\r\n }\r\n else if (optionName === 'timezone') {\r\n this._calendar.view.flash('initialEvents');\r\n return;\r\n }\r\n }\r\n // catch-all. rerender the header and footer and rebuild/rerender the current view\r\n this._calendar.renderHeader();\r\n this._calendar.renderFooter();\r\n // even non-current views will be affected by this option change. do before rerender\r\n // TODO: detangle\r\n this._calendar.viewsByType = {};\r\n this._calendar.reinitView();\r\n };\r\n // Computes the flattened options hash for the calendar and assigns to `this.options`.\r\n // Assumes this.overrides and this.dynamicOverrides have already been initialized.\r\n OptionsManager.prototype.compute = function () {\r\n var locale;\r\n var localeDefaults;\r\n var isRTL;\r\n var dirDefaults;\r\n var rawOptions;\r\n locale = util_1.firstDefined(// explicit locale option given?\r\n this.dynamicOverrides.locale, this.overrides.locale);\r\n localeDefaults = locale_1.localeOptionHash[locale];\r\n if (!localeDefaults) { // explicit locale option not given or invalid?\r\n locale = options_1.globalDefaults.locale;\r\n localeDefaults = locale_1.localeOptionHash[locale] || {};\r\n }\r\n isRTL = util_1.firstDefined(// based on options computed so far, is direction RTL?\r\n this.dynamicOverrides.isRTL, this.overrides.isRTL, localeDefaults.isRTL, options_1.globalDefaults.isRTL);\r\n dirDefaults = isRTL ? options_1.rtlDefaults : {};\r\n this.dirDefaults = dirDefaults;\r\n this.localeDefaults = localeDefaults;\r\n rawOptions = options_1.mergeOptions([\r\n options_1.globalDefaults,\r\n dirDefaults,\r\n localeDefaults,\r\n this.overrides,\r\n this.dynamicOverrides\r\n ]);\r\n locale_1.populateInstanceComputableOptions(rawOptions); // fill in gaps with computed options\r\n this.reset(rawOptions);\r\n };\r\n // stores the new options internally, but does not rerender anything.\r\n OptionsManager.prototype.recordOverrides = function (newOptionHash) {\r\n var optionName;\r\n for (optionName in newOptionHash) {\r\n this.dynamicOverrides[optionName] = newOptionHash[optionName];\r\n }\r\n this._calendar.viewSpecManager.clearCache(); // the dynamic override invalidates the options in this cache, so just clear it\r\n this.compute(); // this.options needs to be recomputed after the dynamic override\r\n };\r\n return OptionsManager;\r\n}(Model_1.default));\r\nexports.default = OptionsManager;\r\n\n\n/***/ }),\n/* 259 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar util_1 = __webpack_require__(4);\r\nvar options_1 = __webpack_require__(33);\r\nvar locale_1 = __webpack_require__(32);\r\nvar ViewSpecManager = /** @class */ (function () {\r\n function ViewSpecManager(optionsManager, _calendar) {\r\n this.optionsManager = optionsManager;\r\n this._calendar = _calendar;\r\n this.clearCache();\r\n }\r\n ViewSpecManager.prototype.clearCache = function () {\r\n this.viewSpecCache = {};\r\n };\r\n // Gets information about how to create a view. Will use a cache.\r\n ViewSpecManager.prototype.getViewSpec = function (viewType) {\r\n var cache = this.viewSpecCache;\r\n return cache[viewType] || (cache[viewType] = this.buildViewSpec(viewType));\r\n };\r\n // Given a duration singular unit, like \"week\" or \"day\", finds a matching view spec.\r\n // Preference is given to views that have corresponding buttons.\r\n ViewSpecManager.prototype.getUnitViewSpec = function (unit) {\r\n var viewTypes;\r\n var i;\r\n var spec;\r\n if ($.inArray(unit, util_1.unitsDesc) !== -1) {\r\n // put views that have buttons first. there will be duplicates, but oh well\r\n viewTypes = this._calendar.header.getViewsWithButtons(); // TODO: include footer as well?\r\n $.each(ViewRegistry_1.viewHash, function (viewType) {\r\n viewTypes.push(viewType);\r\n });\r\n for (i = 0; i < viewTypes.length; i++) {\r\n spec = this.getViewSpec(viewTypes[i]);\r\n if (spec) {\r\n if (spec.singleUnit === unit) {\r\n return spec;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n // Builds an object with information on how to create a given view\r\n ViewSpecManager.prototype.buildViewSpec = function (requestedViewType) {\r\n var viewOverrides = this.optionsManager.overrides.views || {};\r\n var specChain = []; // for the view. lowest to highest priority\r\n var defaultsChain = []; // for the view. lowest to highest priority\r\n var overridesChain = []; // for the view. lowest to highest priority\r\n var viewType = requestedViewType;\r\n var spec; // for the view\r\n var overrides; // for the view\r\n var durationInput;\r\n var duration;\r\n var unit;\r\n // iterate from the specific view definition to a more general one until we hit an actual View class\r\n while (viewType) {\r\n spec = ViewRegistry_1.viewHash[viewType];\r\n overrides = viewOverrides[viewType];\r\n viewType = null; // clear. might repopulate for another iteration\r\n if (typeof spec === 'function') { // TODO: deprecate\r\n spec = { 'class': spec };\r\n }\r\n if (spec) {\r\n specChain.unshift(spec);\r\n defaultsChain.unshift(spec.defaults || {});\r\n durationInput = durationInput || spec.duration;\r\n viewType = viewType || spec.type;\r\n }\r\n if (overrides) {\r\n overridesChain.unshift(overrides); // view-specific option hashes have options at zero-level\r\n durationInput = durationInput || overrides.duration;\r\n viewType = viewType || overrides.type;\r\n }\r\n }\r\n spec = util_1.mergeProps(specChain);\r\n spec.type = requestedViewType;\r\n if (!spec['class']) {\r\n return false;\r\n }\r\n // fall back to top-level `duration` option\r\n durationInput = durationInput ||\r\n this.optionsManager.dynamicOverrides.duration ||\r\n this.optionsManager.overrides.duration;\r\n if (durationInput) {\r\n duration = moment.duration(durationInput);\r\n if (duration.valueOf()) { // valid?\r\n unit = util_1.computeDurationGreatestUnit(duration, durationInput);\r\n spec.duration = duration;\r\n spec.durationUnit = unit;\r\n // view is a single-unit duration, like \"week\" or \"day\"\r\n // incorporate options for this. lowest priority\r\n if (duration.as(unit) === 1) {\r\n spec.singleUnit = unit;\r\n overridesChain.unshift(viewOverrides[unit] || {});\r\n }\r\n }\r\n }\r\n spec.defaults = options_1.mergeOptions(defaultsChain);\r\n spec.overrides = options_1.mergeOptions(overridesChain);\r\n this.buildViewSpecOptions(spec);\r\n this.buildViewSpecButtonText(spec, requestedViewType);\r\n return spec;\r\n };\r\n // Builds and assigns a view spec's options object from its already-assigned defaults and overrides\r\n ViewSpecManager.prototype.buildViewSpecOptions = function (spec) {\r\n var optionsManager = this.optionsManager;\r\n spec.options = options_1.mergeOptions([\r\n options_1.globalDefaults,\r\n spec.defaults,\r\n optionsManager.dirDefaults,\r\n optionsManager.localeDefaults,\r\n optionsManager.overrides,\r\n spec.overrides,\r\n optionsManager.dynamicOverrides // dynamically set via setter. highest precedence\r\n ]);\r\n locale_1.populateInstanceComputableOptions(spec.options);\r\n };\r\n // Computes and assigns a view spec's buttonText-related options\r\n ViewSpecManager.prototype.buildViewSpecButtonText = function (spec, requestedViewType) {\r\n var optionsManager = this.optionsManager;\r\n // given an options object with a possible `buttonText` hash, lookup the buttonText for the\r\n // requested view, falling back to a generic unit entry like \"week\" or \"day\"\r\n function queryButtonText(options) {\r\n var buttonText = options.buttonText || {};\r\n return buttonText[requestedViewType] ||\r\n // view can decide to look up a certain key\r\n (spec.buttonTextKey ? buttonText[spec.buttonTextKey] : null) ||\r\n // a key like \"month\"\r\n (spec.singleUnit ? buttonText[spec.singleUnit] : null);\r\n }\r\n // highest to lowest priority\r\n spec.buttonTextOverride =\r\n queryButtonText(optionsManager.dynamicOverrides) ||\r\n queryButtonText(optionsManager.overrides) || // constructor-specified buttonText lookup hash takes precedence\r\n spec.overrides.buttonText; // `buttonText` for view-specific options is a string\r\n // highest to lowest priority. mirrors buildViewSpecOptions\r\n spec.buttonTextDefault =\r\n queryButtonText(optionsManager.localeDefaults) ||\r\n queryButtonText(optionsManager.dirDefaults) ||\r\n spec.defaults.buttonText || // a single string. from ViewSubclass.defaults\r\n queryButtonText(options_1.globalDefaults) ||\r\n (spec.duration ? this._calendar.humanizeDuration(spec.duration) : null) || // like \"3 days\"\r\n requestedViewType; // fall back to given view name\r\n };\r\n return ViewSpecManager;\r\n}());\r\nexports.default = ViewSpecManager;\r\n\n\n/***/ }),\n/* 260 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nvar ArrayEventSource_1 = __webpack_require__(56);\r\nvar FuncEventSource_1 = __webpack_require__(223);\r\nvar JsonFeedEventSource_1 = __webpack_require__(224);\r\nEventSourceParser_1.default.registerClass(ArrayEventSource_1.default);\r\nEventSourceParser_1.default.registerClass(FuncEventSource_1.default);\r\nEventSourceParser_1.default.registerClass(JsonFeedEventSource_1.default);\r\n\n\n/***/ }),\n/* 261 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ThemeRegistry_1 = __webpack_require__(57);\r\nvar StandardTheme_1 = __webpack_require__(221);\r\nvar JqueryUiTheme_1 = __webpack_require__(222);\r\nvar Bootstrap3Theme_1 = __webpack_require__(262);\r\nvar Bootstrap4Theme_1 = __webpack_require__(263);\r\nThemeRegistry_1.defineThemeSystem('standard', StandardTheme_1.default);\r\nThemeRegistry_1.defineThemeSystem('jquery-ui', JqueryUiTheme_1.default);\r\nThemeRegistry_1.defineThemeSystem('bootstrap3', Bootstrap3Theme_1.default);\r\nThemeRegistry_1.defineThemeSystem('bootstrap4', Bootstrap4Theme_1.default);\r\n\n\n/***/ }),\n/* 262 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar Bootstrap3Theme = /** @class */ (function (_super) {\r\n tslib_1.__extends(Bootstrap3Theme, _super);\r\n function Bootstrap3Theme() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n return Bootstrap3Theme;\r\n}(Theme_1.default));\r\nexports.default = Bootstrap3Theme;\r\nBootstrap3Theme.prototype.classes = {\r\n widget: 'fc-bootstrap3',\r\n tableGrid: 'table-bordered',\r\n tableList: 'table',\r\n tableListHeading: 'active',\r\n buttonGroup: 'btn-group',\r\n button: 'btn btn-default',\r\n stateActive: 'active',\r\n stateDisabled: 'disabled',\r\n today: 'alert alert-info',\r\n popover: 'panel panel-default',\r\n popoverHeader: 'panel-heading',\r\n popoverContent: 'panel-body',\r\n // day grid\r\n // for left/right border color when border is inset from edges (all-day in agenda view)\r\n // avoid `panel` class b/c don't want margins/radius. only border color.\r\n headerRow: 'panel-default',\r\n dayRow: 'panel-default',\r\n // list view\r\n listView: 'panel panel-default'\r\n};\r\nBootstrap3Theme.prototype.baseIconClass = 'glyphicon';\r\nBootstrap3Theme.prototype.iconClasses = {\r\n close: 'glyphicon-remove',\r\n prev: 'glyphicon-chevron-left',\r\n next: 'glyphicon-chevron-right',\r\n prevYear: 'glyphicon-backward',\r\n nextYear: 'glyphicon-forward'\r\n};\r\nBootstrap3Theme.prototype.iconOverrideOption = 'bootstrapGlyphicons';\r\nBootstrap3Theme.prototype.iconOverrideCustomButtonOption = 'bootstrapGlyphicon';\r\nBootstrap3Theme.prototype.iconOverridePrefix = 'glyphicon-';\r\n\n\n/***/ }),\n/* 263 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar Bootstrap4Theme = /** @class */ (function (_super) {\r\n tslib_1.__extends(Bootstrap4Theme, _super);\r\n function Bootstrap4Theme() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n return Bootstrap4Theme;\r\n}(Theme_1.default));\r\nexports.default = Bootstrap4Theme;\r\nBootstrap4Theme.prototype.classes = {\r\n widget: 'fc-bootstrap4',\r\n tableGrid: 'table-bordered',\r\n tableList: 'table',\r\n tableListHeading: 'table-active',\r\n buttonGroup: 'btn-group',\r\n button: 'btn btn-primary',\r\n stateActive: 'active',\r\n stateDisabled: 'disabled',\r\n today: 'alert alert-info',\r\n popover: 'card card-primary',\r\n popoverHeader: 'card-header',\r\n popoverContent: 'card-body',\r\n // day grid\r\n // for left/right border color when border is inset from edges (all-day in agenda view)\r\n // avoid `table` class b/c don't want margins/padding/structure. only border color.\r\n headerRow: 'table-bordered',\r\n dayRow: 'table-bordered',\r\n // list view\r\n listView: 'card card-primary'\r\n};\r\nBootstrap4Theme.prototype.baseIconClass = 'fa';\r\nBootstrap4Theme.prototype.iconClasses = {\r\n close: 'fa-times',\r\n prev: 'fa-chevron-left',\r\n next: 'fa-chevron-right',\r\n prevYear: 'fa-angle-double-left',\r\n nextYear: 'fa-angle-double-right'\r\n};\r\nBootstrap4Theme.prototype.iconOverrideOption = 'bootstrapFontAwesome';\r\nBootstrap4Theme.prototype.iconOverrideCustomButtonOption = 'bootstrapFontAwesome';\r\nBootstrap4Theme.prototype.iconOverridePrefix = 'fa-';\r\n\n\n/***/ }),\n/* 264 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar BasicView_1 = __webpack_require__(67);\r\nvar MonthView_1 = __webpack_require__(246);\r\nViewRegistry_1.defineView('basic', {\r\n 'class': BasicView_1.default\r\n});\r\nViewRegistry_1.defineView('basicDay', {\r\n type: 'basic',\r\n duration: { days: 1 }\r\n});\r\nViewRegistry_1.defineView('basicWeek', {\r\n type: 'basic',\r\n duration: { weeks: 1 }\r\n});\r\nViewRegistry_1.defineView('month', {\r\n 'class': MonthView_1.default,\r\n duration: { months: 1 },\r\n defaults: {\r\n fixedWeekCount: true\r\n }\r\n});\r\n\n\n/***/ }),\n/* 265 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar AgendaView_1 = __webpack_require__(238);\r\nViewRegistry_1.defineView('agenda', {\r\n 'class': AgendaView_1.default,\r\n defaults: {\r\n allDaySlot: true,\r\n slotDuration: '00:30:00',\r\n slotEventOverlap: true // a bad name. confused with overlap/constraint system\r\n }\r\n});\r\nViewRegistry_1.defineView('agendaDay', {\r\n type: 'agenda',\r\n duration: { days: 1 }\r\n});\r\nViewRegistry_1.defineView('agendaWeek', {\r\n type: 'agenda',\r\n duration: { weeks: 1 }\r\n});\r\n\n\n/***/ }),\n/* 266 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar ListView_1 = __webpack_require__(248);\r\nViewRegistry_1.defineView('list', {\r\n 'class': ListView_1.default,\r\n buttonTextKey: 'list',\r\n defaults: {\r\n buttonText: 'list',\r\n listDayFormat: 'LL',\r\n noEventsMessage: 'No events to display'\r\n }\r\n});\r\nViewRegistry_1.defineView('listDay', {\r\n type: 'list',\r\n duration: { days: 1 },\r\n defaults: {\r\n listDayFormat: 'dddd' // day-of-week is all we need. full date is probably in header\r\n }\r\n});\r\nViewRegistry_1.defineView('listWeek', {\r\n type: 'list',\r\n duration: { weeks: 1 },\r\n defaults: {\r\n listDayFormat: 'dddd',\r\n listDayAltFormat: 'LL'\r\n }\r\n});\r\nViewRegistry_1.defineView('listMonth', {\r\n type: 'list',\r\n duration: { month: 1 },\r\n defaults: {\r\n listDayAltFormat: 'dddd' // day-of-week is nice-to-have\r\n }\r\n});\r\nViewRegistry_1.defineView('listYear', {\r\n type: 'list',\r\n duration: { year: 1 },\r\n defaults: {\r\n listDayAltFormat: 'dddd' // day-of-week is nice-to-have\r\n }\r\n});\r\n\n\n/***/ }),\n/* 267 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n\n\n/***/ })\n/******/ ]);\n});","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h1',{staticClass:\"display-heading\"},[_vm._v(\"My Calendar\")]),_c('div',{staticClass:\"mb-3\"},[_c('router-link',{staticClass:\"btn btn-primary btn-primary-insv\",attrs:{\"to\":{'name': 'doctor-create-timeslots'}}},[_vm._v(\"Set Free Time Slots\")])],1),_vm._m(0)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{attrs:{\"id\":\"calendar\"}})])}]\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=01114b3c&\"\nimport script from \"./index.vue?vue&type=script&lang=js&\"\nexport * from \"./index.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""}