{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/@fullcalendar/core/main.esm.js","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./node_modules/css-loader/dist/runtime/api.js","webpack:///./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack:///(webpack)/buildin/module.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/bootstrap/js/dist/tooltip.js","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///./node_modules/bootstrap/js/dist/util.js","webpack:///./node_modules/@fullcalendar/daygrid/main.esm.js","webpack:///./node_modules/@fullcalendar/list/main.esm.js","webpack:///./app/javascript/packs/events.js","webpack:///./node_modules/bootstrap/js/dist/popover.js","webpack:///./node_modules/@fullcalendar/core/main.css?fa44","webpack:///./node_modules/@fullcalendar/core/main.css","webpack:///./node_modules/@fullcalendar/daygrid/main.css?9c5d","webpack:///./node_modules/@fullcalendar/daygrid/main.css","webpack:///./node_modules/@fullcalendar/list/main.css?094a","webpack:///./node_modules/@fullcalendar/list/main.css","webpack:///./node_modules/bootstrap/scss/bootstrap.scss?3a49","webpack:///./node_modules/bootstrap/scss/bootstrap.scss"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_typeof","obj","iterator","constructor","elementPropHash","className","colSpan","rowSpan","containerTagHash","createElement","tagName","attrs","content","el","document","attrName","applyStyle","setAttribute","innerHTML","appendToElement","htmlToElement","html","trim","container","computeContainerTag","firstChild","htmlToElements","Array","slice","childNodes","htmlToNodeList","substr","normalizeContent","length","appendChild","prependToElement","parent","newEls","afterEl","insertBefore","insertAfterElement","refEl","nextSibling","parentNode","Node","removeElement","removeChild","matchesMethod","Element","matches","matchesSelector","msMatchesSelector","closestMethod","closest","selector","this","documentElement","contains","elementMatches","parentElement","nodeType","elementClosest","findElements","containers","HTMLElement","allMatches","querySelectorAll","j","push","findChildren","parents","children","childNode","PIXEL_PROP_RE","props","propName","applyStyleProp","val","style","test","isRtlScrollbarOnLeft","getIsRtlScrollbarOnLeft","outerEl","position","top","left","border","padding","overflow","direction","body","res","getBoundingClientRect","computeIsRtlScrollbarOnLeft","sanitizeScrollbarWidth","width","Math","max","round","computeEdges","getPadding","computedStyle","window","getComputedStyle","borderLeft","parseInt","borderLeftWidth","borderRight","borderRightWidth","borderTop","borderTopWidth","borderBottom","borderBottomWidth","scrollbarLeftRight","offsetWidth","clientWidth","scrollbarBottom","offsetHeight","clientHeight","scrollbarLeft","scrollbarRight","paddingLeft","paddingRight","paddingTop","paddingBottom","computeRect","rect","pageXOffset","pageYOffset","right","bottom","computeHeightAndMargins","height","computeVMargins","computed","marginTop","marginBottom","computeClippingRect","overflowY","overflowX","getClippingParents","map","goWithinPadding","outerRect","edges","computeInnerRect","concat","reduce","rect0","rect1","rect2","min","intersectRects","listenBySelector","eventType","handler","realHandler","ev","matchedChild","target","addEventListener","removeEventListener","DAY_IDS","addWeeks","a","dateToUtcArray","arrayToUtcDate","addDays","addMs","diffWeeks","m0","m1","diffDays","valueOf","diffWholeDays","timeAsMs","startOfDay","getUTCFullYear","getUTCMonth","getUTCDate","weekOfGivenYear","marker","year","dow","doy","firstWeekStart","firstWeekOffset","dayStart","days","floor","fwd","getUTCDay","dateToLocalArray","date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","arrayToLocalDate","Date","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","UTC","apply","isValidDate","isNaN","PARSE_RE","createDuration","input","unit","_a","exec","sign","years","months","milliseconds","parseString","normalizeObject","month","day","getWeeksFromInput","hours","hour","minutes","minute","seconds","second","millisecond","ms","weeks","week","durationsEqual","d0","d1","asRoughDays","dur","asRoughMs","greatestDurationDenominator","dontReturnWeeks","compensateScroll","rowEl","scrollbarWidths","marginLeft","marginRight","uncompensateScroll","distributeHeight","els","availableHeight","shouldRedistribute","minOffset1","minOffset2","flexEls","flexOffsets","flexHeights","usedHeight","undistributeHeight","forEach","minOffset","naturalHeight","naturalOffset","newHeight","matchCellWidths","maxInnerWidth","innerEl","innerWidth_1","subtractInnerElHeight","reflowStyleProps","diff","resetStyleProps","compareByFieldSpec","obj0","obj1","fieldSpec","func","b","String","localeCompare","flexibleCompare","field","order","capitaliseFirstLetter","str","charAt","toUpperCase","padStart","len","isInt","applyAll","functions","thisObj","args","ret","firstDefined","_i","arguments","undefined","debounce","wait","timeout","context","timestamp","result","later","last","setTimeout","refineProps","rawProps","processors","defaults","leftoverProps","refined","processor","Function","Number","Boolean","computeAlignedDayRange","timedRange","dayCnt","start","end","computeVisibleDayRange","nextDayThreshold","startDay","endDay","endTimeMS","isMultiDayRange","range","visibleRange","diffDates","date0","date1","dateEnv","largeUnit","diffWholeYears","diffWholeMonths","m0day","m1day","_extendStatics","setPrototypeOf","__proto__","__extends","__","_assign","assign","expandRecurringRanges","eventDef","duration","framingRange","recurringTypes","markers","recurringDef","typeId","expand","typeData","subtract","allDay","mergeProps","propObjs","complexProps","complexObjs","dest","unshift","filterHash","hash","filtered","mapHash","newHash","arrayToHash","a_1","hashValuesToArray","isPropsEqual","parseEvents","rawEvents","sourceId","calendar","allowOpenRange","eventStore","defs","instances","rawEvents_1","tuple","parseEvent","eventTupleToStore","def","defId","instance","instanceId","expandRecurring","defaultAllDayEventDuration","defaultTimedEventDuration","starts_1","pluginSystem","hooks","createEventInstance","add","getRelevantEvents","def_1","newStore","filterEventStoreDefs","lookDef","def0","def1","groupId","transformEachRawEvent","refinedEvents","rawEvents_2","rawEvent","refinedEvent","mergeEventStores","store0","store1","filterFunc","parseRange","createMarker","invertRanges","ranges","constraintRange","dateRange","invertedRanges","sort","compareRanges","range0","range1","intersectRanges","newRange","rangesEqual","rangesIntersect","rangeContainsRange","outerRange","innerRange","rangeContainsMarker","isArraysEqual","a0","a1","memoize","workerFunc","EXTENDED_SETTINGS_AND_SEVERITIES","separator","omitZeroMinute","meridiem","omitCommas","STANDARD_DATE_PROP_SEVERITIES","timeZoneName","era","weekday","MERIDIEM_RE","COMMA_RE","MULTI_SPACE_RE","LTR_RE","UTC_RE","NativeFormatter","formatSettings","standardDateProps","extendedSettings","severity","name_1","buildFormattingFunc","format","formatRange","diffSeverity","ca","getMarkerYear","getMarkerMonth","getMarkerDay","computeMarkerDiffSeverity","calendarSystem","biggestUnitForPartial","full0","full1","partialFormattingFunc","options","biggestUnit","partialOptions","name_2","computePartialFormattingOptions","partial0","partial1","insertion","i0","found0","indexOf","before0","after0","i1","found1","before1","after1","before","after","findCommonInsertion","getLargestUnit","standardDatePropCnt","keys","formatTimeZoneOffset","timeZoneOffset","num","weekLabel","locale","display","parts","simpleNumberFormat","isRtl","reverse","join","formatWeekNumber","computeWeekNumber","sanitizeSettings","timeZone","zeroFormat","normalFormat","Intl","DateTimeFormat","codes","zeroProps","replace","tzoStr","replaced","injectTzoStr","toLocaleLowerCase","postProcess","buildNativeFormattingFunc","CmdFormatter","cmdStr","cmdFormatter","createVerboseFormattingArg","FuncFormatter","createFormatter","defaultSeparator","doIso","abs","mins","startInfo","expandZonedMarker","localeCodes","dateInfo","markerToArray","array","EventSourceApi","internalEventSource","remove","dispatch","type","refetch","sourceIds","publicId","configurable","meta","url","EventApi","_calendar","_def","_instance","setProp","_b","DATE_PROPS","NON_DATE_PROPS","mutate","standardProps","UNSCOPED_EVENT_UI_PROPS","ui","backgroundColor","borderColor","startEditable","durationEditable","setExtendedProp","extendedProps","setStart","startInput","startDelta","granularity","maintainDuration","datesDelta","setEnd","endInput","endDelta","hasEnd","setDates","instanceRange","moveStart","deltaInput","delta","moveEnd","moveDates","setAllDay","opt","formatInput","formatter","forcedStartTzo","forcedEndTzo","forcedTzo","mutation","fromApi","state","eventSources","toDate","title","rendering","constraints","overlap","allows","textColor","classNames","sliceEventStore","eventUiBases","inverseBgByGroupId","inverseBgByDefId","defByGroupId","bgRanges","fgRanges","eventUis","compileEventUis","origRange","normalRange","slicedRange","isStart","isEnd","invertedRanges_1","invertedRange","invertedRanges_2","bg","fg","filterSegsViaEls","view","segs","isMirror","hasPublicHandlers","filter","seg","custom","publiclyTrigger","event","eventRange","segs_1","setElSeg","fcSeg","getElSeg","eventDefs","compileEventUi","uis","combineEventUis","applyMutationToEventDef","eventConfig","appliers","copy","appliers_1","applier","applyMutationToEventInstance","eventInstance","forceAllDay","clearEnd","getDefaultEventEnd","reduceEventStore","action","dateProfile","eventSource","fetchId","fetchRange","latestFetchId","subset","calEachTransform","sourceEachTransform","eventDataTransform","transformRawEvents","excludeEventsBySourceId","receiveRawEvents","expandRange","addEvent","activeRange","oldDateEnv","newDateEnv","canComputeOffset","rezoneDates","relevant","eventConfigBase","eventConfigs","eventDefMutationAppliers","applyMutationToEventStore","applyMutationToRelated","excludeInstances","removals","isNewPropsValid","newProps","businessHours","dateSelection","eventSelection","eventDrag","eventResize","isPropsValid","dateSpanMeta","filterConfig","interaction","subjectEventStore","mutatedEvents","subjectDefs","subjectInstances","subjectConfigs","isEvent","selectionConfig","otherEventStore","affectedEvents","otherDefs","otherInstances","otherConfigs","subjectInstanceId","subjectInstance","subjectRange","subjectConfig","subjectDef","allConstraintsPass","overlapFunc","otherInstanceId","otherInstance","calendarEventStore","subjectAllow","subjectDateSpan","origDef","origInstance","eventApi","buildDateSpanApi","isInteractionPropsValid","relevantEventStore","relevantDefs","relevantInstances","selection","selectionRange","relevantInstanceId","relevantInstance","selectionAllow","fullDateSpan","isDateSelectionPropsValid","businessHoursUnexpanded","constraints_1","anyRangesContainRange","constraintToRanges","constraint","eventStoreToRanges","outerRanges","outerRanges_1","htmlEscape","cssToStr","cssProps","statements","parseClassName","raw","isArray","split","editable","allow","color","processUnscopedUiProps","leftovers","normalizeConstraint","processScopedUiProps","prefix","rawScoped","rawUnscoped","wasFound","scopedKey","EMPTY_EVENT_UI","combineTwoEventUis","item0","item1","id","uid","allDayDefault","source","computeIsAllDayDefault","leftovers0","recurringRes","eventInput","localLeftovers","parsed","parse","allDayGuess","parseRecurring","parseEventDef","leftovers1","singleRes","startMeta","endMeta","pluckDateProps","startMarker","endMarker","createMarkerMeta","isTimeUnspecified","parseSingle","preLeftovers","pluckNonDateProps","eventDefParsers","newLeftovers","eventDefParser","freeze","DEF_DEFAULTS","startTime","endTime","daysOfWeek","parseBusinessHours","rawDefs","rawDef","refineInputs","memoizeRendering","renderFunc","unrenderFunc","dependencies","thisContext","prevArgs","dependents","unrender","dependents_1","dependencies_1","EMPTY_EVENT_STORE","Splitter","getKeysForEventDefs","_getKeysForEventDefs","splitDateSelection","_splitDateSpan","splitEventStore","_splitEventStore","splitIndividualUi","_splitIndividualUi","splitEventDrag","_splitInteraction","splitEventResize","eventUiBuilders","splitProps","_this","keyInfos","getKeyInfo","defKeys","dateSelections","individualUi","eventStores","eventDrags","eventResizes","info","buildEventUiForKey","keyInfo","buildEventUi","dateSpan","dateSpans","keys_1","getKeysForDateSpan","getKeysForEventDef","splitStores","_c","splitHashes","splitStates","affectedStores_1","mutatedKeysByDefId","mutatedStores_1","populate","origSeg","allUi","eventUiForKey","baseParts","stuff","buildGotoAnchorHtml","component","gotoOptions","innerHtml","forceOff","finalOptions","formatIso","omitTime","attrsToStr","JSON","stringify","getAllDayHtml","getDayClasses","noThemeHighlight","todayStart","todayEnd","theme","classes","currentRange","getNow","getClass","EmitterMixin","_super","on","addToHash","_handlers","one","_oneHandlers","off","removeFromHash","trigger","triggerWith","hasHandlers","Mixin","mixInto","destClass","mixIntoObj","destObj","getOwnPropertyNames","mixOver","PositionCache","originEl","isHorizontal","isVertical","build","originClientRect","buildElHorizontals","buildElVerticals","originClientLeft","lefts","rights","originClientTop","tops","bottoms","leftToIndex","leftPosition","topToIndex","topPosition","getWidth","leftIndex","getHeight","topIndex","ScrollController","getMaxScrollTop","getScrollHeight","getClientHeight","getMaxScrollLeft","getScrollWidth","getClientWidth","canScrollVertically","canScrollHorizontally","canScrollUp","getScrollTop","canScrollDown","canScrollLeft","getScrollLeft","canScrollRight","ElementScrollController","scrollTop","scrollLeft","setScrollTop","setScrollLeft","scrollWidth","scrollHeight","ScrollComponent","WindowScrollController","scroll","applyOverflow","clear","setHeight","destroy","lockOverflow","getScrollbarWidths","Theme","calendarOptions","processIconOverride","iconOverrideOption","setIconOverride","iconOverrideHash","iconClassesCopy","buttonName","iconClasses","applyIconOverridePrefix","iconOverridePrefix","getIconClass","baseIconClass","getCustomButtonIconClass","customButtonProps","iconOverrideCustomButtonOption","guid","Component","isView","addEqualityFuncs","newFuncs","equalityFuncs","receiveProps","oldProps","comboProps","anyChanges","recycleProps","render","DateComponent","buildPositionCaches","queryHit","positionLeft","positionTop","elWidth","elHeight","isInteractionValid","validRange","isDateSelectionValid","publiclyTriggerAfterSizing","triggerRenderedSegs","isMirrors","loadingLevel","afterSizingTriggers","_eventsPositioned","triggerWillRemoveSegs","segs_2","segs_3","isValidSegDownEl","isPopover","isInPopover","isValidDateDownEl","segEl","fgSegSelector","classList","bgSegSelector","uid$1","createPlugin","deps","reducers","isDraggableTransformers","eventDragMutationMassagers","dateSelectionTransformers","datePointTransforms","dateSpanTransforms","views","viewPropsTransformers","externalDefTransforms","eventResizeJoinTransforms","viewContainerModifiers","eventDropTransformers","componentInteractions","calendarInteractions","themeClasses","eventSourceDefs","namedTimeZonedImpl","defaultView","elementDraggingImpl","optionChangeHandlers","PluginSystem","addedHash","plugin","dep","hooks0","hooks1","ArrayEventSourcePlugin","ignoreRange","parseMeta","events","fetch","arg","success","FuncEventSourcePlugin","failure","isResolved","wrappedSuccess","wrappedFailure","then","unpromisify","startStr","endStr","requestJson","method","params","successCallback","failureCallback","encodeParams","injectQueryStringParams","xhr","XMLHttpRequest","open","setRequestHeader","onload","status","responseText","err","onerror","send","encodeURIComponent","JsonFeedEventSourcePlugin","extraParams","startParam","endParam","timeZoneParam","requestParams","customRequestParams","buildRequestParams","errorMessage","message","SimpleRecurrencePlugin","startRecur","endRecur","anyValid","clippedFramingRange","dowHash","dayMarker","instanceStarts","instanceStart","expandRanges","DefaultOptionChangeHandlers","_events","deepEqual","handleEventSources","plugins","inputs","addPluginInputs","unfoundSources","newInputs","inputs_1","inputFound","_raw","splice","unfoundSources_1","unfoundSource","newInputs_1","newInput","addEventSource","globalDefaults","defaultRangeSeparator","titleRangeSeparator","forceEventDuration","columnHeader","aspectRatio","header","center","weekends","weekNumbers","weekNumberCalculation","scrollTime","minTime","maxTime","showNonCurrentDates","lazyFetching","locales","timeGridEventMinHeight","themeSystem","dragRevertDuration","dragScroll","allDayMaintainDuration","unselectAuto","dropAccept","eventOrder","eventLimit","eventLimitClick","dayPopoverFormat","handleWindowResize","windowResizeDelay","longPressDelay","eventDragMinDistance","rtlDefaults","buttonIcons","prev","next","prevYear","nextYear","complexOptions","INTERNAL_PLUGINS","RAW_EN_LOCALE","code","dir","buttonText","today","list","allDayText","eventLimitText","noEventsMessage","parseRawLocales","explicitRawLocales","defaultCode","globalArray","globalObject","allRawLocales","rawLocaleMap","en","allRawLocales_1","rawLocale","buildLocale","inputSingular","available","codeArg","simpleId","queryRawLocale","parseLocale","queryLocale","merged","NumberFormat","OptionsManager","overrides","dynamicOverrides","compute","updates","isDynamic","overrideHash","removals_1","localeDefaults","dirDefaults","calendarSystemClassMap","theClass","GregorianCalendarSystem","arrayToMarker","arr","ISO_RE","DateEnv","settings","isNamedTimeZone","namedTimeZoneImpl","createCalendarSystem","weekDow","weekDoy","firstDay","weekNumberFunc","createNowMarker","timestampToMarker","getYear","addYears","addMonths","greatestWholeUnit","diffWholeWeeks","diffHours","diffMinutes","diffSeconds","countDurationsBetween","asRoughMonths","startOf","startOfYear","startOfMonth","startOfWeek","startOfHour","startOfMinute","startOfSecond","y","w","nextW","weekOfYear","dateOptions","offsetForMarker","isEndExclusive","extraOptions","omitTimeZoneOffset","stripZeroTime","toISOString","buildIsoString","timestampToArray","getTimezoneOffset","offsetForArray","SIMPLE_SOURCE_PROPS","uid$2","doesSourceNeedRange","sourceDefId","parseEventSource","parseEventSourceProps","isFetching","reduceEventSources","eventSourceHash","sources","sources_1","fetchDirtySources","addSources","fetchSourcesByIds","excludeStaticSources","sourceHash","receiveResponse","uid$3","isSourceDirty","prevSources","sourceIdHash","nextSources","fetchSource","sourceDef","calSuccessRes","sourceSuccessRes","calSuccess","error","callFailure","console","warn","DateProfileGenerator","viewSpec","initHiddenDays","buildPrev","currentDateProfile","currentDate","prevDate","currentRangeUnit","dateIncrement","buildNext","nextDate","forceToValid","currentInfo","isRangeAllDay","renderRange","isValid","buildValidRange","trimHiddenDays","buildCurrentRangeInfo","buildRenderRange","adjustActiveRange","buildDateIncrement","getRangeOption","dayCount","durationUnit","buildRangeFromDuration","buildRangeFromDayCount","buildCustomVisibleRange","getFallbackDuration","usesMinMaxTime","dateIncrementInput","dateIncrementDuration","alignment","dateAlignment","computeRes","isHiddenDay","skipHiddenDays","customAlignment","runningCount","fallback","otherArgs","hiddenDays","isHiddenDayHash","Error","inc","isExclusive","viewType","currentViewType","reduceViewType","newDateProfile","dateProfileGenerators","dateMarker","generator","p0","p1","reduceDateProfile","nextState","reduceCurrentDate","reduceDateSelection","reduceSelectedEvent","reduceEventDrag","reduceEventResize","eventSourceLoadingLevel","computeLoadingLevel","reducerFunc","newDate","currentSelection","currentInstanceId","eventInstanceId","currentDrag","newDrag","currentResize","newResize","cnt","STANDARD_PROPS","parseDateSpan","defaultDuration","span","parseOpenDateSpan","fabricateEventRange","ensureViewDef","defaultConfigs","overrideConfigs","viewDef","defaultConfig","overrideConfig","queryProp","superType","findViewNameBySubclass","superDef","buildViewDef","viewSubclass","configs","superProto","getPrototypeOf","parseViewConfigs","parseViewConfig","VIEW_DEF_PROPS","buildViewSpecs","defaultInputs","optionsManager","compileViewDefs","durationInput","singleUnit","singleUnitOverrides","denom","queryButtonText","buttonTextMap","buttonTextKey","buttonTextOverride","buttonTextDefault","buildViewSpec","Toolbar","extraClassName","_renderLayout","renderLayout","unrenderLayout","_updateTitle","updateTitle","_updateActiveButton","updateActiveButton","_updateToday","updateToday","_updatePrev","updatePrev","_updateNext","updateNext","layout","activeButton","isTodayEnabled","isPrevEnabled","isNextEnabled","viewsWithButtons","renderSection","buttonStr","viewSpecs","sectionEl","calendarCustomButtons","customButtons","calendarButtonTextOverrides","calendarButtonText","buttonGroupStr","groupEl","groupChildren","isOnlyButtons","buttonClick","buttonIcon","buttonInnerHtml","buttonClasses","buttonEl","buttonAriaAttr","click","text","changeView","buttonGroupClassName","toggleButtonEnabled","titleEl","innerText","bool","disabled","CalendarComponent","_renderToolbars","renderToolbars","buildViewPropTransformers","contentEl","modifyViewContainer","toggleElClassNames","computeTitle","footer","dirClassName","themeClassName","freezeHeight","dateProfileGenerator","renderView","updateSize","thawHeight","headerLayout","footerLayout","now","todayInfo","prevInfo","nextInfo","toolbarProps","addScroll","queryScroll","viewProps","transformers_1","transformer","transform","isResize","isHeightAuto","computeHeightVars","viewHeight","updateNowIndicator","popScroll","heightInput","contentHeightInput","queryToolbarsHeight","parentEl","viewOptions","titleFormat","computeTitleFormat","theClasses","Interaction","interactionSettingsStore","EventClicking","handleSegClick","hasUrlContainer","querySelector","href","jsEvent","defaultPrevented","location","EventHovering","handleEventElRemove","currentSegEl","handleSegLeave","handleSegEnter","triggerEvent","onMouseEnter","onMouseLeave","currentMatchedChild","removeHoverListeners","realOnMouseLeave_1","publicEvName","StandardTheme","widget","widgetHeader","widgetContent","buttonGroup","button","buttonActive","popoverHeader","popoverContent","headerRow","dayRow","listView","close","Calendar","equalityFunc","cachedRes","buildDateEnv","buildTheme","buildEventUiSingleBase","_buildEventUiSingleBase","buildSelectionConfig","_buildSelectionConfig","buildEventUiBySource","newRes","buildEventUiBases","interactionsStore","actionQueue","isReducing","needsRerender","needsFullRerender","isRendering","renderingPauseDepth","buildDelayedRerender","isViewUpdated","isDatesUpdated","isEventsUpdated","handleOptions","hydrate","calendarInteractionClass","pluginInputs","pluginDefs","pluginInputs_1","pluginInput","globalName","refinePluginDefs","pluginDefs_1","pluginDef","requestRerender","renderableEventStore","bindHandlers","executeRender","unbindHandlers","removeNavLinkListener","anchorEl","getAttribute","customAction","viewOpt","zoomTo","windowResizeProxy","windowResize","buildInitialState","rawSources","singleRawSource","rawSources_1","batchRendering","getInitialDate","oldState","shift","newState","needsFull","delayedRerender","tryRerender","renderComponent","savedScroll","eventUiSingleBase","eventUiBySource","applyScroll","releaseAfterSizingTriggers","setOption","mutateOptions","getOption","viewOpts","changeHandlers","normalUpdates","specialUpdates","isTimeZoneDirty","isSizeDirty","anyDifficultOptions","name_3","pluginHooks","rerenderDelay","availableRawLocales","dateProfileGeneratorClass","getAvailableLocaleCodes","rawOpts","eventEditable","optHandler","name_4","isValidViewType","dateOrRange","unselect","spec","getUnitViewSpec","viewTypes","defaultDateInput","gotoDate","zonedDateInput","incrementDate","formatDate","isHandlingWindowResize","registerInteractiveComponent","settingsInput","useEventCenter","parseInteractionSettings","interactions","interactionClass","unregisterInteractiveComponent","select","dateOrObj","endDate","triggerDateSelect","pev","triggerDateUnselect","origEvent","triggerDateClick","dayEl","buildDatePointApi","dateStr","sourceInput","sourceApi","getEventSourceById","getEventById","getEvents","eventApis","removeAllEvents","rerenderEvents","getEventSources","sourceApis","internalId","removeAllEventSources","refetchEvents","scrollToTime","timeInput","scrollToDuration","View","renderDatesMem","renderDatesWrap","unrenderDatesWrap","renderBusinessHoursMem","renderBusinessHours","unrenderBusinessHours","renderDateSelectionMem","renderDateSelectionWrap","unrenderDateSelectionWrap","renderEventsMem","renderEvents","unrenderEvents","renderEventSelectionMem","renderEventSelectionWrap","unrenderEventSelectionWrap","renderEventDragMem","renderEventDragWrap","unrenderEventDragWrap","renderEventResizeMem","renderEventResizeWrap","unrenderEventResizeWrap","eventOrderSpecs","token","specs","tokens","substring","parseFieldSpecs","initialize","isAuto","updateBaseSize","renderDates","startNowIndicator","stopNowIndicator","unrenderDates","renderDateSelection","unrenderDateSelection","sliceEvents","computeEventDraggable","eventUi","transformers","computeEventStartResizable","computeEventEndResizable","renderEventSelection","unrenderEventSelection","renderEventDrag","unrenderEventDrag","renderEventResize","unrenderEventResize","update","delay","getNowIndicatorUnit","initialNowDate","initialNowQueriedMs","nowIndicatorTimeoutID","nowIndicatorIntervalID","setInterval","unrenderNowIndicator","renderNowIndicator","isNowIndicatorRendered","clearTimeout","clearInterval","queuedScroll","applyQueuedScroll","queryDateScroll","computeDateScroll","applyDateScroll","FgEventRenderer","renderSegs","mirrorInfo","rangeUpdated","renderSegEls","attachSegs","_segs","detachSegs","displayEventTime","displayEventEnd","eventTimeFormat","computeEventTimeFormat","computeDisplayEventTime","computeDisplayEventEnd","renderSegHtml","getSegClasses","isDraggable","isResizable","isDragging","isResizing","getTimeText","displayEnd","_getTimeText","getSkinCss","sortEventSegs","objs","buildSegCompareObj","fieldSpecs","cmp","compareByFieldSpecs","_seg","computeSizes","force","computeSegSizes","assignSizes","assignSegSizes","hideByHash","visibility","showByHash","selectByInstanceId","unselectByInstanceId","FillRenderer","fillSegTag","dirtySizeFlags","containerElsByType","segsByType","getSegsByType","renderedSegs","containerEls","css","toLowerCase","ElementDragging","emitter","setMirrorIsVisible","setMirrorNeedsRevert","setAutoScrollEnabled","renderDateCell","datesRepDistinctDays","colCnt","colHeadFormat","colspan","otherAttrs","isDateValid","columnHeaderHtml","columnHeaderText","DayHeader","thead","dates","renderIntroHtml","computeFallbackHeaderFormat","dates_1","DaySeries","indices","dayIndex","sliceRange","firstIndex","getDateDayIndex","lastIndex","clippedFirstIndex","clippedLastIndex","ceil","dayOffset","DayTable","daySeries","breakOnWeeks","daysPerRow","rowCnt","cells","buildCells","headerDates","buildHeaderDates","rows","row","col","buildCell","seriesSeg","index","nextIndex","firstCol","lastCol","Slicer","sliceBusinessHours","_sliceBusinessHours","sliceDateSelection","_sliceDateSpan","_sliceEventStore","sliceEventDrag","_sliceInteraction","sliceEventResize","sliceProps","extraArgs","eventSegs","dateSelectionSegs","businessHourSegs","fgEventSegs","bgEventSegs","sliceNowDate","computeActiveRange","rangeRes","sliceEventRanges","affectedInstances","sourceSeg","eventRanges","eventRanges_1","sliceEventRange","isComponentAllDay","global","factory","noGlobal","getProto","_slice","class2type","toString","hasOwn","fnToString","ObjectFunctionString","support","isFunction","isWindow","preservedScriptAttributes","src","nonce","noModule","DOMEval","node","doc","script","head","toType","jQuery","fn","init","rtrim","isArrayLike","jquery","toArray","pushStack","elems","merge","prevObject","each","callback","elem","first","eq","extend","copyIsArray","clone","deep","isPlainObject","expando","random","isReady","msg","noop","proto","Ctor","isEmptyObject","globalEval","makeArray","results","inArray","grep","invert","callbackExpect","Sizzle","Expr","getText","isXML","tokenize","compile","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","pop","push_native","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","_","escaped","escapedWhitespace","high","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","inDisabledFieldset","addCombinator","nodeName","e","seed","nid","match","groups","newSelector","newContext","ownerDocument","getElementById","getElementsByTagName","getElementsByClassName","qsa","toSelector","testContext","qsaError","removeAttribute","cache","cacheLength","markFunction","assert","addHandle","attrHandle","siblingCheck","cur","sourceIndex","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","hasCompare","subWindow","attachEvent","createComment","getById","getElementsByName","attrId","find","getAttributeNode","tag","tmp","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","expr","elements","attr","specified","escape","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","nodeValue","selectors","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","what","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","useCache","lastChild","uniqueID","pseudo","setFilters","idx","matched","matcher","unmatched","lang","elemLang","activeElement","hasFocus","tabIndex","checked","selected","selectedIndex","radio","checkbox","file","password","image","submit","reset","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","compiled","defaultValue","unique","isXMLDoc","escapeSelector","_dir","until","truncate","is","_siblings","rneedsContext","needsContext","rsingleTag","winnow","qualifier","not","self","rootjQuery","root","parseHTML","ready","rparentsprev","guaranteedUnique","contents","sibling","has","targets","prevAll","addBack","parentsUntil","nextAll","nextUntil","prevUntil","siblings","contentDocument","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","promise","fail","Callbacks","flag","createOptions","firing","memory","_fired","_locked","queue","firingIndex","fire","once","stopOnFalse","empty","disable","lock","locked","fireWith","fired","Deferred","tuples","_state","_promise","always","deferred","pipe","fns","newDefer","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","stateString","when","singleValue","remaining","resolveContexts","resolveValues","master","updateFunc","rerrorNames","stack","readyException","readyList","completed","readyWait","readyState","doScroll","access","chainable","emptyGet","bulk","rmsPrefix","rdashAlpha","fcamelCase","all","letter","camelCase","string","acceptData","owner","Data","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","getData","_data","removeData","_removeData","dequeue","startLength","_queueHooks","stop","setter","clearQueue","count","defer","pnum","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","swap","old","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","showHide","show","values","hide","toggle","rcheckableType","rtagName","rscriptType","wrapMap","option","tr","td","_default","getAll","setGlobalEval","refElements","optgroup","tbody","tfoot","colgroup","caption","th","div","buildFragment","scripts","ignored","wrap","attached","fragment","createDocumentFragment","nodes","htmlPrefilter","createTextNode","checkClone","cloneNode","noCloneChecked","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","expectSync","safeActiveElement","_on","types","origFn","leverageNative","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","Event","handleObjIn","eventHandle","handleObj","handlers","namespaces","origType","elemData","handle","triggered","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","originalEvent","writable","load","noBubble","beforeunload","returnValue","isDefaultPrevented","relatedTarget","timeStamp","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","focus","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rxhtmlTag","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","pdataOld","pdataCur","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","_evalUrl","_remove","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","rboxStyle","curCSS","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","measure","parseFloat","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","cssPrefixes","emptyStyle","vendorProps","finalPropName","_final","capName","vendorPropName","rdisplayswap","rcustomProp","cssShow","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","origName","isCustomProp","setProperty","isFinite","scrollboxSizeBuggy","margin","suffix","expanded","propHooks","run","percent","eased","pos","step","fx","linear","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","complete","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","prefilter","speed","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","time","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","classesToArray","removeProp","propFix","tabindex","addClass","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","valueOrFunction","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","ajaxSetup","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","_statusCode","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","overrideMimeType","mimeType","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","xhrSuccessStatus","0","1223","xhrSupported","cors","_callback","errorCallback","username","xhrFields","onabort","ontimeout","onreadystatechange","responseType","binary","_callback2","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","win","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","hover","fnOver","fnOut","unbind","delegate","undelegate","proxy","holdReady","hold","parseJSON","isNumeric","_jQuery","_$","$","noConflict","useSourceMap","item","cssMapping","btoa","sourceMapping","sourceMap","base64","unescape","sourceURLs","sourceRoot","cssWithMappingToString","mediaQuery","alreadyImportedModules","memo","stylesInDom","isOldIE","atob","getTarget","styleTarget","HTMLIFrameElement","listToStyles","newStyles","part","media","addStylesToDom","domStyle","refs","addStyle","insertStyleElement","textStore","replaceText","replacement","applyToSingletonTag","styleSheet","cssNode","applyToTag","singleton","singletonCounter","styleIndex","removeStyleElement","newObj","newList","mayRemove","_domStyle","webpackPolyfill","deprecate","paths","g","Popper","Util","_defineProperties","descriptor","_defineProperty","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","_objectSpread2","getOwnPropertyDescriptors","defineProperties","uriAttrs","DefaultWhitelist","area","br","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","pre","small","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","createdDocument","whitelistKeys","_loop","elName","attributeList","whitelistedAttributes","allowedAttributeList","regExp","attrRegex","allowedAttribute","NAME","EVENT_KEY","JQUERY_NO_CONFLICT","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","DefaultType","template","placement","fallbackPlacement","boundary","sanitize","popperConfig","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","Default","HoverState","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","ClassName","Selector","Trigger","Tooltip","element","config","_isEnabled","_timeout","_hoverState","_activeTrigger","_popper","_getConfig","tip","_setListeners","Constructor","protoProps","staticProps","_proto","enable","toggleEnabled","dataKey","DATA_KEY","_getDelegateConfig","_isWithActiveTrigger","_enter","_leave","getTipElement","dispose","_hideModalHandler","showEvent","isWithContent","shadowRoot","findShadowRoot","isInTheDom","tipId","getUID","setContent","attachment","_getAttachment","addAttachmentClass","_getContainer","_getPopperConfig","_fixTransition","prevHoverState","transitionDuration","getTransitionDurationFromElement","TRANSITION_END","emulateTransitionEnd","_this2","hideEvent","_cleanTipClass","scheduleUpdate","getTitle","CLASS_PREFIX","setElementContent","$element","_this3","modifiers","_getOffset","flip","behavior","arrow","preventOverflow","boundariesElement","onCreate","originalPlacement","_handlePopperPlacementChange","onUpdate","_this4","offsets","isElement","_this5","eventIn","eventOut","_fixTitle","titleType","dataAttributes","typeCheckConfig","$tip","tabClass","popperData","popperInstance","popper","initConfigAnimation","_jQueryInterface","_config","isBrowser","navigator","timeoutDuration","longerTimeoutBrowsers","userAgent","Promise","called","scheduled","functionToCheck","getStyleComputedProperty","getParentNode","getScrollParent","_getStyleComputedProp","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","version","getOffsetParent","noOffsetParent","nextElementSibling","getRoot","findCommonOffsetParent","element1","element2","DOCUMENT_POSITION_FOLLOWING","createRange","commonAncestorContainer","element1root","getScroll","upperSide","scrollingElement","getBordersSize","axis","sideA","sideB","getSize","getWindowSizes","classCallCheck","createClass","_extends","getClientRect","sizes","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","modifier","includeScroll","getFixedPositionOffsetParent","getBoundaries","boundaries","excludeScroll","relativeOffset","innerWidth","innerHeight","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","isFixed","_getWindowSizes","isPaddingNumber","computeAutoPlacement","refRect","rects","sortedAreas","_ref","filteredAreas","_ref2","computedPlacement","variation","getReferenceOffsets","getOuterSizes","x","getOppositePlacement","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","runModifiers","ends","findIndex","enabled","isDestroyed","arrowStyles","flipped","positionFixed","isCreated","isModifierEnabled","modifierName","some","getSupportedPropertyName","prefixes","upperProp","toCheck","willChange","disableEventListeners","removeOnDestroy","getWindow","setupEventListeners","updateBound","passive","scrollElement","attachToScrollParents","scrollParents","isBody","eventsEnabled","enableEventListeners","cancelAnimationFrame","setStyles","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","BEHAVIORS","FLIP","CLOCKWISE","COUNTERCLOCKWISE","parseOffset","basePlacement","useHeight","fragments","frag","divider","search","splitRegex","ops","op","mergeWithPrevious","toValue","index2","Defaults","shiftvariation","_data$offsets","side","shiftOffsets","transformProp","popperStyles","priority","primary","escapeWithReference","secondary","keepTogether","opSide","_data$offsets$arrow","arrowElement","sideCapitalized","altSide","arrowElementSize","popperMarginSide","popperBorderSide","sideValue","placementOpposite","flipOrder","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","inner","subtractLength","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","devicePixelRatio","prefixedProperty","invertTop","invertLeft","onLoad","modifierOptions","Utils","PopperUtils","transitionEndEmulator","triggerTransitionEnd","getSelectorFromElement","hrefAttr","transitionDelay","floatTransitionDuration","floatTransitionDelay","reflow","supportsTransitionEnd","componentName","configTypes","expectedTypes","valueType","attachShadow","ShadowRoot","jQueryDetection","DayGridDateProfileGenerator","endOfWeek","monthMode","fixedWeekCount","Popover","isHidden","documentMousedown","autoHide","elDims","origin","clippingRect","SimpleDayGridEventRenderer","timeText","titleHtml","isResizableFromStart","isResizableFromEnd","skinCss","timeHtml","DayGridEventRenderer","dayGrid","rowStructs","renderSegRows","rowEls","rowNode","tbodyEl","removeSegPopover","rowStruct","segRows","groupSegRows","renderSegRow","rowSegs","levelSegs","segLevels","buildSegLevels","levelCnt","segMatrix","cellMatrix","loneCellMatrix","emptyCellsUntil","endCol","leftCol","rightCol","introHtml","renderProps","levels","isDaySegCollision","level","compareDaySegCols","otherSegs","otherSeg","DayGridMirrorRenderer","skeletonTopEl","skeletonTop","skeletonEl","DayGridFillRenderer","renderFillRow","trEl","startCol","DayTile","eventRenderer","DayTileEventRenderer","renderFrame","_renderFrame","renderFgEvents","fgSegs","eventDragInstances","eventResizeInstances","segContainerEl","layer","dayTile","DayBgRow","renderHtml","cell","renderCellHtml","htmlAttrs","DAY_NUM_FORMAT","WEEK_NUM_FORMAT","DayGrid","bottomCoordPadding","isCellSizesDirty","fillRenderer","mirrorRenderer","renderCells","_renderCells","_unrenderCells","renderBgEvents","_renderEventDrag","_unrenderEventDrag","_renderEventResize","_unrenderEventResize","isRigid","segPopoverTile","updateSegPopoverTile","getCellRange","ownProps","renderDayRowHtml","cellEls","rowPositions","colPositions","getCellEl","bgRow","renderBgIntroHtml","getIsNumbersVisible","renderNumberTrHtml","getIsDayNumbersVisible","cellWeekNumbersVisible","colWeekNumbersVisible","intro","renderNumberIntroHtml","renderNumberCellsHtml","htmls","renderNumberCellHtml","weekCalcFirstDow","isDayNumberVisible","buildColPositions","buildRowPositions","positionToHit","relativeRect","segPopover","limitRows","levelLimit","rowLevelLimit","unlimitRow","computeRowLevelLimit","limitRow","rowBottom","trEls","limitedNodes","segsBelow","totalSegsBelow","colSegsBelow","segMoreNodes","moreTd","moreWrap","moreLink","moreNodes","getCellSegs","renderMoreLink","moreEls","limitedEls","limitedEl","hiddenSegs","getMoreLinkText","clickOption","_col","moreEl","allSegs","reslicedAllSegs","resliceDaySegs","reslicedHiddenSegs","showSegPopover","topEl","dayDate","dayRange","newSegs","startLevel","WEEK_NUM_FORMAT$1","DayGridView","renderHeadIntroHtml","weekNumberStyleAttr","renderDayGridNumberIntroHtml","weekStart","renderDayGridBgIntroHtml","renderDayGridIntroHtml","renderSkeletonHtml","scroller","dayGridContainerEl","dayGridEl","weekNumberWidth","hasRigidRows","scrollerHeight","headRowEl","computeScrollerHeight","setGridHeight","SimpleDayGrid","slicer","DayGridSlicer","dayTable","rawHit","DayGridView$1","_context","buildDayTable","simpleDayGrid","main","dayGridDay","dayGridWeek","dayGridMonth","ListEventRenderer","renderSegList","renderEmptyMessage","bgColor","ListView","computeDateVars","eventStoreToSegs","_eventStoreToSegs","renderContent","listViewClassNames_1","listViewClassName","dayDates","dayRanges","eventRangesToSegs","eventRangeToSegs","segRange","daySegs","segsByDay","groupSegsByDay","tableEl","buildDayHeaderRow","mainFormat","altFormat","viewEnd","listDayFormat","listDay","listWeek","listDayAltFormat","listMonth","listYear","eventDiv","eventData","calendarEl","isMobile","dayGridPlugin","listPlugin","eventRender","eventId","eventColor","event_type","popover","description","docHeight","postMessage","_Tooltip","subClass","superClass","_getContent","locals"],"mappings":"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","file":"js/events-23b55effb8934bdccc18.js","sourcesContent":[" \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, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\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 = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 22);\n","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\nFullCalendar Core Package v4.3.1\nDocs & License: https://fullcalendar.io/\n(c) 2019 Adam Shaw\n*/\n// Creating\n// ----------------------------------------------------------------------------------------------------------------\nvar elementPropHash = {\n className: true,\n colSpan: true,\n rowSpan: true\n};\nvar containerTagHash = {\n '= rect.left && point.left < rect.right && point.top >= rect.top && point.top < rect.bottom;\n} // Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false\n\n\nfunction intersectRects(rect1, rect2) {\n var res = {\n left: Math.max(rect1.left, rect2.left),\n right: Math.min(rect1.right, rect2.right),\n top: Math.max(rect1.top, rect2.top),\n bottom: Math.min(rect1.bottom, rect2.bottom)\n };\n\n if (res.left < res.right && res.top < res.bottom) {\n return res;\n }\n\n return false;\n}\n\nfunction translateRect(rect, deltaX, deltaY) {\n return {\n left: rect.left + deltaX,\n right: rect.right + deltaX,\n top: rect.top + deltaY,\n bottom: rect.bottom + deltaY\n };\n} // Returns a new point that will have been moved to reside within the given rectangle\n\n\nfunction constrainPoint(point, rect) {\n return {\n left: Math.min(Math.max(point.left, rect.left), rect.right),\n top: Math.min(Math.max(point.top, rect.top), rect.bottom)\n };\n} // Returns a point that is the center of the given rectangle\n\n\nfunction getRectCenter(rect) {\n return {\n left: (rect.left + rect.right) / 2,\n top: (rect.top + rect.bottom) / 2\n };\n} // Subtracts point2's coordinates from point1's coordinates, returning a delta\n\n\nfunction diffPoints(point1, point2) {\n return {\n left: point1.left - point2.left,\n top: point1.top - point2.top\n };\n} // Logic for determining if, when the element is right-to-left, the scrollbar appears on the left side\n\n\nvar isRtlScrollbarOnLeft = null;\n\nfunction getIsRtlScrollbarOnLeft() {\n if (isRtlScrollbarOnLeft === null) {\n isRtlScrollbarOnLeft = computeIsRtlScrollbarOnLeft();\n }\n\n return isRtlScrollbarOnLeft;\n}\n\nfunction computeIsRtlScrollbarOnLeft() {\n var outerEl = createElement('div', {\n style: {\n position: 'absolute',\n top: -1000,\n left: 0,\n border: 0,\n padding: 0,\n overflow: 'scroll',\n direction: 'rtl'\n }\n }, '
');\n document.body.appendChild(outerEl);\n var innerEl = outerEl.firstChild;\n var res = innerEl.getBoundingClientRect().left > outerEl.getBoundingClientRect().left;\n removeElement(outerEl);\n return res;\n} // The scrollbar width computations in computeEdges are sometimes flawed when it comes to\n// retina displays, rounding, and IE11. Massage them into a usable value.\n\n\nfunction sanitizeScrollbarWidth(width) {\n width = Math.max(0, width); // no negatives\n\n width = Math.round(width);\n return width;\n}\n\nfunction computeEdges(el, getPadding) {\n if (getPadding === void 0) {\n getPadding = false;\n }\n\n var computedStyle = window.getComputedStyle(el);\n var borderLeft = parseInt(computedStyle.borderLeftWidth, 10) || 0;\n var borderRight = parseInt(computedStyle.borderRightWidth, 10) || 0;\n var borderTop = parseInt(computedStyle.borderTopWidth, 10) || 0;\n var borderBottom = parseInt(computedStyle.borderBottomWidth, 10) || 0; // must use offset(Width|Height) because compatible with client(Width|Height)\n\n var scrollbarLeftRight = sanitizeScrollbarWidth(el.offsetWidth - el.clientWidth - borderLeft - borderRight);\n var scrollbarBottom = sanitizeScrollbarWidth(el.offsetHeight - el.clientHeight - borderTop - borderBottom);\n var res = {\n borderLeft: borderLeft,\n borderRight: borderRight,\n borderTop: borderTop,\n borderBottom: borderBottom,\n scrollbarBottom: scrollbarBottom,\n scrollbarLeft: 0,\n scrollbarRight: 0\n };\n\n if (getIsRtlScrollbarOnLeft() && computedStyle.direction === 'rtl') {\n // is the scrollbar on the left side?\n res.scrollbarLeft = scrollbarLeftRight;\n } else {\n res.scrollbarRight = scrollbarLeftRight;\n }\n\n if (getPadding) {\n res.paddingLeft = parseInt(computedStyle.paddingLeft, 10) || 0;\n res.paddingRight = parseInt(computedStyle.paddingRight, 10) || 0;\n res.paddingTop = parseInt(computedStyle.paddingTop, 10) || 0;\n res.paddingBottom = parseInt(computedStyle.paddingBottom, 10) || 0;\n }\n\n return res;\n}\n\nfunction computeInnerRect(el, goWithinPadding) {\n if (goWithinPadding === void 0) {\n goWithinPadding = false;\n }\n\n var outerRect = computeRect(el);\n var edges = computeEdges(el, goWithinPadding);\n var res = {\n left: outerRect.left + edges.borderLeft + edges.scrollbarLeft,\n right: outerRect.right - edges.borderRight - edges.scrollbarRight,\n top: outerRect.top + edges.borderTop,\n bottom: outerRect.bottom - edges.borderBottom - edges.scrollbarBottom\n };\n\n if (goWithinPadding) {\n res.left += edges.paddingLeft;\n res.right -= edges.paddingRight;\n res.top += edges.paddingTop;\n res.bottom -= edges.paddingBottom;\n }\n\n return res;\n}\n\nfunction computeRect(el) {\n var rect = el.getBoundingClientRect();\n return {\n left: rect.left + window.pageXOffset,\n top: rect.top + window.pageYOffset,\n right: rect.right + window.pageXOffset,\n bottom: rect.bottom + window.pageYOffset\n };\n}\n\nfunction computeViewportRect() {\n return {\n left: window.pageXOffset,\n right: window.pageXOffset + document.documentElement.clientWidth,\n top: window.pageYOffset,\n bottom: window.pageYOffset + document.documentElement.clientHeight\n };\n}\n\nfunction computeHeightAndMargins(el) {\n return el.getBoundingClientRect().height + computeVMargins(el);\n}\n\nfunction computeVMargins(el) {\n var computed = window.getComputedStyle(el);\n return parseInt(computed.marginTop, 10) + parseInt(computed.marginBottom, 10);\n} // does not return window\n\n\nfunction getClippingParents(el) {\n var parents = [];\n\n while (el instanceof HTMLElement) {\n // will stop when gets to document or null\n var computedStyle = window.getComputedStyle(el);\n\n if (computedStyle.position === 'fixed') {\n break;\n }\n\n if (/(auto|scroll)/.test(computedStyle.overflow + computedStyle.overflowY + computedStyle.overflowX)) {\n parents.push(el);\n }\n\n el = el.parentNode;\n }\n\n return parents;\n}\n\nfunction computeClippingRect(el) {\n return getClippingParents(el).map(function (el) {\n return computeInnerRect(el);\n }).concat(computeViewportRect()).reduce(function (rect0, rect1) {\n return intersectRects(rect0, rect1) || rect1; // should always intersect\n });\n} // Stops a mouse/touch event from doing it's native browser action\n\n\nfunction preventDefault(ev) {\n ev.preventDefault();\n} // Event Delegation\n// ----------------------------------------------------------------------------------------------------------------\n\n\nfunction listenBySelector(container, eventType, selector, handler) {\n function realHandler(ev) {\n var matchedChild = elementClosest(ev.target, selector);\n\n if (matchedChild) {\n handler.call(matchedChild, ev, matchedChild);\n }\n }\n\n container.addEventListener(eventType, realHandler);\n return function () {\n container.removeEventListener(eventType, realHandler);\n };\n}\n\nfunction listenToHoverBySelector(container, selector, onMouseEnter, onMouseLeave) {\n var currentMatchedChild;\n return listenBySelector(container, 'mouseover', selector, function (ev, matchedChild) {\n if (matchedChild !== currentMatchedChild) {\n currentMatchedChild = matchedChild;\n onMouseEnter(ev, matchedChild);\n\n var realOnMouseLeave_1 = function realOnMouseLeave_1(ev) {\n currentMatchedChild = null;\n onMouseLeave(ev, matchedChild);\n matchedChild.removeEventListener('mouseleave', realOnMouseLeave_1);\n }; // listen to the next mouseleave, and then unattach\n\n\n matchedChild.addEventListener('mouseleave', realOnMouseLeave_1);\n }\n });\n} // Animation\n// ----------------------------------------------------------------------------------------------------------------\n\n\nvar transitionEventNames = ['webkitTransitionEnd', 'otransitionend', 'oTransitionEnd', 'msTransitionEnd', 'transitionend']; // triggered only when the next single subsequent transition finishes\n\nfunction whenTransitionDone(el, callback) {\n var realCallback = function realCallback(ev) {\n callback(ev);\n transitionEventNames.forEach(function (eventName) {\n el.removeEventListener(eventName, realCallback);\n });\n };\n\n transitionEventNames.forEach(function (eventName) {\n el.addEventListener(eventName, realCallback); // cross-browser way to determine when the transition finishes\n });\n}\n\nvar DAY_IDS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat']; // Adding\n\nfunction addWeeks(m, n) {\n var a = dateToUtcArray(m);\n a[2] += n * 7;\n return arrayToUtcDate(a);\n}\n\nfunction addDays(m, n) {\n var a = dateToUtcArray(m);\n a[2] += n;\n return arrayToUtcDate(a);\n}\n\nfunction addMs(m, n) {\n var a = dateToUtcArray(m);\n a[6] += n;\n return arrayToUtcDate(a);\n} // Diffing (all return floats)\n\n\nfunction diffWeeks(m0, m1) {\n return diffDays(m0, m1) / 7;\n}\n\nfunction diffDays(m0, m1) {\n return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60 * 24);\n}\n\nfunction diffHours(m0, m1) {\n return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60);\n}\n\nfunction diffMinutes(m0, m1) {\n return (m1.valueOf() - m0.valueOf()) / (1000 * 60);\n}\n\nfunction diffSeconds(m0, m1) {\n return (m1.valueOf() - m0.valueOf()) / 1000;\n}\n\nfunction diffDayAndTime(m0, m1) {\n var m0day = startOfDay(m0);\n var m1day = startOfDay(m1);\n return {\n years: 0,\n months: 0,\n days: Math.round(diffDays(m0day, m1day)),\n milliseconds: m1.valueOf() - m1day.valueOf() - (m0.valueOf() - m0day.valueOf())\n };\n} // Diffing Whole Units\n\n\nfunction diffWholeWeeks(m0, m1) {\n var d = diffWholeDays(m0, m1);\n\n if (d !== null && d % 7 === 0) {\n return d / 7;\n }\n\n return null;\n}\n\nfunction diffWholeDays(m0, m1) {\n if (timeAsMs(m0) === timeAsMs(m1)) {\n return Math.round(diffDays(m0, m1));\n }\n\n return null;\n} // Start-Of\n\n\nfunction startOfDay(m) {\n return arrayToUtcDate([m.getUTCFullYear(), m.getUTCMonth(), m.getUTCDate()]);\n}\n\nfunction startOfHour(m) {\n return arrayToUtcDate([m.getUTCFullYear(), m.getUTCMonth(), m.getUTCDate(), m.getUTCHours()]);\n}\n\nfunction startOfMinute(m) {\n return arrayToUtcDate([m.getUTCFullYear(), m.getUTCMonth(), m.getUTCDate(), m.getUTCHours(), m.getUTCMinutes()]);\n}\n\nfunction startOfSecond(m) {\n return arrayToUtcDate([m.getUTCFullYear(), m.getUTCMonth(), m.getUTCDate(), m.getUTCHours(), m.getUTCMinutes(), m.getUTCSeconds()]);\n} // Week Computation\n\n\nfunction weekOfYear(marker, dow, doy) {\n var y = marker.getUTCFullYear();\n var w = weekOfGivenYear(marker, y, dow, doy);\n\n if (w < 1) {\n return weekOfGivenYear(marker, y - 1, dow, doy);\n }\n\n var nextW = weekOfGivenYear(marker, y + 1, dow, doy);\n\n if (nextW >= 1) {\n return Math.min(w, nextW);\n }\n\n return w;\n}\n\nfunction weekOfGivenYear(marker, year, dow, doy) {\n var firstWeekStart = arrayToUtcDate([year, 0, 1 + firstWeekOffset(year, dow, doy)]);\n var dayStart = startOfDay(marker);\n var days = Math.round(diffDays(firstWeekStart, dayStart));\n return Math.floor(days / 7) + 1; // zero-indexed\n} // start-of-first-week - start-of-year\n\n\nfunction firstWeekOffset(year, dow, doy) {\n // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n var fwd = 7 + dow - doy; // first-week day local weekday -- which local weekday is fwd\n\n var fwdlw = (7 + arrayToUtcDate([year, 0, fwd]).getUTCDay() - dow) % 7;\n return -fwdlw + fwd - 1;\n} // Array Conversion\n\n\nfunction dateToLocalArray(date) {\n return [date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()];\n}\n\nfunction arrayToLocalDate(a) {\n return new Date(a[0], a[1] || 0, a[2] == null ? 1 : a[2], // day of month\n a[3] || 0, a[4] || 0, a[5] || 0);\n}\n\nfunction dateToUtcArray(date) {\n return [date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds()];\n}\n\nfunction arrayToUtcDate(a) {\n // according to web standards (and Safari), a month index is required.\n // massage if only given a year.\n if (a.length === 1) {\n a = a.concat([0]);\n }\n\n return new Date(Date.UTC.apply(Date, a));\n} // Other Utils\n\n\nfunction isValidDate(m) {\n return !isNaN(m.valueOf());\n}\n\nfunction timeAsMs(m) {\n return m.getUTCHours() * 1000 * 60 * 60 + m.getUTCMinutes() * 1000 * 60 + m.getUTCSeconds() * 1000 + m.getUTCMilliseconds();\n}\n\nvar INTERNAL_UNITS = ['years', 'months', 'days', 'milliseconds'];\nvar PARSE_RE = /^(-?)(?:(\\d+)\\.)?(\\d+):(\\d\\d)(?::(\\d\\d)(?:\\.(\\d\\d\\d))?)?/; // Parsing and Creation\n\nfunction createDuration(input, unit) {\n var _a;\n\n if (typeof input === 'string') {\n return parseString(input);\n } else if (_typeof(input) === 'object' && input) {\n // non-null object\n return normalizeObject(input);\n } else if (typeof input === 'number') {\n return normalizeObject((_a = {}, _a[unit || 'milliseconds'] = input, _a));\n } else {\n return null;\n }\n}\n\nfunction parseString(s) {\n var m = PARSE_RE.exec(s);\n\n if (m) {\n var sign = m[1] ? -1 : 1;\n return {\n years: 0,\n months: 0,\n days: sign * (m[2] ? parseInt(m[2], 10) : 0),\n milliseconds: sign * ((m[3] ? parseInt(m[3], 10) : 0) * 60 * 60 * 1000 + // hours\n (m[4] ? parseInt(m[4], 10) : 0) * 60 * 1000 + // minutes\n (m[5] ? parseInt(m[5], 10) : 0) * 1000 + ( // seconds\n m[6] ? parseInt(m[6], 10) : 0) // ms\n )\n };\n }\n\n return null;\n}\n\nfunction normalizeObject(obj) {\n return {\n years: obj.years || obj.year || 0,\n months: obj.months || obj.month || 0,\n days: (obj.days || obj.day || 0) + getWeeksFromInput(obj) * 7,\n milliseconds: (obj.hours || obj.hour || 0) * 60 * 60 * 1000 + // hours\n (obj.minutes || obj.minute || 0) * 60 * 1000 + // minutes\n (obj.seconds || obj.second || 0) * 1000 + ( // seconds\n obj.milliseconds || obj.millisecond || obj.ms || 0) // ms\n\n };\n}\n\nfunction getWeeksFromInput(obj) {\n return obj.weeks || obj.week || 0;\n} // Equality\n\n\nfunction durationsEqual(d0, d1) {\n return d0.years === d1.years && d0.months === d1.months && d0.days === d1.days && d0.milliseconds === d1.milliseconds;\n}\n\nfunction isSingleDay(dur) {\n return dur.years === 0 && dur.months === 0 && dur.days === 1 && dur.milliseconds === 0;\n} // Simple Math\n\n\nfunction addDurations(d0, d1) {\n return {\n years: d0.years + d1.years,\n months: d0.months + d1.months,\n days: d0.days + d1.days,\n milliseconds: d0.milliseconds + d1.milliseconds\n };\n}\n\nfunction subtractDurations(d1, d0) {\n return {\n years: d1.years - d0.years,\n months: d1.months - d0.months,\n days: d1.days - d0.days,\n milliseconds: d1.milliseconds - d0.milliseconds\n };\n}\n\nfunction multiplyDuration(d, n) {\n return {\n years: d.years * n,\n months: d.months * n,\n days: d.days * n,\n milliseconds: d.milliseconds * n\n };\n} // Conversions\n// \"Rough\" because they are based on average-case Gregorian months/years\n\n\nfunction asRoughYears(dur) {\n return asRoughDays(dur) / 365;\n}\n\nfunction asRoughMonths(dur) {\n return asRoughDays(dur) / 30;\n}\n\nfunction asRoughDays(dur) {\n return asRoughMs(dur) / 864e5;\n}\n\nfunction asRoughMinutes(dur) {\n return asRoughMs(dur) / (1000 * 60);\n}\n\nfunction asRoughSeconds(dur) {\n return asRoughMs(dur) / 1000;\n}\n\nfunction asRoughMs(dur) {\n return dur.years * (365 * 864e5) + dur.months * (30 * 864e5) + dur.days * 864e5 + dur.milliseconds;\n} // Advanced Math\n\n\nfunction wholeDivideDurations(numerator, denominator) {\n var res = null;\n\n for (var i = 0; i < INTERNAL_UNITS.length; i++) {\n var unit = INTERNAL_UNITS[i];\n\n if (denominator[unit]) {\n var localRes = numerator[unit] / denominator[unit];\n\n if (!isInt(localRes) || res !== null && res !== localRes) {\n return null;\n }\n\n res = localRes;\n } else if (numerator[unit]) {\n // needs to divide by something but can't!\n return null;\n }\n }\n\n return res;\n}\n\nfunction greatestDurationDenominator(dur, dontReturnWeeks) {\n var ms = dur.milliseconds;\n\n if (ms) {\n if (ms % 1000 !== 0) {\n return {\n unit: 'millisecond',\n value: ms\n };\n }\n\n if (ms % (1000 * 60) !== 0) {\n return {\n unit: 'second',\n value: ms / 1000\n };\n }\n\n if (ms % (1000 * 60 * 60) !== 0) {\n return {\n unit: 'minute',\n value: ms / (1000 * 60)\n };\n }\n\n if (ms) {\n return {\n unit: 'hour',\n value: ms / (1000 * 60 * 60)\n };\n }\n }\n\n if (dur.days) {\n if (!dontReturnWeeks && dur.days % 7 === 0) {\n return {\n unit: 'week',\n value: dur.days / 7\n };\n }\n\n return {\n unit: 'day',\n value: dur.days\n };\n }\n\n if (dur.months) {\n return {\n unit: 'month',\n value: dur.months\n };\n }\n\n if (dur.years) {\n return {\n unit: 'year',\n value: dur.years\n };\n }\n\n return {\n unit: 'millisecond',\n value: 0\n };\n}\n/* FullCalendar-specific DOM Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n// Given the scrollbar widths of some other container, create borders/margins on rowEls in order to match the left\n// and right space that was offset by the scrollbars. A 1-pixel border first, then margin beyond that.\n\n\nfunction compensateScroll(rowEl, scrollbarWidths) {\n if (scrollbarWidths.left) {\n applyStyle(rowEl, {\n borderLeftWidth: 1,\n marginLeft: scrollbarWidths.left - 1\n });\n }\n\n if (scrollbarWidths.right) {\n applyStyle(rowEl, {\n borderRightWidth: 1,\n marginRight: scrollbarWidths.right - 1\n });\n }\n} // Undoes compensateScroll and restores all borders/margins\n\n\nfunction uncompensateScroll(rowEl) {\n applyStyle(rowEl, {\n marginLeft: '',\n marginRight: '',\n borderLeftWidth: '',\n borderRightWidth: ''\n });\n} // Make the mouse cursor express that an event is not allowed in the current area\n\n\nfunction disableCursor() {\n document.body.classList.add('fc-not-allowed');\n} // Returns the mouse cursor to its original look\n\n\nfunction enableCursor() {\n document.body.classList.remove('fc-not-allowed');\n} // Given a total available height to fill, have `els` (essentially child rows) expand to accomodate.\n// By default, all elements that are shorter than the recommended height are expanded uniformly, not considering\n// any other els that are already too tall. if `shouldRedistribute` is on, it considers these tall rows and\n// reduces the available height.\n\n\nfunction distributeHeight(els, availableHeight, shouldRedistribute) {\n // *FLOORING NOTE*: we floor in certain places because zoom can give inaccurate floating-point dimensions,\n // and it is better to be shorter than taller, to avoid creating unnecessary scrollbars.\n var minOffset1 = Math.floor(availableHeight / els.length); // for non-last element\n\n var minOffset2 = Math.floor(availableHeight - minOffset1 * (els.length - 1)); // for last element *FLOORING NOTE*\n\n var flexEls = []; // elements that are allowed to expand. array of DOM nodes\n\n var flexOffsets = []; // amount of vertical space it takes up\n\n var flexHeights = []; // actual css height\n\n var usedHeight = 0;\n undistributeHeight(els); // give all elements their natural height\n // find elements that are below the recommended height (expandable).\n // important to query for heights in a single first pass (to avoid reflow oscillation).\n\n els.forEach(function (el, i) {\n var minOffset = i === els.length - 1 ? minOffset2 : minOffset1;\n var naturalHeight = el.getBoundingClientRect().height;\n var naturalOffset = naturalHeight + computeVMargins(el);\n\n if (naturalOffset < minOffset) {\n flexEls.push(el);\n flexOffsets.push(naturalOffset);\n flexHeights.push(naturalHeight);\n } else {\n // this element stretches past recommended height (non-expandable). mark the space as occupied.\n usedHeight += naturalOffset;\n }\n }); // readjust the recommended height to only consider the height available to non-maxed-out rows.\n\n if (shouldRedistribute) {\n availableHeight -= usedHeight;\n minOffset1 = Math.floor(availableHeight / flexEls.length);\n minOffset2 = Math.floor(availableHeight - minOffset1 * (flexEls.length - 1)); // *FLOORING NOTE*\n } // assign heights to all expandable elements\n\n\n flexEls.forEach(function (el, i) {\n var minOffset = i === flexEls.length - 1 ? minOffset2 : minOffset1;\n var naturalOffset = flexOffsets[i];\n var naturalHeight = flexHeights[i];\n var newHeight = minOffset - (naturalOffset - naturalHeight); // subtract the margin/padding\n\n if (naturalOffset < minOffset) {\n // we check this again because redistribution might have changed things\n el.style.height = newHeight + 'px';\n }\n });\n} // Undoes distrubuteHeight, restoring all els to their natural height\n\n\nfunction undistributeHeight(els) {\n els.forEach(function (el) {\n el.style.height = '';\n });\n} // Given `els`, a set of cells, find the cell with the largest natural width and set the widths of all the\n// cells to be that width.\n// PREREQUISITE: if you want a cell to take up width, it needs to have a single inner element w/ display:inline\n\n\nfunction matchCellWidths(els) {\n var maxInnerWidth = 0;\n els.forEach(function (el) {\n var innerEl = el.firstChild; // hopefully an element\n\n if (innerEl instanceof HTMLElement) {\n var innerWidth_1 = innerEl.getBoundingClientRect().width;\n\n if (innerWidth_1 > maxInnerWidth) {\n maxInnerWidth = innerWidth_1;\n }\n }\n });\n maxInnerWidth++; // sometimes not accurate of width the text needs to stay on one line. insurance\n\n els.forEach(function (el) {\n el.style.width = maxInnerWidth + 'px';\n });\n return maxInnerWidth;\n} // Given one element that resides inside another,\n// Subtracts the height of the inner element from the outer element.\n\n\nfunction subtractInnerElHeight(outerEl, innerEl) {\n // effin' IE8/9/10/11 sometimes returns 0 for dimensions. this weird hack was the only thing that worked\n var reflowStyleProps = {\n position: 'relative',\n left: -1 // ensure reflow in case the el was already relative. negative is less likely to cause new scroll\n\n };\n applyStyle(outerEl, reflowStyleProps);\n applyStyle(innerEl, reflowStyleProps);\n var diff = // grab the dimensions\n outerEl.getBoundingClientRect().height - innerEl.getBoundingClientRect().height; // undo hack\n\n var resetStyleProps = {\n position: '',\n left: ''\n };\n applyStyle(outerEl, resetStyleProps);\n applyStyle(innerEl, resetStyleProps);\n return diff;\n}\n/* Selection\n----------------------------------------------------------------------------------------------------------------------*/\n\n\nfunction preventSelection(el) {\n el.classList.add('fc-unselectable');\n el.addEventListener('selectstart', preventDefault);\n}\n\nfunction allowSelection(el) {\n el.classList.remove('fc-unselectable');\n el.removeEventListener('selectstart', preventDefault);\n}\n/* Context Menu\n----------------------------------------------------------------------------------------------------------------------*/\n\n\nfunction preventContextMenu(el) {\n el.addEventListener('contextmenu', preventDefault);\n}\n\nfunction allowContextMenu(el) {\n el.removeEventListener('contextmenu', preventDefault);\n}\n/* Object Ordering by Field\n----------------------------------------------------------------------------------------------------------------------*/\n\n\nfunction parseFieldSpecs(input) {\n var specs = [];\n var tokens = [];\n var i;\n var token;\n\n if (typeof input === 'string') {\n tokens = input.split(/\\s*,\\s*/);\n } else if (typeof input === 'function') {\n tokens = [input];\n } else if (Array.isArray(input)) {\n tokens = input;\n }\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n\n if (typeof token === 'string') {\n specs.push(token.charAt(0) === '-' ? {\n field: token.substring(1),\n order: -1\n } : {\n field: token,\n order: 1\n });\n } else if (typeof token === 'function') {\n specs.push({\n func: token\n });\n }\n }\n\n return specs;\n}\n\nfunction compareByFieldSpecs(obj0, obj1, fieldSpecs) {\n var i;\n var cmp;\n\n for (i = 0; i < fieldSpecs.length; i++) {\n cmp = compareByFieldSpec(obj0, obj1, fieldSpecs[i]);\n\n if (cmp) {\n return cmp;\n }\n }\n\n return 0;\n}\n\nfunction compareByFieldSpec(obj0, obj1, fieldSpec) {\n if (fieldSpec.func) {\n return fieldSpec.func(obj0, obj1);\n }\n\n return flexibleCompare(obj0[fieldSpec.field], obj1[fieldSpec.field]) * (fieldSpec.order || 1);\n}\n\nfunction flexibleCompare(a, b) {\n if (!a && !b) {\n return 0;\n }\n\n if (b == null) {\n return -1;\n }\n\n if (a == null) {\n return 1;\n }\n\n if (typeof a === 'string' || typeof b === 'string') {\n return String(a).localeCompare(String(b));\n }\n\n return a - b;\n}\n/* String Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\n\nfunction capitaliseFirstLetter(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nfunction padStart(val, len) {\n var s = String(val);\n return '000'.substr(0, len - s.length) + s;\n}\n/* Number Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\n\nfunction compareNumbers(a, b) {\n return a - b;\n}\n\nfunction isInt(n) {\n return n % 1 === 0;\n}\n/* Weird Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\n\nfunction applyAll(functions, thisObj, args) {\n if (typeof functions === 'function') {\n // supplied a single function\n functions = [functions];\n }\n\n if (functions) {\n var i = void 0;\n var ret = void 0;\n\n for (i = 0; i < functions.length; i++) {\n ret = functions[i].apply(thisObj, args) || ret;\n }\n\n return ret;\n }\n}\n\nfunction firstDefined() {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n for (var i = 0; i < args.length; i++) {\n if (args[i] !== undefined) {\n return args[i];\n }\n }\n} // Returns a function, that, as long as it continues to be invoked, will not\n// be triggered. The function will be called after it stops being called for\n// N milliseconds. If `immediate` is passed, trigger the function on the\n// leading edge, instead of the trailing.\n// https://github.com/jashkenas/underscore/blob/1.6.0/underscore.js#L714\n\n\nfunction debounce(func, wait) {\n var timeout;\n var args;\n var context;\n var timestamp;\n var result;\n\n var later = function later() {\n var last = new Date().valueOf() - timestamp;\n\n if (last < wait) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n result = func.apply(context, args);\n context = args = null;\n }\n };\n\n return function () {\n context = this;\n args = arguments;\n timestamp = new Date().valueOf();\n\n if (!timeout) {\n timeout = setTimeout(later, wait);\n }\n\n return result;\n };\n} // Number and Boolean are only types that defaults or not computed for\n// TODO: write more comments\n\n\nfunction refineProps(rawProps, processors, defaults, leftoverProps) {\n if (defaults === void 0) {\n defaults = {};\n }\n\n var refined = {};\n\n for (var key in processors) {\n var processor = processors[key];\n\n if (rawProps[key] !== undefined) {\n // found\n if (processor === Function) {\n refined[key] = typeof rawProps[key] === 'function' ? rawProps[key] : null;\n } else if (processor) {\n // a refining function?\n refined[key] = processor(rawProps[key]);\n } else {\n refined[key] = rawProps[key];\n }\n } else if (defaults[key] !== undefined) {\n // there's an explicit default\n refined[key] = defaults[key];\n } else {\n // must compute a default\n if (processor === String) {\n refined[key] = ''; // empty string is default for String\n } else if (!processor || processor === Number || processor === Boolean || processor === Function) {\n refined[key] = null; // assign null for other non-custom processor funcs\n } else {\n refined[key] = processor(null); // run the custom processor func\n }\n }\n }\n\n if (leftoverProps) {\n for (var key in rawProps) {\n if (processors[key] === undefined) {\n leftoverProps[key] = rawProps[key];\n }\n }\n }\n\n return refined;\n}\n/* Date stuff that doesn't belong in datelib core\n----------------------------------------------------------------------------------------------------------------------*/\n// given a timed range, computes an all-day range that has the same exact duration,\n// but whose start time is aligned with the start of the day.\n\n\nfunction computeAlignedDayRange(timedRange) {\n var dayCnt = Math.floor(diffDays(timedRange.start, timedRange.end)) || 1;\n var start = startOfDay(timedRange.start);\n var end = addDays(start, dayCnt);\n return {\n start: start,\n end: end\n };\n} // given a timed range, computes an all-day range based on how for the end date bleeds into the next day\n// TODO: give nextDayThreshold a default arg\n\n\nfunction computeVisibleDayRange(timedRange, nextDayThreshold) {\n if (nextDayThreshold === void 0) {\n nextDayThreshold = createDuration(0);\n }\n\n var startDay = null;\n var endDay = null;\n\n if (timedRange.end) {\n endDay = startOfDay(timedRange.end);\n var endTimeMS = timedRange.end.valueOf() - endDay.valueOf(); // # of milliseconds into `endDay`\n // If the end time is actually inclusively part of the next day and is equal to or\n // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.\n // Otherwise, leaving it as inclusive will cause it to exclude `endDay`.\n\n if (endTimeMS && endTimeMS >= asRoughMs(nextDayThreshold)) {\n endDay = addDays(endDay, 1);\n }\n }\n\n if (timedRange.start) {\n startDay = startOfDay(timedRange.start); // the beginning of the day the range starts\n // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.\n\n if (endDay && endDay <= startDay) {\n endDay = addDays(startDay, 1);\n }\n }\n\n return {\n start: startDay,\n end: endDay\n };\n} // spans from one day into another?\n\n\nfunction isMultiDayRange(range) {\n var visibleRange = computeVisibleDayRange(range);\n return diffDays(visibleRange.start, visibleRange.end) > 1;\n}\n\nfunction diffDates(date0, date1, dateEnv, largeUnit) {\n if (largeUnit === 'year') {\n return createDuration(dateEnv.diffWholeYears(date0, date1), 'year');\n } else if (largeUnit === 'month') {\n return createDuration(dateEnv.diffWholeMonths(date0, date1), 'month');\n } else {\n return diffDayAndTime(date0, date1); // returns a duration\n }\n}\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\n\n\nvar _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar _assign = function __assign() {\n _assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return _assign.apply(this, arguments);\n};\n\nfunction parseRecurring(eventInput, allDayDefault, dateEnv, recurringTypes, leftovers) {\n for (var i = 0; i < recurringTypes.length; i++) {\n var localLeftovers = {};\n var parsed = recurringTypes[i].parse(eventInput, localLeftovers, dateEnv);\n\n if (parsed) {\n var allDay = localLeftovers.allDay;\n delete localLeftovers.allDay; // remove from leftovers\n\n if (allDay == null) {\n allDay = allDayDefault;\n\n if (allDay == null) {\n allDay = parsed.allDayGuess;\n\n if (allDay == null) {\n allDay = false;\n }\n }\n }\n\n _assign(leftovers, localLeftovers);\n\n return {\n allDay: allDay,\n duration: parsed.duration,\n typeData: parsed.typeData,\n typeId: i\n };\n }\n }\n\n return null;\n}\n/*\nEvent MUST have a recurringDef\n*/\n\n\nfunction expandRecurringRanges(eventDef, duration, framingRange, dateEnv, recurringTypes) {\n var typeDef = recurringTypes[eventDef.recurringDef.typeId];\n var markers = typeDef.expand(eventDef.recurringDef.typeData, {\n start: dateEnv.subtract(framingRange.start, duration),\n end: framingRange.end\n }, dateEnv); // the recurrence plugins don't guarantee that all-day events are start-of-day, so we have to\n\n if (eventDef.allDay) {\n markers = markers.map(startOfDay);\n }\n\n return markers;\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty; // Merges an array of objects into a single object.\n// The second argument allows for an array of property names who's object values will be merged together.\n\nfunction mergeProps(propObjs, complexProps) {\n var dest = {};\n var i;\n var name;\n var complexObjs;\n var j;\n var val;\n var props;\n\n if (complexProps) {\n for (i = 0; i < complexProps.length; i++) {\n name = complexProps[i];\n complexObjs = []; // collect the trailing object values, stopping when a non-object is discovered\n\n for (j = propObjs.length - 1; j >= 0; j--) {\n val = propObjs[j][name];\n\n if (_typeof(val) === 'object' && val) {\n // non-null object\n complexObjs.unshift(val);\n } else if (val !== undefined) {\n dest[name] = val; // if there were no objects, this value will be used\n\n break;\n }\n } // if the trailing values were objects, use the merged value\n\n\n if (complexObjs.length) {\n dest[name] = mergeProps(complexObjs);\n }\n }\n } // copy values into the destination, going from last to first\n\n\n for (i = propObjs.length - 1; i >= 0; i--) {\n props = propObjs[i];\n\n for (name in props) {\n if (!(name in dest)) {\n // if already assigned by previous props or complex props, don't reassign\n dest[name] = props[name];\n }\n }\n }\n\n return dest;\n}\n\nfunction filterHash(hash, func) {\n var filtered = {};\n\n for (var key in hash) {\n if (func(hash[key], key)) {\n filtered[key] = hash[key];\n }\n }\n\n return filtered;\n}\n\nfunction mapHash(hash, func) {\n var newHash = {};\n\n for (var key in hash) {\n newHash[key] = func(hash[key], key);\n }\n\n return newHash;\n}\n\nfunction arrayToHash(a) {\n var hash = {};\n\n for (var _i = 0, a_1 = a; _i < a_1.length; _i++) {\n var item = a_1[_i];\n hash[item] = true;\n }\n\n return hash;\n}\n\nfunction hashValuesToArray(obj) {\n var a = [];\n\n for (var key in obj) {\n a.push(obj[key]);\n }\n\n return a;\n}\n\nfunction isPropsEqual(obj0, obj1) {\n for (var key in obj0) {\n if (hasOwnProperty.call(obj0, key)) {\n if (!(key in obj1)) {\n return false;\n }\n }\n }\n\n for (var key in obj1) {\n if (hasOwnProperty.call(obj1, key)) {\n if (obj0[key] !== obj1[key]) {\n return false;\n }\n }\n }\n\n return true;\n}\n\nfunction parseEvents(rawEvents, sourceId, calendar, allowOpenRange) {\n var eventStore = createEmptyEventStore();\n\n for (var _i = 0, rawEvents_1 = rawEvents; _i < rawEvents_1.length; _i++) {\n var rawEvent = rawEvents_1[_i];\n var tuple = parseEvent(rawEvent, sourceId, calendar, allowOpenRange);\n\n if (tuple) {\n eventTupleToStore(tuple, eventStore);\n }\n }\n\n return eventStore;\n}\n\nfunction eventTupleToStore(tuple, eventStore) {\n if (eventStore === void 0) {\n eventStore = createEmptyEventStore();\n }\n\n eventStore.defs[tuple.def.defId] = tuple.def;\n\n if (tuple.instance) {\n eventStore.instances[tuple.instance.instanceId] = tuple.instance;\n }\n\n return eventStore;\n}\n\nfunction expandRecurring(eventStore, framingRange, calendar) {\n var dateEnv = calendar.dateEnv;\n var defs = eventStore.defs,\n instances = eventStore.instances; // remove existing recurring instances\n\n instances = filterHash(instances, function (instance) {\n return !defs[instance.defId].recurringDef;\n });\n\n for (var defId in defs) {\n var def = defs[defId];\n\n if (def.recurringDef) {\n var duration = def.recurringDef.duration;\n\n if (!duration) {\n duration = def.allDay ? calendar.defaultAllDayEventDuration : calendar.defaultTimedEventDuration;\n }\n\n var starts = expandRecurringRanges(def, duration, framingRange, calendar.dateEnv, calendar.pluginSystem.hooks.recurringTypes);\n\n for (var _i = 0, starts_1 = starts; _i < starts_1.length; _i++) {\n var start = starts_1[_i];\n var instance = createEventInstance(defId, {\n start: start,\n end: dateEnv.add(start, duration)\n });\n instances[instance.instanceId] = instance;\n }\n }\n }\n\n return {\n defs: defs,\n instances: instances\n };\n} // retrieves events that have the same groupId as the instance specified by `instanceId`\n// or they are the same as the instance.\n// why might instanceId not be in the store? an event from another calendar?\n\n\nfunction getRelevantEvents(eventStore, instanceId) {\n var instance = eventStore.instances[instanceId];\n\n if (instance) {\n var def_1 = eventStore.defs[instance.defId]; // get events/instances with same group\n\n var newStore = filterEventStoreDefs(eventStore, function (lookDef) {\n return isEventDefsGrouped(def_1, lookDef);\n }); // add the original\n // TODO: wish we could use eventTupleToStore or something like it\n\n newStore.defs[def_1.defId] = def_1;\n newStore.instances[instance.instanceId] = instance;\n return newStore;\n }\n\n return createEmptyEventStore();\n}\n\nfunction isEventDefsGrouped(def0, def1) {\n return Boolean(def0.groupId && def0.groupId === def1.groupId);\n}\n\nfunction transformRawEvents(rawEvents, eventSource, calendar) {\n var calEachTransform = calendar.opt('eventDataTransform');\n var sourceEachTransform = eventSource ? eventSource.eventDataTransform : null;\n\n if (sourceEachTransform) {\n rawEvents = transformEachRawEvent(rawEvents, sourceEachTransform);\n }\n\n if (calEachTransform) {\n rawEvents = transformEachRawEvent(rawEvents, calEachTransform);\n }\n\n return rawEvents;\n}\n\nfunction transformEachRawEvent(rawEvents, func) {\n var refinedEvents;\n\n if (!func) {\n refinedEvents = rawEvents;\n } else {\n refinedEvents = [];\n\n for (var _i = 0, rawEvents_2 = rawEvents; _i < rawEvents_2.length; _i++) {\n var rawEvent = rawEvents_2[_i];\n var refinedEvent = func(rawEvent);\n\n if (refinedEvent) {\n refinedEvents.push(refinedEvent);\n } else if (refinedEvent == null) {\n refinedEvents.push(rawEvent);\n } // if a different falsy value, do nothing\n\n }\n }\n\n return refinedEvents;\n}\n\nfunction createEmptyEventStore() {\n return {\n defs: {},\n instances: {}\n };\n}\n\nfunction mergeEventStores(store0, store1) {\n return {\n defs: _assign({}, store0.defs, store1.defs),\n instances: _assign({}, store0.instances, store1.instances)\n };\n}\n\nfunction filterEventStoreDefs(eventStore, filterFunc) {\n var defs = filterHash(eventStore.defs, filterFunc);\n var instances = filterHash(eventStore.instances, function (instance) {\n return defs[instance.defId]; // still exists?\n });\n return {\n defs: defs,\n instances: instances\n };\n}\n\nfunction parseRange(input, dateEnv) {\n var start = null;\n var end = null;\n\n if (input.start) {\n start = dateEnv.createMarker(input.start);\n }\n\n if (input.end) {\n end = dateEnv.createMarker(input.end);\n }\n\n if (!start && !end) {\n return null;\n }\n\n if (start && end && end < start) {\n return null;\n }\n\n return {\n start: start,\n end: end\n };\n} // SIDE-EFFECT: will mutate ranges.\n// Will return a new array result.\n\n\nfunction invertRanges(ranges, constraintRange) {\n var invertedRanges = [];\n var start = constraintRange.start; // the end of the previous range. the start of the new range\n\n var i;\n var dateRange; // ranges need to be in order. required for our date-walking algorithm\n\n ranges.sort(compareRanges);\n\n for (i = 0; i < ranges.length; i++) {\n dateRange = ranges[i]; // add the span of time before the event (if there is any)\n\n if (dateRange.start > start) {\n // compare millisecond time (skip any ambig logic)\n invertedRanges.push({\n start: start,\n end: dateRange.start\n });\n }\n\n if (dateRange.end > start) {\n start = dateRange.end;\n }\n } // add the span of time after the last event (if there is any)\n\n\n if (start < constraintRange.end) {\n // compare millisecond time (skip any ambig logic)\n invertedRanges.push({\n start: start,\n end: constraintRange.end\n });\n }\n\n return invertedRanges;\n}\n\nfunction compareRanges(range0, range1) {\n return range0.start.valueOf() - range1.start.valueOf(); // earlier ranges go first\n}\n\nfunction intersectRanges(range0, range1) {\n var start = range0.start;\n var end = range0.end;\n var newRange = null;\n\n if (range1.start !== null) {\n if (start === null) {\n start = range1.start;\n } else {\n start = new Date(Math.max(start.valueOf(), range1.start.valueOf()));\n }\n }\n\n if (range1.end != null) {\n if (end === null) {\n end = range1.end;\n } else {\n end = new Date(Math.min(end.valueOf(), range1.end.valueOf()));\n }\n }\n\n if (start === null || end === null || start < end) {\n newRange = {\n start: start,\n end: end\n };\n }\n\n return newRange;\n}\n\nfunction rangesEqual(range0, range1) {\n return (range0.start === null ? null : range0.start.valueOf()) === (range1.start === null ? null : range1.start.valueOf()) && (range0.end === null ? null : range0.end.valueOf()) === (range1.end === null ? null : range1.end.valueOf());\n}\n\nfunction rangesIntersect(range0, range1) {\n return (range0.end === null || range1.start === null || range0.end > range1.start) && (range0.start === null || range1.end === null || range0.start < range1.end);\n}\n\nfunction rangeContainsRange(outerRange, innerRange) {\n return (outerRange.start === null || innerRange.start !== null && innerRange.start >= outerRange.start) && (outerRange.end === null || innerRange.end !== null && innerRange.end <= outerRange.end);\n}\n\nfunction rangeContainsMarker(range, date) {\n return (range.start === null || date >= range.start) && (range.end === null || date < range.end);\n} // If the given date is not within the given range, move it inside.\n// (If it's past the end, make it one millisecond before the end).\n\n\nfunction constrainMarkerToRange(date, range) {\n if (range.start != null && date < range.start) {\n return range.start;\n }\n\n if (range.end != null && date >= range.end) {\n return new Date(range.end.valueOf() - 1);\n }\n\n return date;\n}\n\nfunction removeExact(array, exactVal) {\n var removeCnt = 0;\n var i = 0;\n\n while (i < array.length) {\n if (array[i] === exactVal) {\n array.splice(i, 1);\n removeCnt++;\n } else {\n i++;\n }\n }\n\n return removeCnt;\n}\n\nfunction isArraysEqual(a0, a1) {\n var len = a0.length;\n var i;\n\n if (len !== a1.length) {\n // not array? or not same length?\n return false;\n }\n\n for (i = 0; i < len; i++) {\n if (a0[i] !== a1[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction memoize(workerFunc) {\n var args;\n var res;\n return function () {\n if (!args || !isArraysEqual(args, arguments)) {\n args = arguments;\n res = workerFunc.apply(this, arguments);\n }\n\n return res;\n };\n}\n/*\nalways executes the workerFunc, but if the result is equal to the previous result,\nreturn the previous result instead.\n*/\n\n\nfunction memoizeOutput(workerFunc, equalityFunc) {\n var cachedRes = null;\n return function () {\n var newRes = workerFunc.apply(this, arguments);\n\n if (cachedRes === null || !(cachedRes === newRes || equalityFunc(cachedRes, newRes))) {\n cachedRes = newRes;\n }\n\n return cachedRes;\n };\n}\n\nvar EXTENDED_SETTINGS_AND_SEVERITIES = {\n week: 3,\n separator: 0,\n omitZeroMinute: 0,\n meridiem: 0,\n omitCommas: 0\n};\nvar STANDARD_DATE_PROP_SEVERITIES = {\n timeZoneName: 7,\n era: 6,\n year: 5,\n month: 4,\n day: 2,\n weekday: 2,\n hour: 1,\n minute: 1,\n second: 1\n};\nvar MERIDIEM_RE = /\\s*([ap])\\.?m\\.?/i; // eats up leading spaces too\n\nvar COMMA_RE = /,/g; // we need re for globalness\n\nvar MULTI_SPACE_RE = /\\s+/g;\nvar LTR_RE = /\\u200e/g; // control character\n\nvar UTC_RE = /UTC|GMT/;\n\nvar NativeFormatter =\n/** @class */\nfunction () {\n function NativeFormatter(formatSettings) {\n var standardDateProps = {};\n var extendedSettings = {};\n var severity = 0;\n\n for (var name_1 in formatSettings) {\n if (name_1 in EXTENDED_SETTINGS_AND_SEVERITIES) {\n extendedSettings[name_1] = formatSettings[name_1];\n severity = Math.max(EXTENDED_SETTINGS_AND_SEVERITIES[name_1], severity);\n } else {\n standardDateProps[name_1] = formatSettings[name_1];\n\n if (name_1 in STANDARD_DATE_PROP_SEVERITIES) {\n severity = Math.max(STANDARD_DATE_PROP_SEVERITIES[name_1], severity);\n }\n }\n }\n\n this.standardDateProps = standardDateProps;\n this.extendedSettings = extendedSettings;\n this.severity = severity;\n this.buildFormattingFunc = memoize(buildFormattingFunc);\n }\n\n NativeFormatter.prototype.format = function (date, context) {\n return this.buildFormattingFunc(this.standardDateProps, this.extendedSettings, context)(date);\n };\n\n NativeFormatter.prototype.formatRange = function (start, end, context) {\n var _a = this,\n standardDateProps = _a.standardDateProps,\n extendedSettings = _a.extendedSettings;\n\n var diffSeverity = computeMarkerDiffSeverity(start.marker, end.marker, context.calendarSystem);\n\n if (!diffSeverity) {\n return this.format(start, context);\n }\n\n var biggestUnitForPartial = diffSeverity;\n\n if (biggestUnitForPartial > 1 && ( // the two dates are different in a way that's larger scale than time\n standardDateProps.year === 'numeric' || standardDateProps.year === '2-digit') && (standardDateProps.month === 'numeric' || standardDateProps.month === '2-digit') && (standardDateProps.day === 'numeric' || standardDateProps.day === '2-digit')) {\n biggestUnitForPartial = 1; // make it look like the dates are only different in terms of time\n }\n\n var full0 = this.format(start, context);\n var full1 = this.format(end, context);\n\n if (full0 === full1) {\n return full0;\n }\n\n var partialDateProps = computePartialFormattingOptions(standardDateProps, biggestUnitForPartial);\n var partialFormattingFunc = buildFormattingFunc(partialDateProps, extendedSettings, context);\n var partial0 = partialFormattingFunc(start);\n var partial1 = partialFormattingFunc(end);\n var insertion = findCommonInsertion(full0, partial0, full1, partial1);\n var separator = extendedSettings.separator || '';\n\n if (insertion) {\n return insertion.before + partial0 + separator + partial1 + insertion.after;\n }\n\n return full0 + separator + full1;\n };\n\n NativeFormatter.prototype.getLargestUnit = function () {\n switch (this.severity) {\n case 7:\n case 6:\n case 5:\n return 'year';\n\n case 4:\n return 'month';\n\n case 3:\n return 'week';\n\n default:\n return 'day';\n }\n };\n\n return NativeFormatter;\n}();\n\nfunction buildFormattingFunc(standardDateProps, extendedSettings, context) {\n var standardDatePropCnt = Object.keys(standardDateProps).length;\n\n if (standardDatePropCnt === 1 && standardDateProps.timeZoneName === 'short') {\n return function (date) {\n return formatTimeZoneOffset(date.timeZoneOffset);\n };\n }\n\n if (standardDatePropCnt === 0 && extendedSettings.week) {\n return function (date) {\n return formatWeekNumber(context.computeWeekNumber(date.marker), context.weekLabel, context.locale, extendedSettings.week);\n };\n }\n\n return buildNativeFormattingFunc(standardDateProps, extendedSettings, context);\n}\n\nfunction buildNativeFormattingFunc(standardDateProps, extendedSettings, context) {\n standardDateProps = _assign({}, standardDateProps); // copy\n\n extendedSettings = _assign({}, extendedSettings); // copy\n\n sanitizeSettings(standardDateProps, extendedSettings);\n standardDateProps.timeZone = 'UTC'; // we leverage the only guaranteed timeZone for our UTC markers\n\n var normalFormat = new Intl.DateTimeFormat(context.locale.codes, standardDateProps);\n var zeroFormat; // needed?\n\n if (extendedSettings.omitZeroMinute) {\n var zeroProps = _assign({}, standardDateProps);\n\n delete zeroProps.minute; // seconds and ms were already considered in sanitizeSettings\n\n zeroFormat = new Intl.DateTimeFormat(context.locale.codes, zeroProps);\n }\n\n return function (date) {\n var marker = date.marker;\n var format;\n\n if (zeroFormat && !marker.getUTCMinutes()) {\n format = zeroFormat;\n } else {\n format = normalFormat;\n }\n\n var s = format.format(marker);\n return postProcess(s, date, standardDateProps, extendedSettings, context);\n };\n}\n\nfunction sanitizeSettings(standardDateProps, extendedSettings) {\n // deal with a browser inconsistency where formatting the timezone\n // requires that the hour/minute be present.\n if (standardDateProps.timeZoneName) {\n if (!standardDateProps.hour) {\n standardDateProps.hour = '2-digit';\n }\n\n if (!standardDateProps.minute) {\n standardDateProps.minute = '2-digit';\n }\n } // only support short timezone names\n\n\n if (standardDateProps.timeZoneName === 'long') {\n standardDateProps.timeZoneName = 'short';\n } // if requesting to display seconds, MUST display minutes\n\n\n if (extendedSettings.omitZeroMinute && (standardDateProps.second || standardDateProps.millisecond)) {\n delete extendedSettings.omitZeroMinute;\n }\n}\n\nfunction postProcess(s, date, standardDateProps, extendedSettings, context) {\n s = s.replace(LTR_RE, ''); // remove left-to-right control chars. do first. good for other regexes\n\n if (standardDateProps.timeZoneName === 'short') {\n s = injectTzoStr(s, context.timeZone === 'UTC' || date.timeZoneOffset == null ? 'UTC' : // important to normalize for IE, which does \"GMT\"\n formatTimeZoneOffset(date.timeZoneOffset));\n }\n\n if (extendedSettings.omitCommas) {\n s = s.replace(COMMA_RE, '').trim();\n }\n\n if (extendedSettings.omitZeroMinute) {\n s = s.replace(':00', ''); // zeroFormat doesn't always achieve this\n } // ^ do anything that might create adjacent spaces before this point,\n // because MERIDIEM_RE likes to eat up loading spaces\n\n\n if (extendedSettings.meridiem === false) {\n s = s.replace(MERIDIEM_RE, '').trim();\n } else if (extendedSettings.meridiem === 'narrow') {\n // a/p\n s = s.replace(MERIDIEM_RE, function (m0, m1) {\n return m1.toLocaleLowerCase();\n });\n } else if (extendedSettings.meridiem === 'short') {\n // am/pm\n s = s.replace(MERIDIEM_RE, function (m0, m1) {\n return m1.toLocaleLowerCase() + 'm';\n });\n } else if (extendedSettings.meridiem === 'lowercase') {\n // other meridiem transformers already converted to lowercase\n s = s.replace(MERIDIEM_RE, function (m0) {\n return m0.toLocaleLowerCase();\n });\n }\n\n s = s.replace(MULTI_SPACE_RE, ' ');\n s = s.trim();\n return s;\n}\n\nfunction injectTzoStr(s, tzoStr) {\n var replaced = false;\n s = s.replace(UTC_RE, function () {\n replaced = true;\n return tzoStr;\n }); // IE11 doesn't include UTC/GMT in the original string, so append to end\n\n if (!replaced) {\n s += ' ' + tzoStr;\n }\n\n return s;\n}\n\nfunction formatWeekNumber(num, weekLabel, locale, display) {\n var parts = [];\n\n if (display === 'narrow') {\n parts.push(weekLabel);\n } else if (display === 'short') {\n parts.push(weekLabel, ' ');\n } // otherwise, considered 'numeric'\n\n\n parts.push(locale.simpleNumberFormat.format(num));\n\n if (locale.options.isRtl) {\n // TODO: use control characters instead?\n parts.reverse();\n }\n\n return parts.join('');\n} // Range Formatting Utils\n// 0 = exactly the same\n// 1 = different by time\n// and bigger\n\n\nfunction computeMarkerDiffSeverity(d0, d1, ca) {\n if (ca.getMarkerYear(d0) !== ca.getMarkerYear(d1)) {\n return 5;\n }\n\n if (ca.getMarkerMonth(d0) !== ca.getMarkerMonth(d1)) {\n return 4;\n }\n\n if (ca.getMarkerDay(d0) !== ca.getMarkerDay(d1)) {\n return 2;\n }\n\n if (timeAsMs(d0) !== timeAsMs(d1)) {\n return 1;\n }\n\n return 0;\n}\n\nfunction computePartialFormattingOptions(options, biggestUnit) {\n var partialOptions = {};\n\n for (var name_2 in options) {\n if (!(name_2 in STANDARD_DATE_PROP_SEVERITIES) || // not a date part prop (like timeZone)\n STANDARD_DATE_PROP_SEVERITIES[name_2] <= biggestUnit) {\n partialOptions[name_2] = options[name_2];\n }\n }\n\n return partialOptions;\n}\n\nfunction findCommonInsertion(full0, partial0, full1, partial1) {\n var i0 = 0;\n\n while (i0 < full0.length) {\n var found0 = full0.indexOf(partial0, i0);\n\n if (found0 === -1) {\n break;\n }\n\n var before0 = full0.substr(0, found0);\n i0 = found0 + partial0.length;\n var after0 = full0.substr(i0);\n var i1 = 0;\n\n while (i1 < full1.length) {\n var found1 = full1.indexOf(partial1, i1);\n\n if (found1 === -1) {\n break;\n }\n\n var before1 = full1.substr(0, found1);\n i1 = found1 + partial1.length;\n var after1 = full1.substr(i1);\n\n if (before0 === before1 && after0 === after1) {\n return {\n before: before0,\n after: after0\n };\n }\n }\n }\n\n return null;\n}\n/*\nTODO: fix the terminology of \"formatter\" vs \"formatting func\"\n*/\n\n/*\nAt the time of instantiation, this object does not know which cmd-formatting system it will use.\nIt receives this at the time of formatting, as a setting.\n*/\n\n\nvar CmdFormatter =\n/** @class */\nfunction () {\n function CmdFormatter(cmdStr, separator) {\n this.cmdStr = cmdStr;\n this.separator = separator;\n }\n\n CmdFormatter.prototype.format = function (date, context) {\n return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(date, null, context, this.separator));\n };\n\n CmdFormatter.prototype.formatRange = function (start, end, context) {\n return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(start, end, context, this.separator));\n };\n\n return CmdFormatter;\n}();\n\nvar FuncFormatter =\n/** @class */\nfunction () {\n function FuncFormatter(func) {\n this.func = func;\n }\n\n FuncFormatter.prototype.format = function (date, context) {\n return this.func(createVerboseFormattingArg(date, null, context));\n };\n\n FuncFormatter.prototype.formatRange = function (start, end, context) {\n return this.func(createVerboseFormattingArg(start, end, context));\n };\n\n return FuncFormatter;\n}(); // Formatter Object Creation\n\n\nfunction createFormatter(input, defaultSeparator) {\n if (_typeof(input) === 'object' && input) {\n // non-null object\n if (typeof defaultSeparator === 'string') {\n input = _assign({\n separator: defaultSeparator\n }, input);\n }\n\n return new NativeFormatter(input);\n } else if (typeof input === 'string') {\n return new CmdFormatter(input, defaultSeparator);\n } else if (typeof input === 'function') {\n return new FuncFormatter(input);\n }\n} // String Utils\n// timeZoneOffset is in minutes\n\n\nfunction buildIsoString(marker, timeZoneOffset, stripZeroTime) {\n if (stripZeroTime === void 0) {\n stripZeroTime = false;\n }\n\n var s = marker.toISOString();\n s = s.replace('.000', '');\n\n if (stripZeroTime) {\n s = s.replace('T00:00:00Z', '');\n }\n\n if (s.length > 10) {\n // time part wasn't stripped, can add timezone info\n if (timeZoneOffset == null) {\n s = s.replace('Z', '');\n } else if (timeZoneOffset !== 0) {\n s = s.replace('Z', formatTimeZoneOffset(timeZoneOffset, true));\n } // otherwise, its UTC-0 and we want to keep the Z\n\n }\n\n return s;\n}\n\nfunction formatIsoTimeString(marker) {\n return padStart(marker.getUTCHours(), 2) + ':' + padStart(marker.getUTCMinutes(), 2) + ':' + padStart(marker.getUTCSeconds(), 2);\n}\n\nfunction formatTimeZoneOffset(minutes, doIso) {\n if (doIso === void 0) {\n doIso = false;\n }\n\n var sign = minutes < 0 ? '-' : '+';\n var abs = Math.abs(minutes);\n var hours = Math.floor(abs / 60);\n var mins = Math.round(abs % 60);\n\n if (doIso) {\n return sign + padStart(hours, 2) + ':' + padStart(mins, 2);\n } else {\n return 'GMT' + sign + hours + (mins ? ':' + padStart(mins, 2) : '');\n }\n} // Arg Utils\n\n\nfunction createVerboseFormattingArg(start, end, context, separator) {\n var startInfo = expandZonedMarker(start, context.calendarSystem);\n var endInfo = end ? expandZonedMarker(end, context.calendarSystem) : null;\n return {\n date: startInfo,\n start: startInfo,\n end: endInfo,\n timeZone: context.timeZone,\n localeCodes: context.locale.codes,\n separator: separator\n };\n}\n\nfunction expandZonedMarker(dateInfo, calendarSystem) {\n var a = calendarSystem.markerToArray(dateInfo.marker);\n return {\n marker: dateInfo.marker,\n timeZoneOffset: dateInfo.timeZoneOffset,\n array: a,\n year: a[0],\n month: a[1],\n day: a[2],\n hour: a[3],\n minute: a[4],\n second: a[5],\n millisecond: a[6]\n };\n}\n\nvar EventSourceApi =\n/** @class */\nfunction () {\n function EventSourceApi(calendar, internalEventSource) {\n this.calendar = calendar;\n this.internalEventSource = internalEventSource;\n }\n\n EventSourceApi.prototype.remove = function () {\n this.calendar.dispatch({\n type: 'REMOVE_EVENT_SOURCE',\n sourceId: this.internalEventSource.sourceId\n });\n };\n\n EventSourceApi.prototype.refetch = function () {\n this.calendar.dispatch({\n type: 'FETCH_EVENT_SOURCES',\n sourceIds: [this.internalEventSource.sourceId]\n });\n };\n\n Object.defineProperty(EventSourceApi.prototype, \"id\", {\n get: function get() {\n return this.internalEventSource.publicId;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventSourceApi.prototype, \"url\", {\n // only relevant to json-feed event sources\n get: function get() {\n return this.internalEventSource.meta.url;\n },\n enumerable: true,\n configurable: true\n });\n return EventSourceApi;\n}();\n\nvar EventApi =\n/** @class */\nfunction () {\n function EventApi(calendar, def, instance) {\n this._calendar = calendar;\n this._def = def;\n this._instance = instance || null;\n }\n /*\n TODO: make event struct more responsible for this\n */\n\n\n EventApi.prototype.setProp = function (name, val) {\n var _a, _b;\n\n if (name in DATE_PROPS) ;else if (name in NON_DATE_PROPS) {\n if (typeof NON_DATE_PROPS[name] === 'function') {\n val = NON_DATE_PROPS[name](val);\n }\n\n this.mutate({\n standardProps: (_a = {}, _a[name] = val, _a)\n });\n } else if (name in UNSCOPED_EVENT_UI_PROPS) {\n var ui = void 0;\n\n if (typeof UNSCOPED_EVENT_UI_PROPS[name] === 'function') {\n val = UNSCOPED_EVENT_UI_PROPS[name](val);\n }\n\n if (name === 'color') {\n ui = {\n backgroundColor: val,\n borderColor: val\n };\n } else if (name === 'editable') {\n ui = {\n startEditable: val,\n durationEditable: val\n };\n } else {\n ui = (_b = {}, _b[name] = val, _b);\n }\n\n this.mutate({\n standardProps: {\n ui: ui\n }\n });\n }\n };\n\n EventApi.prototype.setExtendedProp = function (name, val) {\n var _a;\n\n this.mutate({\n extendedProps: (_a = {}, _a[name] = val, _a)\n });\n };\n\n EventApi.prototype.setStart = function (startInput, options) {\n if (options === void 0) {\n options = {};\n }\n\n var dateEnv = this._calendar.dateEnv;\n var start = dateEnv.createMarker(startInput);\n\n if (start && this._instance) {\n // TODO: warning if parsed bad\n var instanceRange = this._instance.range;\n var startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity); // what if parsed bad!?\n\n if (options.maintainDuration) {\n this.mutate({\n datesDelta: startDelta\n });\n } else {\n this.mutate({\n startDelta: startDelta\n });\n }\n }\n };\n\n EventApi.prototype.setEnd = function (endInput, options) {\n if (options === void 0) {\n options = {};\n }\n\n var dateEnv = this._calendar.dateEnv;\n var end;\n\n if (endInput != null) {\n end = dateEnv.createMarker(endInput);\n\n if (!end) {\n return; // TODO: warning if parsed bad\n }\n }\n\n if (this._instance) {\n if (end) {\n var endDelta = diffDates(this._instance.range.end, end, dateEnv, options.granularity);\n this.mutate({\n endDelta: endDelta\n });\n } else {\n this.mutate({\n standardProps: {\n hasEnd: false\n }\n });\n }\n }\n };\n\n EventApi.prototype.setDates = function (startInput, endInput, options) {\n if (options === void 0) {\n options = {};\n }\n\n var dateEnv = this._calendar.dateEnv;\n var standardProps = {\n allDay: options.allDay\n };\n var start = dateEnv.createMarker(startInput);\n var end;\n\n if (!start) {\n return; // TODO: warning if parsed bad\n }\n\n if (endInput != null) {\n end = dateEnv.createMarker(endInput);\n\n if (!end) {\n // TODO: warning if parsed bad\n return;\n }\n }\n\n if (this._instance) {\n var instanceRange = this._instance.range; // when computing the diff for an event being converted to all-day,\n // compute diff off of the all-day values the way event-mutation does.\n\n if (options.allDay === true) {\n instanceRange = computeAlignedDayRange(instanceRange);\n }\n\n var startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity);\n\n if (end) {\n var endDelta = diffDates(instanceRange.end, end, dateEnv, options.granularity);\n\n if (durationsEqual(startDelta, endDelta)) {\n this.mutate({\n datesDelta: startDelta,\n standardProps: standardProps\n });\n } else {\n this.mutate({\n startDelta: startDelta,\n endDelta: endDelta,\n standardProps: standardProps\n });\n }\n } else {\n // means \"clear the end\"\n standardProps.hasEnd = false;\n this.mutate({\n datesDelta: startDelta,\n standardProps: standardProps\n });\n }\n }\n };\n\n EventApi.prototype.moveStart = function (deltaInput) {\n var delta = createDuration(deltaInput);\n\n if (delta) {\n // TODO: warning if parsed bad\n this.mutate({\n startDelta: delta\n });\n }\n };\n\n EventApi.prototype.moveEnd = function (deltaInput) {\n var delta = createDuration(deltaInput);\n\n if (delta) {\n // TODO: warning if parsed bad\n this.mutate({\n endDelta: delta\n });\n }\n };\n\n EventApi.prototype.moveDates = function (deltaInput) {\n var delta = createDuration(deltaInput);\n\n if (delta) {\n // TODO: warning if parsed bad\n this.mutate({\n datesDelta: delta\n });\n }\n };\n\n EventApi.prototype.setAllDay = function (allDay, options) {\n if (options === void 0) {\n options = {};\n }\n\n var standardProps = {\n allDay: allDay\n };\n var maintainDuration = options.maintainDuration;\n\n if (maintainDuration == null) {\n maintainDuration = this._calendar.opt('allDayMaintainDuration');\n }\n\n if (this._def.allDay !== allDay) {\n standardProps.hasEnd = maintainDuration;\n }\n\n this.mutate({\n standardProps: standardProps\n });\n };\n\n EventApi.prototype.formatRange = function (formatInput) {\n var dateEnv = this._calendar.dateEnv;\n var instance = this._instance;\n var formatter = createFormatter(formatInput, this._calendar.opt('defaultRangeSeparator'));\n\n if (this._def.hasEnd) {\n return dateEnv.formatRange(instance.range.start, instance.range.end, formatter, {\n forcedStartTzo: instance.forcedStartTzo,\n forcedEndTzo: instance.forcedEndTzo\n });\n } else {\n return dateEnv.format(instance.range.start, formatter, {\n forcedTzo: instance.forcedStartTzo\n });\n }\n };\n\n EventApi.prototype.mutate = function (mutation) {\n var def = this._def;\n var instance = this._instance;\n\n if (instance) {\n this._calendar.dispatch({\n type: 'MUTATE_EVENTS',\n instanceId: instance.instanceId,\n mutation: mutation,\n fromApi: true\n });\n\n var eventStore = this._calendar.state.eventStore;\n this._def = eventStore.defs[def.defId];\n this._instance = eventStore.instances[instance.instanceId];\n }\n };\n\n EventApi.prototype.remove = function () {\n this._calendar.dispatch({\n type: 'REMOVE_EVENT_DEF',\n defId: this._def.defId\n });\n };\n\n Object.defineProperty(EventApi.prototype, \"source\", {\n get: function get() {\n var sourceId = this._def.sourceId;\n\n if (sourceId) {\n return new EventSourceApi(this._calendar, this._calendar.state.eventSources[sourceId]);\n }\n\n return null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"start\", {\n get: function get() {\n return this._instance ? this._calendar.dateEnv.toDate(this._instance.range.start) : null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"end\", {\n get: function get() {\n return this._instance && this._def.hasEnd ? this._calendar.dateEnv.toDate(this._instance.range.end) : null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"id\", {\n // computable props that all access the def\n // TODO: find a TypeScript-compatible way to do this at scale\n get: function get() {\n return this._def.publicId;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"groupId\", {\n get: function get() {\n return this._def.groupId;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"allDay\", {\n get: function get() {\n return this._def.allDay;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"title\", {\n get: function get() {\n return this._def.title;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"url\", {\n get: function get() {\n return this._def.url;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"rendering\", {\n get: function get() {\n return this._def.rendering;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"startEditable\", {\n get: function get() {\n return this._def.ui.startEditable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"durationEditable\", {\n get: function get() {\n return this._def.ui.durationEditable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"constraint\", {\n get: function get() {\n return this._def.ui.constraints[0] || null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"overlap\", {\n get: function get() {\n return this._def.ui.overlap;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"allow\", {\n get: function get() {\n return this._def.ui.allows[0] || null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"backgroundColor\", {\n get: function get() {\n return this._def.ui.backgroundColor;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"borderColor\", {\n get: function get() {\n return this._def.ui.borderColor;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"textColor\", {\n get: function get() {\n return this._def.ui.textColor;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"classNames\", {\n // NOTE: user can't modify these because Object.freeze was called in event-def parsing\n get: function get() {\n return this._def.ui.classNames;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EventApi.prototype, \"extendedProps\", {\n get: function get() {\n return this._def.extendedProps;\n },\n enumerable: true,\n configurable: true\n });\n return EventApi;\n}();\n/*\nSpecifying nextDayThreshold signals that all-day ranges should be sliced.\n*/\n\n\nfunction sliceEventStore(eventStore, eventUiBases, framingRange, nextDayThreshold) {\n var inverseBgByGroupId = {};\n var inverseBgByDefId = {};\n var defByGroupId = {};\n var bgRanges = [];\n var fgRanges = [];\n var eventUis = compileEventUis(eventStore.defs, eventUiBases);\n\n for (var defId in eventStore.defs) {\n var def = eventStore.defs[defId];\n\n if (def.rendering === 'inverse-background') {\n if (def.groupId) {\n inverseBgByGroupId[def.groupId] = [];\n\n if (!defByGroupId[def.groupId]) {\n defByGroupId[def.groupId] = def;\n }\n } else {\n inverseBgByDefId[defId] = [];\n }\n }\n }\n\n for (var instanceId in eventStore.instances) {\n var instance = eventStore.instances[instanceId];\n var def = eventStore.defs[instance.defId];\n var ui = eventUis[def.defId];\n var origRange = instance.range;\n var normalRange = !def.allDay && nextDayThreshold ? computeVisibleDayRange(origRange, nextDayThreshold) : origRange;\n var slicedRange = intersectRanges(normalRange, framingRange);\n\n if (slicedRange) {\n if (def.rendering === 'inverse-background') {\n if (def.groupId) {\n inverseBgByGroupId[def.groupId].push(slicedRange);\n } else {\n inverseBgByDefId[instance.defId].push(slicedRange);\n }\n } else {\n (def.rendering === 'background' ? bgRanges : fgRanges).push({\n def: def,\n ui: ui,\n instance: instance,\n range: slicedRange,\n isStart: normalRange.start && normalRange.start.valueOf() === slicedRange.start.valueOf(),\n isEnd: normalRange.end && normalRange.end.valueOf() === slicedRange.end.valueOf()\n });\n }\n }\n }\n\n for (var groupId in inverseBgByGroupId) {\n // BY GROUP\n var ranges = inverseBgByGroupId[groupId];\n var invertedRanges = invertRanges(ranges, framingRange);\n\n for (var _i = 0, invertedRanges_1 = invertedRanges; _i < invertedRanges_1.length; _i++) {\n var invertedRange = invertedRanges_1[_i];\n var def = defByGroupId[groupId];\n var ui = eventUis[def.defId];\n bgRanges.push({\n def: def,\n ui: ui,\n instance: null,\n range: invertedRange,\n isStart: false,\n isEnd: false\n });\n }\n }\n\n for (var defId in inverseBgByDefId) {\n var ranges = inverseBgByDefId[defId];\n var invertedRanges = invertRanges(ranges, framingRange);\n\n for (var _a = 0, invertedRanges_2 = invertedRanges; _a < invertedRanges_2.length; _a++) {\n var invertedRange = invertedRanges_2[_a];\n bgRanges.push({\n def: eventStore.defs[defId],\n ui: eventUis[defId],\n instance: null,\n range: invertedRange,\n isStart: false,\n isEnd: false\n });\n }\n }\n\n return {\n bg: bgRanges,\n fg: fgRanges\n };\n}\n\nfunction hasBgRendering(def) {\n return def.rendering === 'background' || def.rendering === 'inverse-background';\n}\n\nfunction filterSegsViaEls(view, segs, isMirror) {\n if (view.hasPublicHandlers('eventRender')) {\n segs = segs.filter(function (seg) {\n var custom = view.publiclyTrigger('eventRender', [{\n event: new EventApi(view.calendar, seg.eventRange.def, seg.eventRange.instance),\n isMirror: isMirror,\n isStart: seg.isStart,\n isEnd: seg.isEnd,\n // TODO: include seg.range once all components consistently generate it\n el: seg.el,\n view: view\n }]);\n\n if (custom === false) {\n // means don't render at all\n return false;\n } else if (custom && custom !== true) {\n seg.el = custom;\n }\n\n return true;\n });\n }\n\n for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {\n var seg = segs_1[_i];\n setElSeg(seg.el, seg);\n }\n\n return segs;\n}\n\nfunction setElSeg(el, seg) {\n el.fcSeg = seg;\n}\n\nfunction getElSeg(el) {\n return el.fcSeg || null;\n} // event ui computation\n\n\nfunction compileEventUis(eventDefs, eventUiBases) {\n return mapHash(eventDefs, function (eventDef) {\n return compileEventUi(eventDef, eventUiBases);\n });\n}\n\nfunction compileEventUi(eventDef, eventUiBases) {\n var uis = [];\n\n if (eventUiBases['']) {\n uis.push(eventUiBases['']);\n }\n\n if (eventUiBases[eventDef.defId]) {\n uis.push(eventUiBases[eventDef.defId]);\n }\n\n uis.push(eventDef.ui);\n return combineEventUis(uis);\n} // applies the mutation to ALL defs/instances within the event store\n\n\nfunction applyMutationToEventStore(eventStore, eventConfigBase, mutation, calendar) {\n var eventConfigs = compileEventUis(eventStore.defs, eventConfigBase);\n var dest = createEmptyEventStore();\n\n for (var defId in eventStore.defs) {\n var def = eventStore.defs[defId];\n dest.defs[defId] = applyMutationToEventDef(def, eventConfigs[defId], mutation, calendar.pluginSystem.hooks.eventDefMutationAppliers, calendar);\n }\n\n for (var instanceId in eventStore.instances) {\n var instance = eventStore.instances[instanceId];\n var def = dest.defs[instance.defId]; // important to grab the newly modified def\n\n dest.instances[instanceId] = applyMutationToEventInstance(instance, def, eventConfigs[instance.defId], mutation, calendar);\n }\n\n return dest;\n}\n\nfunction applyMutationToEventDef(eventDef, eventConfig, mutation, appliers, calendar) {\n var standardProps = mutation.standardProps || {}; // if hasEnd has not been specified, guess a good value based on deltas.\n // if duration will change, there's no way the default duration will persist,\n // and thus, we need to mark the event as having a real end\n\n if (standardProps.hasEnd == null && eventConfig.durationEditable && (mutation.startDelta || mutation.endDelta)) {\n standardProps.hasEnd = true; // TODO: is this mutation okay?\n }\n\n var copy = _assign({}, eventDef, standardProps, {\n ui: _assign({}, eventDef.ui, standardProps.ui)\n });\n\n if (mutation.extendedProps) {\n copy.extendedProps = _assign({}, copy.extendedProps, mutation.extendedProps);\n }\n\n for (var _i = 0, appliers_1 = appliers; _i < appliers_1.length; _i++) {\n var applier = appliers_1[_i];\n applier(copy, mutation, calendar);\n }\n\n if (!copy.hasEnd && calendar.opt('forceEventDuration')) {\n copy.hasEnd = true;\n }\n\n return copy;\n}\n\nfunction applyMutationToEventInstance(eventInstance, eventDef, // must first be modified by applyMutationToEventDef\neventConfig, mutation, calendar) {\n var dateEnv = calendar.dateEnv;\n var forceAllDay = mutation.standardProps && mutation.standardProps.allDay === true;\n var clearEnd = mutation.standardProps && mutation.standardProps.hasEnd === false;\n\n var copy = _assign({}, eventInstance);\n\n if (forceAllDay) {\n copy.range = computeAlignedDayRange(copy.range);\n }\n\n if (mutation.datesDelta && eventConfig.startEditable) {\n copy.range = {\n start: dateEnv.add(copy.range.start, mutation.datesDelta),\n end: dateEnv.add(copy.range.end, mutation.datesDelta)\n };\n }\n\n if (mutation.startDelta && eventConfig.durationEditable) {\n copy.range = {\n start: dateEnv.add(copy.range.start, mutation.startDelta),\n end: copy.range.end\n };\n }\n\n if (mutation.endDelta && eventConfig.durationEditable) {\n copy.range = {\n start: copy.range.start,\n end: dateEnv.add(copy.range.end, mutation.endDelta)\n };\n }\n\n if (clearEnd) {\n copy.range = {\n start: copy.range.start,\n end: calendar.getDefaultEventEnd(eventDef.allDay, copy.range.start)\n };\n } // in case event was all-day but the supplied deltas were not\n // better util for this?\n\n\n if (eventDef.allDay) {\n copy.range = {\n start: startOfDay(copy.range.start),\n end: startOfDay(copy.range.end)\n };\n } // handle invalid durations\n\n\n if (copy.range.end < copy.range.start) {\n copy.range.end = calendar.getDefaultEventEnd(eventDef.allDay, copy.range.start);\n }\n\n return copy;\n}\n\nfunction reduceEventStore(eventStore, action, eventSources, dateProfile, calendar) {\n switch (action.type) {\n case 'RECEIVE_EVENTS':\n // raw\n return receiveRawEvents(eventStore, eventSources[action.sourceId], action.fetchId, action.fetchRange, action.rawEvents, calendar);\n\n case 'ADD_EVENTS':\n // already parsed, but not expanded\n return addEvent(eventStore, action.eventStore, // new ones\n dateProfile ? dateProfile.activeRange : null, calendar);\n\n case 'MERGE_EVENTS':\n // already parsed and expanded\n return mergeEventStores(eventStore, action.eventStore);\n\n case 'PREV': // TODO: how do we track all actions that affect dateProfile :(\n\n case 'NEXT':\n case 'SET_DATE':\n case 'SET_VIEW_TYPE':\n if (dateProfile) {\n return expandRecurring(eventStore, dateProfile.activeRange, calendar);\n } else {\n return eventStore;\n }\n\n case 'CHANGE_TIMEZONE':\n return rezoneDates(eventStore, action.oldDateEnv, calendar.dateEnv);\n\n case 'MUTATE_EVENTS':\n return applyMutationToRelated(eventStore, action.instanceId, action.mutation, action.fromApi, calendar);\n\n case 'REMOVE_EVENT_INSTANCES':\n return excludeInstances(eventStore, action.instances);\n\n case 'REMOVE_EVENT_DEF':\n return filterEventStoreDefs(eventStore, function (eventDef) {\n return eventDef.defId !== action.defId;\n });\n\n case 'REMOVE_EVENT_SOURCE':\n return excludeEventsBySourceId(eventStore, action.sourceId);\n\n case 'REMOVE_ALL_EVENT_SOURCES':\n return filterEventStoreDefs(eventStore, function (eventDef) {\n return !eventDef.sourceId; // only keep events with no source id\n });\n\n case 'REMOVE_ALL_EVENTS':\n return createEmptyEventStore();\n\n case 'RESET_EVENTS':\n return {\n defs: eventStore.defs,\n instances: eventStore.instances\n };\n\n default:\n return eventStore;\n }\n}\n\nfunction receiveRawEvents(eventStore, eventSource, fetchId, fetchRange, rawEvents, calendar) {\n if (eventSource && // not already removed\n fetchId === eventSource.latestFetchId // TODO: wish this logic was always in event-sources\n ) {\n var subset = parseEvents(transformRawEvents(rawEvents, eventSource, calendar), eventSource.sourceId, calendar);\n\n if (fetchRange) {\n subset = expandRecurring(subset, fetchRange, calendar);\n }\n\n return mergeEventStores(excludeEventsBySourceId(eventStore, eventSource.sourceId), subset);\n }\n\n return eventStore;\n}\n\nfunction addEvent(eventStore, subset, expandRange, calendar) {\n if (expandRange) {\n subset = expandRecurring(subset, expandRange, calendar);\n }\n\n return mergeEventStores(eventStore, subset);\n}\n\nfunction rezoneDates(eventStore, oldDateEnv, newDateEnv) {\n var defs = eventStore.defs;\n var instances = mapHash(eventStore.instances, function (instance) {\n var def = defs[instance.defId];\n\n if (def.allDay || def.recurringDef) {\n return instance; // isn't dependent on timezone\n } else {\n return _assign({}, instance, {\n range: {\n start: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start, instance.forcedStartTzo)),\n end: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end, instance.forcedEndTzo))\n },\n forcedStartTzo: newDateEnv.canComputeOffset ? null : instance.forcedStartTzo,\n forcedEndTzo: newDateEnv.canComputeOffset ? null : instance.forcedEndTzo\n });\n }\n });\n return {\n defs: defs,\n instances: instances\n };\n}\n\nfunction applyMutationToRelated(eventStore, instanceId, mutation, fromApi, calendar) {\n var relevant = getRelevantEvents(eventStore, instanceId);\n var eventConfigBase = fromApi ? {\n '': {\n startEditable: true,\n durationEditable: true,\n constraints: [],\n overlap: null,\n allows: [],\n backgroundColor: '',\n borderColor: '',\n textColor: '',\n classNames: []\n }\n } : calendar.eventUiBases;\n relevant = applyMutationToEventStore(relevant, eventConfigBase, mutation, calendar);\n return mergeEventStores(eventStore, relevant);\n}\n\nfunction excludeEventsBySourceId(eventStore, sourceId) {\n return filterEventStoreDefs(eventStore, function (eventDef) {\n return eventDef.sourceId !== sourceId;\n });\n} // QUESTION: why not just return instances? do a general object-property-exclusion util\n\n\nfunction excludeInstances(eventStore, removals) {\n return {\n defs: eventStore.defs,\n instances: filterHash(eventStore.instances, function (instance) {\n return !removals[instance.instanceId];\n })\n };\n} // high-level segmenting-aware tester functions\n// ------------------------------------------------------------------------------------------------------------------------\n\n\nfunction isInteractionValid(interaction, calendar) {\n return isNewPropsValid({\n eventDrag: interaction\n }, calendar); // HACK: the eventDrag props is used for ALL interactions\n}\n\nfunction isDateSelectionValid(dateSelection, calendar) {\n return isNewPropsValid({\n dateSelection: dateSelection\n }, calendar);\n}\n\nfunction isNewPropsValid(newProps, calendar) {\n var view = calendar.view;\n\n var props = _assign({\n businessHours: view ? view.props.businessHours : createEmptyEventStore(),\n dateSelection: '',\n eventStore: calendar.state.eventStore,\n eventUiBases: calendar.eventUiBases,\n eventSelection: '',\n eventDrag: null,\n eventResize: null\n }, newProps);\n\n return (calendar.pluginSystem.hooks.isPropsValid || isPropsValid)(props, calendar);\n}\n\nfunction isPropsValid(state, calendar, dateSpanMeta, filterConfig) {\n if (dateSpanMeta === void 0) {\n dateSpanMeta = {};\n }\n\n if (state.eventDrag && !isInteractionPropsValid(state, calendar, dateSpanMeta, filterConfig)) {\n return false;\n }\n\n if (state.dateSelection && !isDateSelectionPropsValid(state, calendar, dateSpanMeta, filterConfig)) {\n return false;\n }\n\n return true;\n} // Moving Event Validation\n// ------------------------------------------------------------------------------------------------------------------------\n\n\nfunction isInteractionPropsValid(state, calendar, dateSpanMeta, filterConfig) {\n var interaction = state.eventDrag; // HACK: the eventDrag props is used for ALL interactions\n\n var subjectEventStore = interaction.mutatedEvents;\n var subjectDefs = subjectEventStore.defs;\n var subjectInstances = subjectEventStore.instances;\n var subjectConfigs = compileEventUis(subjectDefs, interaction.isEvent ? state.eventUiBases : {\n '': calendar.selectionConfig\n } // if not a real event, validate as a selection\n );\n\n if (filterConfig) {\n subjectConfigs = mapHash(subjectConfigs, filterConfig);\n }\n\n var otherEventStore = excludeInstances(state.eventStore, interaction.affectedEvents.instances); // exclude the subject events. TODO: exclude defs too?\n\n var otherDefs = otherEventStore.defs;\n var otherInstances = otherEventStore.instances;\n var otherConfigs = compileEventUis(otherDefs, state.eventUiBases);\n\n for (var subjectInstanceId in subjectInstances) {\n var subjectInstance = subjectInstances[subjectInstanceId];\n var subjectRange = subjectInstance.range;\n var subjectConfig = subjectConfigs[subjectInstance.defId];\n var subjectDef = subjectDefs[subjectInstance.defId]; // constraint\n\n if (!allConstraintsPass(subjectConfig.constraints, subjectRange, otherEventStore, state.businessHours, calendar)) {\n return false;\n } // overlap\n\n\n var overlapFunc = calendar.opt('eventOverlap');\n\n if (typeof overlapFunc !== 'function') {\n overlapFunc = null;\n }\n\n for (var otherInstanceId in otherInstances) {\n var otherInstance = otherInstances[otherInstanceId]; // intersect! evaluate\n\n if (rangesIntersect(subjectRange, otherInstance.range)) {\n var otherOverlap = otherConfigs[otherInstance.defId].overlap; // consider the other event's overlap. only do this if the subject event is a \"real\" event\n\n if (otherOverlap === false && interaction.isEvent) {\n return false;\n }\n\n if (subjectConfig.overlap === false) {\n return false;\n }\n\n if (overlapFunc && !overlapFunc(new EventApi(calendar, otherDefs[otherInstance.defId], otherInstance), // still event\n new EventApi(calendar, subjectDef, subjectInstance) // moving event\n )) {\n return false;\n }\n }\n } // allow (a function)\n\n\n var calendarEventStore = calendar.state.eventStore; // need global-to-calendar, not local to component (splittable)state\n\n for (var _i = 0, _a = subjectConfig.allows; _i < _a.length; _i++) {\n var subjectAllow = _a[_i];\n\n var subjectDateSpan = _assign({}, dateSpanMeta, {\n range: subjectInstance.range,\n allDay: subjectDef.allDay\n });\n\n var origDef = calendarEventStore.defs[subjectDef.defId];\n var origInstance = calendarEventStore.instances[subjectInstanceId];\n var eventApi = void 0;\n\n if (origDef) {\n // was previously in the calendar\n eventApi = new EventApi(calendar, origDef, origInstance);\n } else {\n // was an external event\n eventApi = new EventApi(calendar, subjectDef); // no instance, because had no dates\n }\n\n if (!subjectAllow(calendar.buildDateSpanApi(subjectDateSpan), eventApi)) {\n return false;\n }\n }\n }\n\n return true;\n} // Date Selection Validation\n// ------------------------------------------------------------------------------------------------------------------------\n\n\nfunction isDateSelectionPropsValid(state, calendar, dateSpanMeta, filterConfig) {\n var relevantEventStore = state.eventStore;\n var relevantDefs = relevantEventStore.defs;\n var relevantInstances = relevantEventStore.instances;\n var selection = state.dateSelection;\n var selectionRange = selection.range;\n var selectionConfig = calendar.selectionConfig;\n\n if (filterConfig) {\n selectionConfig = filterConfig(selectionConfig);\n } // constraint\n\n\n if (!allConstraintsPass(selectionConfig.constraints, selectionRange, relevantEventStore, state.businessHours, calendar)) {\n return false;\n } // overlap\n\n\n var overlapFunc = calendar.opt('selectOverlap');\n\n if (typeof overlapFunc !== 'function') {\n overlapFunc = null;\n }\n\n for (var relevantInstanceId in relevantInstances) {\n var relevantInstance = relevantInstances[relevantInstanceId]; // intersect! evaluate\n\n if (rangesIntersect(selectionRange, relevantInstance.range)) {\n if (selectionConfig.overlap === false) {\n return false;\n }\n\n if (overlapFunc && !overlapFunc(new EventApi(calendar, relevantDefs[relevantInstance.defId], relevantInstance))) {\n return false;\n }\n }\n } // allow (a function)\n\n\n for (var _i = 0, _a = selectionConfig.allows; _i < _a.length; _i++) {\n var selectionAllow = _a[_i];\n\n var fullDateSpan = _assign({}, dateSpanMeta, selection);\n\n if (!selectionAllow(calendar.buildDateSpanApi(fullDateSpan), null)) {\n return false;\n }\n }\n\n return true;\n} // Constraint Utils\n// ------------------------------------------------------------------------------------------------------------------------\n\n\nfunction allConstraintsPass(constraints, subjectRange, otherEventStore, businessHoursUnexpanded, calendar) {\n for (var _i = 0, constraints_1 = constraints; _i < constraints_1.length; _i++) {\n var constraint = constraints_1[_i];\n\n if (!anyRangesContainRange(constraintToRanges(constraint, subjectRange, otherEventStore, businessHoursUnexpanded, calendar), subjectRange)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction constraintToRanges(constraint, subjectRange, // for expanding a recurring constraint, or expanding business hours\notherEventStore, // for if constraint is an even group ID\nbusinessHoursUnexpanded, // for if constraint is 'businessHours'\ncalendar // for expanding businesshours\n) {\n if (constraint === 'businessHours') {\n return eventStoreToRanges(expandRecurring(businessHoursUnexpanded, subjectRange, calendar));\n } else if (typeof constraint === 'string') {\n // an group ID\n return eventStoreToRanges(filterEventStoreDefs(otherEventStore, function (eventDef) {\n return eventDef.groupId === constraint;\n }));\n } else if (_typeof(constraint) === 'object' && constraint) {\n // non-null object\n return eventStoreToRanges(expandRecurring(constraint, subjectRange, calendar));\n }\n\n return []; // if it's false\n} // TODO: move to event-store file?\n\n\nfunction eventStoreToRanges(eventStore) {\n var instances = eventStore.instances;\n var ranges = [];\n\n for (var instanceId in instances) {\n ranges.push(instances[instanceId].range);\n }\n\n return ranges;\n} // TODO: move to geom file?\n\n\nfunction anyRangesContainRange(outerRanges, innerRange) {\n for (var _i = 0, outerRanges_1 = outerRanges; _i < outerRanges_1.length; _i++) {\n var outerRange = outerRanges_1[_i];\n\n if (rangeContainsRange(outerRange, innerRange)) {\n return true;\n }\n }\n\n return false;\n} // Parsing\n// ------------------------------------------------------------------------------------------------------------------------\n\n\nfunction normalizeConstraint(input, calendar) {\n if (Array.isArray(input)) {\n return parseEvents(input, '', calendar, true); // allowOpenRange=true\n } else if (_typeof(input) === 'object' && input) {\n // non-null object\n return parseEvents([input], '', calendar, true); // allowOpenRange=true\n } else if (input != null) {\n return String(input);\n } else {\n return null;\n }\n}\n\nfunction htmlEscape(s) {\n return (s + '').replace(/&/g, '&').replace(//g, '>').replace(/'/g, ''').replace(/\"/g, '"').replace(/\\n/g, '
');\n} // Given a hash of CSS properties, returns a string of CSS.\n// Uses property names as-is (no camel-case conversion). Will not make statements for null/undefined values.\n\n\nfunction cssToStr(cssProps) {\n var statements = [];\n\n for (var name_1 in cssProps) {\n var val = cssProps[name_1];\n\n if (val != null && val !== '') {\n statements.push(name_1 + ':' + val);\n }\n }\n\n return statements.join(';');\n} // Given an object hash of HTML attribute names to values,\n// generates a string that can be injected between < > in HTML\n\n\nfunction attrsToStr(attrs) {\n var parts = [];\n\n for (var name_2 in attrs) {\n var val = attrs[name_2];\n\n if (val != null) {\n parts.push(name_2 + '=\"' + htmlEscape(val) + '\"');\n }\n }\n\n return parts.join(' ');\n}\n\nfunction parseClassName(raw) {\n if (Array.isArray(raw)) {\n return raw;\n } else if (typeof raw === 'string') {\n return raw.split(/\\s+/);\n } else {\n return [];\n }\n}\n\nvar UNSCOPED_EVENT_UI_PROPS = {\n editable: Boolean,\n startEditable: Boolean,\n durationEditable: Boolean,\n constraint: null,\n overlap: null,\n allow: null,\n className: parseClassName,\n classNames: parseClassName,\n color: String,\n backgroundColor: String,\n borderColor: String,\n textColor: String\n};\n\nfunction processUnscopedUiProps(rawProps, calendar, leftovers) {\n var props = refineProps(rawProps, UNSCOPED_EVENT_UI_PROPS, {}, leftovers);\n var constraint = normalizeConstraint(props.constraint, calendar);\n return {\n startEditable: props.startEditable != null ? props.startEditable : props.editable,\n durationEditable: props.durationEditable != null ? props.durationEditable : props.editable,\n constraints: constraint != null ? [constraint] : [],\n overlap: props.overlap,\n allows: props.allow != null ? [props.allow] : [],\n backgroundColor: props.backgroundColor || props.color,\n borderColor: props.borderColor || props.color,\n textColor: props.textColor,\n classNames: props.classNames.concat(props.className)\n };\n}\n\nfunction processScopedUiProps(prefix, rawScoped, calendar, leftovers) {\n var rawUnscoped = {};\n var wasFound = {};\n\n for (var key in UNSCOPED_EVENT_UI_PROPS) {\n var scopedKey = prefix + capitaliseFirstLetter(key);\n rawUnscoped[key] = rawScoped[scopedKey];\n wasFound[scopedKey] = true;\n }\n\n if (prefix === 'event') {\n rawUnscoped.editable = rawScoped.editable; // special case. there is no 'eventEditable', just 'editable'\n }\n\n if (leftovers) {\n for (var key in rawScoped) {\n if (!wasFound[key]) {\n leftovers[key] = rawScoped[key];\n }\n }\n }\n\n return processUnscopedUiProps(rawUnscoped, calendar);\n}\n\nvar EMPTY_EVENT_UI = {\n startEditable: null,\n durationEditable: null,\n constraints: [],\n overlap: null,\n allows: [],\n backgroundColor: '',\n borderColor: '',\n textColor: '',\n classNames: []\n}; // prevent against problems with <2 args!\n\nfunction combineEventUis(uis) {\n return uis.reduce(combineTwoEventUis, EMPTY_EVENT_UI);\n}\n\nfunction combineTwoEventUis(item0, item1) {\n return {\n startEditable: item1.startEditable != null ? item1.startEditable : item0.startEditable,\n durationEditable: item1.durationEditable != null ? item1.durationEditable : item0.durationEditable,\n constraints: item0.constraints.concat(item1.constraints),\n overlap: typeof item1.overlap === 'boolean' ? item1.overlap : item0.overlap,\n allows: item0.allows.concat(item1.allows),\n backgroundColor: item1.backgroundColor || item0.backgroundColor,\n borderColor: item1.borderColor || item0.borderColor,\n textColor: item1.textColor || item0.textColor,\n classNames: item0.classNames.concat(item1.classNames)\n };\n}\n\nvar NON_DATE_PROPS = {\n id: String,\n groupId: String,\n title: String,\n url: String,\n rendering: String,\n extendedProps: null\n};\nvar DATE_PROPS = {\n start: null,\n date: null,\n end: null,\n allDay: null\n};\nvar uid = 0;\n\nfunction parseEvent(raw, sourceId, calendar, allowOpenRange) {\n var allDayDefault = computeIsAllDayDefault(sourceId, calendar);\n var leftovers0 = {};\n var recurringRes = parseRecurring(raw, // raw, but with single-event stuff stripped out\n allDayDefault, calendar.dateEnv, calendar.pluginSystem.hooks.recurringTypes, leftovers0 // will populate with non-recurring props\n );\n\n if (recurringRes) {\n var def = parseEventDef(leftovers0, sourceId, recurringRes.allDay, Boolean(recurringRes.duration), calendar);\n def.recurringDef = {\n typeId: recurringRes.typeId,\n typeData: recurringRes.typeData,\n duration: recurringRes.duration\n };\n return {\n def: def,\n instance: null\n };\n } else {\n var leftovers1 = {};\n var singleRes = parseSingle(raw, allDayDefault, calendar, leftovers1, allowOpenRange);\n\n if (singleRes) {\n var def = parseEventDef(leftovers1, sourceId, singleRes.allDay, singleRes.hasEnd, calendar);\n var instance = createEventInstance(def.defId, singleRes.range, singleRes.forcedStartTzo, singleRes.forcedEndTzo);\n return {\n def: def,\n instance: instance\n };\n }\n }\n\n return null;\n}\n/*\nWill NOT populate extendedProps with the leftover properties.\nWill NOT populate date-related props.\nThe EventNonDateInput has been normalized (id => publicId, etc).\n*/\n\n\nfunction parseEventDef(raw, sourceId, allDay, hasEnd, calendar) {\n var leftovers = {};\n var def = pluckNonDateProps(raw, calendar, leftovers);\n def.defId = String(uid++);\n def.sourceId = sourceId;\n def.allDay = allDay;\n def.hasEnd = hasEnd;\n\n for (var _i = 0, _a = calendar.pluginSystem.hooks.eventDefParsers; _i < _a.length; _i++) {\n var eventDefParser = _a[_i];\n var newLeftovers = {};\n eventDefParser(def, leftovers, newLeftovers);\n leftovers = newLeftovers;\n }\n\n def.extendedProps = _assign(leftovers, def.extendedProps || {}); // help out EventApi from having user modify props\n\n Object.freeze(def.ui.classNames);\n Object.freeze(def.extendedProps);\n return def;\n}\n\nfunction createEventInstance(defId, range, forcedStartTzo, forcedEndTzo) {\n return {\n instanceId: String(uid++),\n defId: defId,\n range: range,\n forcedStartTzo: forcedStartTzo == null ? null : forcedStartTzo,\n forcedEndTzo: forcedEndTzo == null ? null : forcedEndTzo\n };\n}\n\nfunction parseSingle(raw, allDayDefault, calendar, leftovers, allowOpenRange) {\n var props = pluckDateProps(raw, leftovers);\n var allDay = props.allDay;\n var startMeta;\n var startMarker = null;\n var hasEnd = false;\n var endMeta;\n var endMarker = null;\n startMeta = calendar.dateEnv.createMarkerMeta(props.start);\n\n if (startMeta) {\n startMarker = startMeta.marker;\n } else if (!allowOpenRange) {\n return null;\n }\n\n if (props.end != null) {\n endMeta = calendar.dateEnv.createMarkerMeta(props.end);\n }\n\n if (allDay == null) {\n if (allDayDefault != null) {\n allDay = allDayDefault;\n } else {\n // fall back to the date props LAST\n allDay = (!startMeta || startMeta.isTimeUnspecified) && (!endMeta || endMeta.isTimeUnspecified);\n }\n }\n\n if (allDay && startMarker) {\n startMarker = startOfDay(startMarker);\n }\n\n if (endMeta) {\n endMarker = endMeta.marker;\n\n if (allDay) {\n endMarker = startOfDay(endMarker);\n }\n\n if (startMarker && endMarker <= startMarker) {\n endMarker = null;\n }\n }\n\n if (endMarker) {\n hasEnd = true;\n } else if (!allowOpenRange) {\n hasEnd = calendar.opt('forceEventDuration') || false;\n endMarker = calendar.dateEnv.add(startMarker, allDay ? calendar.defaultAllDayEventDuration : calendar.defaultTimedEventDuration);\n }\n\n return {\n allDay: allDay,\n hasEnd: hasEnd,\n range: {\n start: startMarker,\n end: endMarker\n },\n forcedStartTzo: startMeta ? startMeta.forcedTzo : null,\n forcedEndTzo: endMeta ? endMeta.forcedTzo : null\n };\n}\n\nfunction pluckDateProps(raw, leftovers) {\n var props = refineProps(raw, DATE_PROPS, {}, leftovers);\n props.start = props.start !== null ? props.start : props.date;\n delete props.date;\n return props;\n}\n\nfunction pluckNonDateProps(raw, calendar, leftovers) {\n var preLeftovers = {};\n var props = refineProps(raw, NON_DATE_PROPS, {}, preLeftovers);\n var ui = processUnscopedUiProps(preLeftovers, calendar, leftovers);\n props.publicId = props.id;\n delete props.id;\n props.ui = ui;\n return props;\n}\n\nfunction computeIsAllDayDefault(sourceId, calendar) {\n var res = null;\n\n if (sourceId) {\n var source = calendar.state.eventSources[sourceId];\n res = source.allDayDefault;\n }\n\n if (res == null) {\n res = calendar.opt('allDayDefault');\n }\n\n return res;\n}\n\nvar DEF_DEFAULTS = {\n startTime: '09:00',\n endTime: '17:00',\n daysOfWeek: [1, 2, 3, 4, 5],\n rendering: 'inverse-background',\n classNames: 'fc-nonbusiness',\n groupId: '_businessHours' // so multiple defs get grouped\n\n};\n/*\nTODO: pass around as EventDefHash!!!\n*/\n\nfunction parseBusinessHours(input, calendar) {\n return parseEvents(refineInputs(input), '', calendar);\n}\n\nfunction refineInputs(input) {\n var rawDefs;\n\n if (input === true) {\n rawDefs = [{}]; // will get DEF_DEFAULTS verbatim\n } else if (Array.isArray(input)) {\n // if specifying an array, every sub-definition NEEDS a day-of-week\n rawDefs = input.filter(function (rawDef) {\n return rawDef.daysOfWeek;\n });\n } else if (_typeof(input) === 'object' && input) {\n // non-null object\n rawDefs = [input];\n } else {\n // is probably false\n rawDefs = [];\n }\n\n rawDefs = rawDefs.map(function (rawDef) {\n return _assign({}, DEF_DEFAULTS, rawDef);\n });\n return rawDefs;\n}\n\nfunction memoizeRendering(renderFunc, unrenderFunc, dependencies) {\n if (dependencies === void 0) {\n dependencies = [];\n }\n\n var dependents = [];\n var thisContext;\n var prevArgs;\n\n function unrender() {\n if (prevArgs) {\n for (var _i = 0, dependents_1 = dependents; _i < dependents_1.length; _i++) {\n var dependent = dependents_1[_i];\n dependent.unrender();\n }\n\n if (unrenderFunc) {\n unrenderFunc.apply(thisContext, prevArgs);\n }\n\n prevArgs = null;\n }\n }\n\n function res() {\n if (!prevArgs || !isArraysEqual(prevArgs, arguments)) {\n unrender();\n thisContext = this;\n prevArgs = arguments;\n renderFunc.apply(this, arguments);\n }\n }\n\n res.dependents = dependents;\n res.unrender = unrender;\n\n for (var _i = 0, dependencies_1 = dependencies; _i < dependencies_1.length; _i++) {\n var dependency = dependencies_1[_i];\n dependency.dependents.push(res);\n }\n\n return res;\n}\n\nvar EMPTY_EVENT_STORE = createEmptyEventStore(); // for purecomponents. TODO: keep elsewhere\n\nvar Splitter =\n/** @class */\nfunction () {\n function Splitter() {\n this.getKeysForEventDefs = memoize(this._getKeysForEventDefs);\n this.splitDateSelection = memoize(this._splitDateSpan);\n this.splitEventStore = memoize(this._splitEventStore);\n this.splitIndividualUi = memoize(this._splitIndividualUi);\n this.splitEventDrag = memoize(this._splitInteraction);\n this.splitEventResize = memoize(this._splitInteraction);\n this.eventUiBuilders = {}; // TODO: typescript protection\n }\n\n Splitter.prototype.splitProps = function (props) {\n var _this = this;\n\n var keyInfos = this.getKeyInfo(props);\n var defKeys = this.getKeysForEventDefs(props.eventStore);\n var dateSelections = this.splitDateSelection(props.dateSelection);\n var individualUi = this.splitIndividualUi(props.eventUiBases, defKeys); // the individual *bases*\n\n var eventStores = this.splitEventStore(props.eventStore, defKeys);\n var eventDrags = this.splitEventDrag(props.eventDrag);\n var eventResizes = this.splitEventResize(props.eventResize);\n var splitProps = {};\n this.eventUiBuilders = mapHash(keyInfos, function (info, key) {\n return _this.eventUiBuilders[key] || memoize(buildEventUiForKey);\n });\n\n for (var key in keyInfos) {\n var keyInfo = keyInfos[key];\n var eventStore = eventStores[key] || EMPTY_EVENT_STORE;\n var buildEventUi = this.eventUiBuilders[key];\n splitProps[key] = {\n businessHours: keyInfo.businessHours || props.businessHours,\n dateSelection: dateSelections[key] || null,\n eventStore: eventStore,\n eventUiBases: buildEventUi(props.eventUiBases[''], keyInfo.ui, individualUi[key]),\n eventSelection: eventStore.instances[props.eventSelection] ? props.eventSelection : '',\n eventDrag: eventDrags[key] || null,\n eventResize: eventResizes[key] || null\n };\n }\n\n return splitProps;\n };\n\n Splitter.prototype._splitDateSpan = function (dateSpan) {\n var dateSpans = {};\n\n if (dateSpan) {\n var keys = this.getKeysForDateSpan(dateSpan);\n\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n dateSpans[key] = dateSpan;\n }\n }\n\n return dateSpans;\n };\n\n Splitter.prototype._getKeysForEventDefs = function (eventStore) {\n var _this = this;\n\n return mapHash(eventStore.defs, function (eventDef) {\n return _this.getKeysForEventDef(eventDef);\n });\n };\n\n Splitter.prototype._splitEventStore = function (eventStore, defKeys) {\n var defs = eventStore.defs,\n instances = eventStore.instances;\n var splitStores = {};\n\n for (var defId in defs) {\n for (var _i = 0, _a = defKeys[defId]; _i < _a.length; _i++) {\n var key = _a[_i];\n\n if (!splitStores[key]) {\n splitStores[key] = createEmptyEventStore();\n }\n\n splitStores[key].defs[defId] = defs[defId];\n }\n }\n\n for (var instanceId in instances) {\n var instance = instances[instanceId];\n\n for (var _b = 0, _c = defKeys[instance.defId]; _b < _c.length; _b++) {\n var key = _c[_b];\n\n if (splitStores[key]) {\n // must have already been created\n splitStores[key].instances[instanceId] = instance;\n }\n }\n }\n\n return splitStores;\n };\n\n Splitter.prototype._splitIndividualUi = function (eventUiBases, defKeys) {\n var splitHashes = {};\n\n for (var defId in eventUiBases) {\n if (defId) {\n // not the '' key\n for (var _i = 0, _a = defKeys[defId]; _i < _a.length; _i++) {\n var key = _a[_i];\n\n if (!splitHashes[key]) {\n splitHashes[key] = {};\n }\n\n splitHashes[key][defId] = eventUiBases[defId];\n }\n }\n }\n\n return splitHashes;\n };\n\n Splitter.prototype._splitInteraction = function (interaction) {\n var splitStates = {};\n\n if (interaction) {\n var affectedStores_1 = this._splitEventStore(interaction.affectedEvents, this._getKeysForEventDefs(interaction.affectedEvents) // can't use cached. might be events from other calendar\n ); // can't rely on defKeys because event data is mutated\n\n\n var mutatedKeysByDefId = this._getKeysForEventDefs(interaction.mutatedEvents);\n\n var mutatedStores_1 = this._splitEventStore(interaction.mutatedEvents, mutatedKeysByDefId);\n\n var populate = function populate(key) {\n if (!splitStates[key]) {\n splitStates[key] = {\n affectedEvents: affectedStores_1[key] || EMPTY_EVENT_STORE,\n mutatedEvents: mutatedStores_1[key] || EMPTY_EVENT_STORE,\n isEvent: interaction.isEvent,\n origSeg: interaction.origSeg\n };\n }\n };\n\n for (var key in affectedStores_1) {\n populate(key);\n }\n\n for (var key in mutatedStores_1) {\n populate(key);\n }\n }\n\n return splitStates;\n };\n\n return Splitter;\n}();\n\nfunction buildEventUiForKey(allUi, eventUiForKey, individualUi) {\n var baseParts = [];\n\n if (allUi) {\n baseParts.push(allUi);\n }\n\n if (eventUiForKey) {\n baseParts.push(eventUiForKey);\n }\n\n var stuff = {\n '': combineEventUis(baseParts)\n };\n\n if (individualUi) {\n _assign(stuff, individualUi);\n }\n\n return stuff;\n} // Generates HTML for an anchor to another view into the calendar.\n// Will either generate an tag or a non-clickable tag, depending on enabled settings.\n// `gotoOptions` can either be a DateMarker, or an object with the form:\n// { date, type, forceOff }\n// `type` is a view-type like \"day\" or \"week\". default value is \"day\".\n// `attrs` and `innerHtml` are use to generate the rest of the HTML tag.\n\n\nfunction buildGotoAnchorHtml(component, gotoOptions, attrs, innerHtml) {\n var dateEnv = component.dateEnv;\n var date;\n var type;\n var forceOff;\n var finalOptions;\n\n if (gotoOptions instanceof Date) {\n date = gotoOptions; // a single date-like input\n } else {\n date = gotoOptions.date;\n type = gotoOptions.type;\n forceOff = gotoOptions.forceOff;\n }\n\n finalOptions = {\n date: dateEnv.formatIso(date, {\n omitTime: true\n }),\n type: type || 'day'\n };\n\n if (typeof attrs === 'string') {\n innerHtml = attrs;\n attrs = null;\n }\n\n attrs = attrs ? ' ' + attrsToStr(attrs) : ''; // will have a leading space\n\n innerHtml = innerHtml || '';\n\n if (!forceOff && component.opt('navLinks')) {\n return '' + innerHtml + '';\n } else {\n return '' + innerHtml + '';\n }\n}\n\nfunction getAllDayHtml(component) {\n return component.opt('allDayHtml') || htmlEscape(component.opt('allDayText'));\n} // Computes HTML classNames for a single-day element\n\n\nfunction getDayClasses(date, dateProfile, context, noThemeHighlight) {\n var calendar = context.calendar,\n view = context.view,\n theme = context.theme,\n dateEnv = context.dateEnv;\n var classes = [];\n var todayStart;\n var todayEnd;\n\n if (!rangeContainsMarker(dateProfile.activeRange, date)) {\n classes.push('fc-disabled-day');\n } else {\n classes.push('fc-' + DAY_IDS[date.getUTCDay()]);\n\n if (view.opt('monthMode') && dateEnv.getMonth(date) !== dateEnv.getMonth(dateProfile.currentRange.start)) {\n classes.push('fc-other-month');\n }\n\n todayStart = startOfDay(calendar.getNow());\n todayEnd = addDays(todayStart, 1);\n\n if (date < todayStart) {\n classes.push('fc-past');\n } else if (date >= todayEnd) {\n classes.push('fc-future');\n } else {\n classes.push('fc-today');\n\n if (noThemeHighlight !== true) {\n classes.push(theme.getClass('today'));\n }\n }\n }\n\n return classes;\n} // given a function that resolves a result asynchronously.\n// the function can either call passed-in success and failure callbacks,\n// or it can return a promise.\n// if you need to pass additional params to func, bind them first.\n\n\nfunction unpromisify(func, success, failure) {\n // guard against success/failure callbacks being called more than once\n // and guard against a promise AND callback being used together.\n var isResolved = false;\n\n var wrappedSuccess = function wrappedSuccess() {\n if (!isResolved) {\n isResolved = true;\n success.apply(this, arguments);\n }\n };\n\n var wrappedFailure = function wrappedFailure() {\n if (!isResolved) {\n isResolved = true;\n\n if (failure) {\n failure.apply(this, arguments);\n }\n }\n };\n\n var res = func(wrappedSuccess, wrappedFailure);\n\n if (res && typeof res.then === 'function') {\n res.then(wrappedSuccess, wrappedFailure);\n }\n}\n\nvar Mixin =\n/** @class */\nfunction () {\n function Mixin() {} // mix into a CLASS\n\n\n Mixin.mixInto = function (destClass) {\n this.mixIntoObj(destClass.prototype);\n }; // mix into ANY object\n\n\n Mixin.mixIntoObj = function (destObj) {\n var _this = this;\n\n Object.getOwnPropertyNames(this.prototype).forEach(function (name) {\n if (!destObj[name]) {\n // if destination doesn't already define it\n destObj[name] = _this.prototype[name];\n }\n });\n };\n /*\n will override existing methods\n TODO: remove! not used anymore\n */\n\n\n Mixin.mixOver = function (destClass) {\n var _this = this;\n\n Object.getOwnPropertyNames(this.prototype).forEach(function (name) {\n destClass.prototype[name] = _this.prototype[name];\n });\n };\n\n return Mixin;\n}();\n/*\nUSAGE:\n import { default as EmitterMixin, EmitterInterface } from './EmitterMixin'\nin class:\n on: EmitterInterface['on']\n one: EmitterInterface['one']\n off: EmitterInterface['off']\n trigger: EmitterInterface['trigger']\n triggerWith: EmitterInterface['triggerWith']\n hasHandlers: EmitterInterface['hasHandlers']\nafter class:\n EmitterMixin.mixInto(TheClass)\n*/\n\n\nvar EmitterMixin =\n/** @class */\nfunction (_super) {\n __extends(EmitterMixin, _super);\n\n function EmitterMixin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n EmitterMixin.prototype.on = function (type, handler) {\n addToHash(this._handlers || (this._handlers = {}), type, handler);\n return this; // for chaining\n }; // todo: add comments\n\n\n EmitterMixin.prototype.one = function (type, handler) {\n addToHash(this._oneHandlers || (this._oneHandlers = {}), type, handler);\n return this; // for chaining\n };\n\n EmitterMixin.prototype.off = function (type, handler) {\n if (this._handlers) {\n removeFromHash(this._handlers, type, handler);\n }\n\n if (this._oneHandlers) {\n removeFromHash(this._oneHandlers, type, handler);\n }\n\n return this; // for chaining\n };\n\n EmitterMixin.prototype.trigger = function (type) {\n var args = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n\n this.triggerWith(type, this, args);\n return this; // for chaining\n };\n\n EmitterMixin.prototype.triggerWith = function (type, context, args) {\n if (this._handlers) {\n applyAll(this._handlers[type], context, args);\n }\n\n if (this._oneHandlers) {\n applyAll(this._oneHandlers[type], context, args);\n delete this._oneHandlers[type]; // will never fire again\n }\n\n return this; // for chaining\n };\n\n EmitterMixin.prototype.hasHandlers = function (type) {\n return this._handlers && this._handlers[type] && this._handlers[type].length || this._oneHandlers && this._oneHandlers[type] && this._oneHandlers[type].length;\n };\n\n return EmitterMixin;\n}(Mixin);\n\nfunction addToHash(hash, type, handler) {\n (hash[type] || (hash[type] = [])).push(handler);\n}\n\nfunction removeFromHash(hash, type, handler) {\n if (handler) {\n if (hash[type]) {\n hash[type] = hash[type].filter(function (func) {\n return func !== handler;\n });\n }\n } else {\n delete hash[type]; // remove all handler funcs for this type\n }\n}\n/*\nRecords offset information for a set of elements, relative to an origin element.\nCan record the left/right OR the top/bottom OR both.\nProvides methods for querying the cache by position.\n*/\n\n\nvar PositionCache =\n/** @class */\nfunction () {\n function PositionCache(originEl, els, isHorizontal, isVertical) {\n this.originEl = originEl;\n this.els = els;\n this.isHorizontal = isHorizontal;\n this.isVertical = isVertical;\n } // Queries the els for coordinates and stores them.\n // Call this method before using and of the get* methods below.\n\n\n PositionCache.prototype.build = function () {\n var originEl = this.originEl;\n var originClientRect = this.originClientRect = originEl.getBoundingClientRect(); // relative to viewport top-left\n\n if (this.isHorizontal) {\n this.buildElHorizontals(originClientRect.left);\n }\n\n if (this.isVertical) {\n this.buildElVerticals(originClientRect.top);\n }\n }; // Populates the left/right internal coordinate arrays\n\n\n PositionCache.prototype.buildElHorizontals = function (originClientLeft) {\n var lefts = [];\n var rights = [];\n\n for (var _i = 0, _a = this.els; _i < _a.length; _i++) {\n var el = _a[_i];\n var rect = el.getBoundingClientRect();\n lefts.push(rect.left - originClientLeft);\n rights.push(rect.right - originClientLeft);\n }\n\n this.lefts = lefts;\n this.rights = rights;\n }; // Populates the top/bottom internal coordinate arrays\n\n\n PositionCache.prototype.buildElVerticals = function (originClientTop) {\n var tops = [];\n var bottoms = [];\n\n for (var _i = 0, _a = this.els; _i < _a.length; _i++) {\n var el = _a[_i];\n var rect = el.getBoundingClientRect();\n tops.push(rect.top - originClientTop);\n bottoms.push(rect.bottom - originClientTop);\n }\n\n this.tops = tops;\n this.bottoms = bottoms;\n }; // Given a left offset (from document left), returns the index of the el that it horizontally intersects.\n // If no intersection is made, returns undefined.\n\n\n PositionCache.prototype.leftToIndex = function (leftPosition) {\n var lefts = this.lefts;\n var rights = this.rights;\n var len = lefts.length;\n var i;\n\n for (i = 0; i < len; i++) {\n if (leftPosition >= lefts[i] && leftPosition < rights[i]) {\n return i;\n }\n }\n }; // Given a top offset (from document top), returns the index of the el that it vertically intersects.\n // If no intersection is made, returns undefined.\n\n\n PositionCache.prototype.topToIndex = function (topPosition) {\n var tops = this.tops;\n var bottoms = this.bottoms;\n var len = tops.length;\n var i;\n\n for (i = 0; i < len; i++) {\n if (topPosition >= tops[i] && topPosition < bottoms[i]) {\n return i;\n }\n }\n }; // Gets the width of the element at the given index\n\n\n PositionCache.prototype.getWidth = function (leftIndex) {\n return this.rights[leftIndex] - this.lefts[leftIndex];\n }; // Gets the height of the element at the given index\n\n\n PositionCache.prototype.getHeight = function (topIndex) {\n return this.bottoms[topIndex] - this.tops[topIndex];\n };\n\n return PositionCache;\n}();\n/*\nAn object for getting/setting scroll-related information for an element.\nInternally, this is done very differently for window versus DOM element,\nso this object serves as a common interface.\n*/\n\n\nvar ScrollController =\n/** @class */\nfunction () {\n function ScrollController() {}\n\n ScrollController.prototype.getMaxScrollTop = function () {\n return this.getScrollHeight() - this.getClientHeight();\n };\n\n ScrollController.prototype.getMaxScrollLeft = function () {\n return this.getScrollWidth() - this.getClientWidth();\n };\n\n ScrollController.prototype.canScrollVertically = function () {\n return this.getMaxScrollTop() > 0;\n };\n\n ScrollController.prototype.canScrollHorizontally = function () {\n return this.getMaxScrollLeft() > 0;\n };\n\n ScrollController.prototype.canScrollUp = function () {\n return this.getScrollTop() > 0;\n };\n\n ScrollController.prototype.canScrollDown = function () {\n return this.getScrollTop() < this.getMaxScrollTop();\n };\n\n ScrollController.prototype.canScrollLeft = function () {\n return this.getScrollLeft() > 0;\n };\n\n ScrollController.prototype.canScrollRight = function () {\n return this.getScrollLeft() < this.getMaxScrollLeft();\n };\n\n return ScrollController;\n}();\n\nvar ElementScrollController =\n/** @class */\nfunction (_super) {\n __extends(ElementScrollController, _super);\n\n function ElementScrollController(el) {\n var _this = _super.call(this) || this;\n\n _this.el = el;\n return _this;\n }\n\n ElementScrollController.prototype.getScrollTop = function () {\n return this.el.scrollTop;\n };\n\n ElementScrollController.prototype.getScrollLeft = function () {\n return this.el.scrollLeft;\n };\n\n ElementScrollController.prototype.setScrollTop = function (top) {\n this.el.scrollTop = top;\n };\n\n ElementScrollController.prototype.setScrollLeft = function (left) {\n this.el.scrollLeft = left;\n };\n\n ElementScrollController.prototype.getScrollWidth = function () {\n return this.el.scrollWidth;\n };\n\n ElementScrollController.prototype.getScrollHeight = function () {\n return this.el.scrollHeight;\n };\n\n ElementScrollController.prototype.getClientHeight = function () {\n return this.el.clientHeight;\n };\n\n ElementScrollController.prototype.getClientWidth = function () {\n return this.el.clientWidth;\n };\n\n return ElementScrollController;\n}(ScrollController);\n\nvar WindowScrollController =\n/** @class */\nfunction (_super) {\n __extends(WindowScrollController, _super);\n\n function WindowScrollController() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n WindowScrollController.prototype.getScrollTop = function () {\n return window.pageYOffset;\n };\n\n WindowScrollController.prototype.getScrollLeft = function () {\n return window.pageXOffset;\n };\n\n WindowScrollController.prototype.setScrollTop = function (n) {\n window.scroll(window.pageXOffset, n);\n };\n\n WindowScrollController.prototype.setScrollLeft = function (n) {\n window.scroll(n, window.pageYOffset);\n };\n\n WindowScrollController.prototype.getScrollWidth = function () {\n return document.documentElement.scrollWidth;\n };\n\n WindowScrollController.prototype.getScrollHeight = function () {\n return document.documentElement.scrollHeight;\n };\n\n WindowScrollController.prototype.getClientHeight = function () {\n return document.documentElement.clientHeight;\n };\n\n WindowScrollController.prototype.getClientWidth = function () {\n return document.documentElement.clientWidth;\n };\n\n return WindowScrollController;\n}(ScrollController);\n/*\nEmbodies a div that has potential scrollbars\n*/\n\n\nvar ScrollComponent =\n/** @class */\nfunction (_super) {\n __extends(ScrollComponent, _super);\n\n function ScrollComponent(overflowX, overflowY) {\n var _this = _super.call(this, createElement('div', {\n className: 'fc-scroller'\n })) || this;\n\n _this.overflowX = overflowX;\n _this.overflowY = overflowY;\n\n _this.applyOverflow();\n\n return _this;\n } // sets to natural height, unlocks overflow\n\n\n ScrollComponent.prototype.clear = function () {\n this.setHeight('auto');\n this.applyOverflow();\n };\n\n ScrollComponent.prototype.destroy = function () {\n removeElement(this.el);\n }; // Overflow\n // -----------------------------------------------------------------------------------------------------------------\n\n\n ScrollComponent.prototype.applyOverflow = function () {\n applyStyle(this.el, {\n overflowX: this.overflowX,\n overflowY: this.overflowY\n });\n }; // Causes any 'auto' overflow values to resolves to 'scroll' or 'hidden'.\n // Useful for preserving scrollbar widths regardless of future resizes.\n // Can pass in scrollbarWidths for optimization.\n\n\n ScrollComponent.prototype.lockOverflow = function (scrollbarWidths) {\n var overflowX = this.overflowX;\n var overflowY = this.overflowY;\n scrollbarWidths = scrollbarWidths || this.getScrollbarWidths();\n\n if (overflowX === 'auto') {\n overflowX = scrollbarWidths.bottom || // horizontal scrollbars?\n this.canScrollHorizontally() // OR scrolling pane with massless scrollbars?\n ? 'scroll' : 'hidden';\n }\n\n if (overflowY === 'auto') {\n overflowY = scrollbarWidths.left || scrollbarWidths.right || // horizontal scrollbars?\n this.canScrollVertically() // OR scrolling pane with massless scrollbars?\n ? 'scroll' : 'hidden';\n }\n\n applyStyle(this.el, {\n overflowX: overflowX,\n overflowY: overflowY\n });\n };\n\n ScrollComponent.prototype.setHeight = function (height) {\n applyStyleProp(this.el, 'height', height);\n };\n\n ScrollComponent.prototype.getScrollbarWidths = function () {\n var edges = computeEdges(this.el);\n return {\n left: edges.scrollbarLeft,\n right: edges.scrollbarRight,\n bottom: edges.scrollbarBottom\n };\n };\n\n return ScrollComponent;\n}(ElementScrollController);\n\nvar Theme =\n/** @class */\nfunction () {\n function Theme(calendarOptions) {\n this.calendarOptions = calendarOptions;\n this.processIconOverride();\n }\n\n Theme.prototype.processIconOverride = function () {\n if (this.iconOverrideOption) {\n this.setIconOverride(this.calendarOptions[this.iconOverrideOption]);\n }\n };\n\n Theme.prototype.setIconOverride = function (iconOverrideHash) {\n var iconClassesCopy;\n var buttonName;\n\n if (_typeof(iconOverrideHash) === 'object' && iconOverrideHash) {\n // non-null object\n iconClassesCopy = _assign({}, this.iconClasses);\n\n for (buttonName in iconOverrideHash) {\n iconClassesCopy[buttonName] = this.applyIconOverridePrefix(iconOverrideHash[buttonName]);\n }\n\n this.iconClasses = iconClassesCopy;\n } else if (iconOverrideHash === false) {\n this.iconClasses = {};\n }\n };\n\n Theme.prototype.applyIconOverridePrefix = function (className) {\n var prefix = this.iconOverridePrefix;\n\n if (prefix && className.indexOf(prefix) !== 0) {\n // if not already present\n className = prefix + className;\n }\n\n return className;\n };\n\n Theme.prototype.getClass = function (key) {\n return this.classes[key] || '';\n };\n\n Theme.prototype.getIconClass = function (buttonName) {\n var className = this.iconClasses[buttonName];\n\n if (className) {\n return this.baseIconClass + ' ' + className;\n }\n\n return '';\n };\n\n Theme.prototype.getCustomButtonIconClass = function (customButtonProps) {\n var className;\n\n if (this.iconOverrideCustomButtonOption) {\n className = customButtonProps[this.iconOverrideCustomButtonOption];\n\n if (className) {\n return this.baseIconClass + ' ' + this.applyIconOverridePrefix(className);\n }\n }\n\n return '';\n };\n\n return Theme;\n}();\n\nTheme.prototype.classes = {};\nTheme.prototype.iconClasses = {};\nTheme.prototype.baseIconClass = '';\nTheme.prototype.iconOverridePrefix = '';\nvar guid = 0;\n\nvar Component =\n/** @class */\nfunction () {\n function Component(context, isView) {\n // HACK to populate view at top of component instantiation call chain\n if (isView) {\n context.view = this;\n }\n\n this.uid = String(guid++);\n this.context = context;\n this.dateEnv = context.dateEnv;\n this.theme = context.theme;\n this.view = context.view;\n this.calendar = context.calendar;\n this.isRtl = this.opt('dir') === 'rtl';\n }\n\n Component.addEqualityFuncs = function (newFuncs) {\n this.prototype.equalityFuncs = _assign({}, this.prototype.equalityFuncs, newFuncs);\n };\n\n Component.prototype.opt = function (name) {\n return this.context.options[name];\n };\n\n Component.prototype.receiveProps = function (props) {\n var _a = recycleProps(this.props || {}, props, this.equalityFuncs),\n anyChanges = _a.anyChanges,\n comboProps = _a.comboProps;\n\n this.props = comboProps;\n\n if (anyChanges) {\n this.render(comboProps);\n }\n };\n\n Component.prototype.render = function (props) {}; // after destroy is called, this component won't ever be used again\n\n\n Component.prototype.destroy = function () {};\n\n return Component;\n}();\n\nComponent.prototype.equalityFuncs = {};\n/*\nReuses old values when equal. If anything is unequal, returns newProps as-is.\nGreat for PureComponent, but won't be feasible with React, so just eliminate and use React's DOM diffing.\n*/\n\nfunction recycleProps(oldProps, newProps, equalityFuncs) {\n var comboProps = {}; // some old, some new\n\n var anyChanges = false;\n\n for (var key in newProps) {\n if (key in oldProps && (oldProps[key] === newProps[key] || equalityFuncs[key] && equalityFuncs[key](oldProps[key], newProps[key]))) {\n // equal to old? use old prop\n comboProps[key] = oldProps[key];\n } else {\n comboProps[key] = newProps[key];\n anyChanges = true;\n }\n }\n\n for (var key in oldProps) {\n if (!(key in newProps)) {\n anyChanges = true;\n break;\n }\n }\n\n return {\n anyChanges: anyChanges,\n comboProps: comboProps\n };\n}\n/*\nPURPOSES:\n- hook up to fg, fill, and mirror renderers\n- interface for dragging and hits\n*/\n\n\nvar DateComponent =\n/** @class */\nfunction (_super) {\n __extends(DateComponent, _super);\n\n function DateComponent(context, el, isView) {\n var _this = _super.call(this, context, isView) || this;\n\n _this.el = el;\n return _this;\n }\n\n DateComponent.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n\n removeElement(this.el);\n }; // TODO: WHAT ABOUT (sourceSeg && sourceSeg.component.doesDragMirror)\n //\n // Event Drag-n-Drop Rendering (for both events and external elements)\n // ---------------------------------------------------------------------------------------------------------------\n\n /*\n renderEventDragSegs(state: EventSegUiInteractionState) {\n if (state) {\n let { isEvent, segs, sourceSeg } = state\n if (this.eventRenderer) {\n this.eventRenderer.hideByHash(state.affectedInstances)\n }\n // if the user is dragging something that is considered an event with real event data,\n // and this component likes to do drag mirrors OR the component where the seg came from\n // likes to do drag mirrors, then render a drag mirror.\n if (isEvent && (this.doesDragMirror || sourceSeg && sourceSeg.component.doesDragMirror)) {\n if (this.mirrorRenderer) {\n this.mirrorRenderer.renderSegs(segs, { isDragging: true, sourceSeg })\n }\n }\n // if it would be impossible to render a drag mirror OR this component likes to render\n // highlights, then render a highlight.\n if (!isEvent || this.doesDragHighlight) {\n if (this.fillRenderer) {\n this.fillRenderer.renderSegs('highlight', segs)\n }\n }\n }\n }\n */\n // Hit System\n // -----------------------------------------------------------------------------------------------------------------\n\n\n DateComponent.prototype.buildPositionCaches = function () {};\n\n DateComponent.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) {\n return null; // this should be abstract\n }; // Validation\n // -----------------------------------------------------------------------------------------------------------------\n\n\n DateComponent.prototype.isInteractionValid = function (interaction) {\n var calendar = this.calendar;\n var dateProfile = this.props.dateProfile; // HACK\n\n var instances = interaction.mutatedEvents.instances;\n\n if (dateProfile) {\n // HACK for DayTile\n for (var instanceId in instances) {\n if (!rangeContainsRange(dateProfile.validRange, instances[instanceId].range)) {\n return false;\n }\n }\n }\n\n return isInteractionValid(interaction, calendar);\n };\n\n DateComponent.prototype.isDateSelectionValid = function (selection) {\n var dateProfile = this.props.dateProfile; // HACK\n\n if (dateProfile && // HACK for DayTile\n !rangeContainsRange(dateProfile.validRange, selection.range)) {\n return false;\n }\n\n return isDateSelectionValid(selection, this.calendar);\n }; // Triggering\n // -----------------------------------------------------------------------------------------------------------------\n // TODO: move to Calendar\n\n\n DateComponent.prototype.publiclyTrigger = function (name, args) {\n var calendar = this.calendar;\n return calendar.publiclyTrigger(name, args);\n };\n\n DateComponent.prototype.publiclyTriggerAfterSizing = function (name, args) {\n var calendar = this.calendar;\n return calendar.publiclyTriggerAfterSizing(name, args);\n };\n\n DateComponent.prototype.hasPublicHandlers = function (name) {\n var calendar = this.calendar;\n return calendar.hasPublicHandlers(name);\n };\n\n DateComponent.prototype.triggerRenderedSegs = function (segs, isMirrors) {\n var calendar = this.calendar;\n\n if (this.hasPublicHandlers('eventPositioned')) {\n for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {\n var seg = segs_1[_i];\n this.publiclyTriggerAfterSizing('eventPositioned', [{\n event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),\n isMirror: isMirrors,\n isStart: seg.isStart,\n isEnd: seg.isEnd,\n el: seg.el,\n view: this // safe to cast because this method is only called on context.view\n\n }]);\n }\n }\n\n if (!calendar.state.loadingLevel) {\n // avoid initial empty state while pending\n calendar.afterSizingTriggers._eventsPositioned = [null]; // fire once\n }\n };\n\n DateComponent.prototype.triggerWillRemoveSegs = function (segs, isMirrors) {\n var calendar = this.calendar;\n\n for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {\n var seg = segs_2[_i];\n calendar.trigger('eventElRemove', seg.el);\n }\n\n if (this.hasPublicHandlers('eventDestroy')) {\n for (var _a = 0, segs_3 = segs; _a < segs_3.length; _a++) {\n var seg = segs_3[_a];\n this.publiclyTrigger('eventDestroy', [{\n event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),\n isMirror: isMirrors,\n el: seg.el,\n view: this // safe to cast because this method is only called on context.view\n\n }]);\n }\n }\n }; // Pointer Interaction Utils\n // -----------------------------------------------------------------------------------------------------------------\n\n\n DateComponent.prototype.isValidSegDownEl = function (el) {\n return !this.props.eventDrag && // HACK\n !this.props.eventResize && // HACK\n !elementClosest(el, '.fc-mirror') && (this.isPopover() || !this.isInPopover(el)); // ^above line ensures we don't detect a seg interaction within a nested component.\n // it's a HACK because it only supports a popover as the nested component.\n };\n\n DateComponent.prototype.isValidDateDownEl = function (el) {\n var segEl = elementClosest(el, this.fgSegSelector);\n return (!segEl || segEl.classList.contains('fc-mirror')) && !elementClosest(el, '.fc-more') && // a \"more..\" link\n !elementClosest(el, 'a[data-goto]') && // a clickable nav link\n !this.isInPopover(el);\n };\n\n DateComponent.prototype.isPopover = function () {\n return this.el.classList.contains('fc-popover');\n };\n\n DateComponent.prototype.isInPopover = function (el) {\n return Boolean(elementClosest(el, '.fc-popover'));\n };\n\n return DateComponent;\n}(Component);\n\nDateComponent.prototype.fgSegSelector = '.fc-event-container > *';\nDateComponent.prototype.bgSegSelector = '.fc-bgevent:not(.fc-nonbusiness)';\nvar uid$1 = 0;\n\nfunction createPlugin(input) {\n return {\n id: String(uid$1++),\n deps: input.deps || [],\n reducers: input.reducers || [],\n eventDefParsers: input.eventDefParsers || [],\n isDraggableTransformers: input.isDraggableTransformers || [],\n eventDragMutationMassagers: input.eventDragMutationMassagers || [],\n eventDefMutationAppliers: input.eventDefMutationAppliers || [],\n dateSelectionTransformers: input.dateSelectionTransformers || [],\n datePointTransforms: input.datePointTransforms || [],\n dateSpanTransforms: input.dateSpanTransforms || [],\n views: input.views || {},\n viewPropsTransformers: input.viewPropsTransformers || [],\n isPropsValid: input.isPropsValid || null,\n externalDefTransforms: input.externalDefTransforms || [],\n eventResizeJoinTransforms: input.eventResizeJoinTransforms || [],\n viewContainerModifiers: input.viewContainerModifiers || [],\n eventDropTransformers: input.eventDropTransformers || [],\n componentInteractions: input.componentInteractions || [],\n calendarInteractions: input.calendarInteractions || [],\n themeClasses: input.themeClasses || {},\n eventSourceDefs: input.eventSourceDefs || [],\n cmdFormatter: input.cmdFormatter,\n recurringTypes: input.recurringTypes || [],\n namedTimeZonedImpl: input.namedTimeZonedImpl,\n defaultView: input.defaultView || '',\n elementDraggingImpl: input.elementDraggingImpl,\n optionChangeHandlers: input.optionChangeHandlers || {}\n };\n}\n\nvar PluginSystem =\n/** @class */\nfunction () {\n function PluginSystem() {\n this.hooks = {\n reducers: [],\n eventDefParsers: [],\n isDraggableTransformers: [],\n eventDragMutationMassagers: [],\n eventDefMutationAppliers: [],\n dateSelectionTransformers: [],\n datePointTransforms: [],\n dateSpanTransforms: [],\n views: {},\n viewPropsTransformers: [],\n isPropsValid: null,\n externalDefTransforms: [],\n eventResizeJoinTransforms: [],\n viewContainerModifiers: [],\n eventDropTransformers: [],\n componentInteractions: [],\n calendarInteractions: [],\n themeClasses: {},\n eventSourceDefs: [],\n cmdFormatter: null,\n recurringTypes: [],\n namedTimeZonedImpl: null,\n defaultView: '',\n elementDraggingImpl: null,\n optionChangeHandlers: {}\n };\n this.addedHash = {};\n }\n\n PluginSystem.prototype.add = function (plugin) {\n if (!this.addedHash[plugin.id]) {\n this.addedHash[plugin.id] = true;\n\n for (var _i = 0, _a = plugin.deps; _i < _a.length; _i++) {\n var dep = _a[_i];\n this.add(dep);\n }\n\n this.hooks = combineHooks(this.hooks, plugin);\n }\n };\n\n return PluginSystem;\n}();\n\nfunction combineHooks(hooks0, hooks1) {\n return {\n reducers: hooks0.reducers.concat(hooks1.reducers),\n eventDefParsers: hooks0.eventDefParsers.concat(hooks1.eventDefParsers),\n isDraggableTransformers: hooks0.isDraggableTransformers.concat(hooks1.isDraggableTransformers),\n eventDragMutationMassagers: hooks0.eventDragMutationMassagers.concat(hooks1.eventDragMutationMassagers),\n eventDefMutationAppliers: hooks0.eventDefMutationAppliers.concat(hooks1.eventDefMutationAppliers),\n dateSelectionTransformers: hooks0.dateSelectionTransformers.concat(hooks1.dateSelectionTransformers),\n datePointTransforms: hooks0.datePointTransforms.concat(hooks1.datePointTransforms),\n dateSpanTransforms: hooks0.dateSpanTransforms.concat(hooks1.dateSpanTransforms),\n views: _assign({}, hooks0.views, hooks1.views),\n viewPropsTransformers: hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers),\n isPropsValid: hooks1.isPropsValid || hooks0.isPropsValid,\n externalDefTransforms: hooks0.externalDefTransforms.concat(hooks1.externalDefTransforms),\n eventResizeJoinTransforms: hooks0.eventResizeJoinTransforms.concat(hooks1.eventResizeJoinTransforms),\n viewContainerModifiers: hooks0.viewContainerModifiers.concat(hooks1.viewContainerModifiers),\n eventDropTransformers: hooks0.eventDropTransformers.concat(hooks1.eventDropTransformers),\n calendarInteractions: hooks0.calendarInteractions.concat(hooks1.calendarInteractions),\n componentInteractions: hooks0.componentInteractions.concat(hooks1.componentInteractions),\n themeClasses: _assign({}, hooks0.themeClasses, hooks1.themeClasses),\n eventSourceDefs: hooks0.eventSourceDefs.concat(hooks1.eventSourceDefs),\n cmdFormatter: hooks1.cmdFormatter || hooks0.cmdFormatter,\n recurringTypes: hooks0.recurringTypes.concat(hooks1.recurringTypes),\n namedTimeZonedImpl: hooks1.namedTimeZonedImpl || hooks0.namedTimeZonedImpl,\n defaultView: hooks0.defaultView || hooks1.defaultView,\n elementDraggingImpl: hooks0.elementDraggingImpl || hooks1.elementDraggingImpl,\n optionChangeHandlers: _assign({}, hooks0.optionChangeHandlers, hooks1.optionChangeHandlers)\n };\n}\n\nvar eventSourceDef = {\n ignoreRange: true,\n parseMeta: function parseMeta(raw) {\n if (Array.isArray(raw)) {\n // short form\n return raw;\n } else if (Array.isArray(raw.events)) {\n return raw.events;\n }\n\n return null;\n },\n fetch: function fetch(arg, success) {\n success({\n rawEvents: arg.eventSource.meta\n });\n }\n};\nvar ArrayEventSourcePlugin = createPlugin({\n eventSourceDefs: [eventSourceDef]\n});\nvar eventSourceDef$1 = {\n parseMeta: function parseMeta(raw) {\n if (typeof raw === 'function') {\n // short form\n return raw;\n } else if (typeof raw.events === 'function') {\n return raw.events;\n }\n\n return null;\n },\n fetch: function fetch(arg, success, failure) {\n var dateEnv = arg.calendar.dateEnv;\n var func = arg.eventSource.meta;\n unpromisify(func.bind(null, {\n start: dateEnv.toDate(arg.range.start),\n end: dateEnv.toDate(arg.range.end),\n startStr: dateEnv.formatIso(arg.range.start),\n endStr: dateEnv.formatIso(arg.range.end),\n timeZone: dateEnv.timeZone\n }), function (rawEvents) {\n success({\n rawEvents: rawEvents\n }); // needs an object response\n }, failure // send errorObj directly to failure callback\n );\n }\n};\nvar FuncEventSourcePlugin = createPlugin({\n eventSourceDefs: [eventSourceDef$1]\n});\n\nfunction requestJson(method, url, params, successCallback, failureCallback) {\n method = method.toUpperCase();\n var body = null;\n\n if (method === 'GET') {\n url = injectQueryStringParams(url, params);\n } else {\n body = encodeParams(params);\n }\n\n var xhr = new XMLHttpRequest();\n xhr.open(method, url, true);\n\n if (method !== 'GET') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n }\n\n xhr.onload = function () {\n if (xhr.status >= 200 && xhr.status < 400) {\n try {\n var res = JSON.parse(xhr.responseText);\n successCallback(res, xhr);\n } catch (err) {\n failureCallback('Failure parsing JSON', xhr);\n }\n } else {\n failureCallback('Request failed', xhr);\n }\n };\n\n xhr.onerror = function () {\n failureCallback('Request failed', xhr);\n };\n\n xhr.send(body);\n}\n\nfunction injectQueryStringParams(url, params) {\n return url + (url.indexOf('?') === -1 ? '?' : '&') + encodeParams(params);\n}\n\nfunction encodeParams(params) {\n var parts = [];\n\n for (var key in params) {\n parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(params[key]));\n }\n\n return parts.join('&');\n}\n\nvar eventSourceDef$2 = {\n parseMeta: function parseMeta(raw) {\n if (typeof raw === 'string') {\n // short form\n raw = {\n url: raw\n };\n } else if (!raw || _typeof(raw) !== 'object' || !raw.url) {\n return null;\n }\n\n return {\n url: raw.url,\n method: (raw.method || 'GET').toUpperCase(),\n extraParams: raw.extraParams,\n startParam: raw.startParam,\n endParam: raw.endParam,\n timeZoneParam: raw.timeZoneParam\n };\n },\n fetch: function fetch(arg, success, failure) {\n var meta = arg.eventSource.meta;\n var requestParams = buildRequestParams(meta, arg.range, arg.calendar);\n requestJson(meta.method, meta.url, requestParams, function (rawEvents, xhr) {\n success({\n rawEvents: rawEvents,\n xhr: xhr\n });\n }, function (errorMessage, xhr) {\n failure({\n message: errorMessage,\n xhr: xhr\n });\n });\n }\n};\nvar JsonFeedEventSourcePlugin = createPlugin({\n eventSourceDefs: [eventSourceDef$2]\n});\n\nfunction buildRequestParams(meta, range, calendar) {\n var dateEnv = calendar.dateEnv;\n var startParam;\n var endParam;\n var timeZoneParam;\n var customRequestParams;\n var params = {};\n startParam = meta.startParam;\n\n if (startParam == null) {\n startParam = calendar.opt('startParam');\n }\n\n endParam = meta.endParam;\n\n if (endParam == null) {\n endParam = calendar.opt('endParam');\n }\n\n timeZoneParam = meta.timeZoneParam;\n\n if (timeZoneParam == null) {\n timeZoneParam = calendar.opt('timeZoneParam');\n } // retrieve any outbound GET/POST data from the options\n\n\n if (typeof meta.extraParams === 'function') {\n // supplied as a function that returns a key/value object\n customRequestParams = meta.extraParams();\n } else {\n // probably supplied as a straight key/value object\n customRequestParams = meta.extraParams || {};\n }\n\n _assign(params, customRequestParams);\n\n params[startParam] = dateEnv.formatIso(range.start);\n params[endParam] = dateEnv.formatIso(range.end);\n\n if (dateEnv.timeZone !== 'local') {\n params[timeZoneParam] = dateEnv.timeZone;\n }\n\n return params;\n}\n\nvar recurring = {\n parse: function parse(rawEvent, leftoverProps, dateEnv) {\n var createMarker = dateEnv.createMarker.bind(dateEnv);\n var processors = {\n daysOfWeek: null,\n startTime: createDuration,\n endTime: createDuration,\n startRecur: createMarker,\n endRecur: createMarker\n };\n var props = refineProps(rawEvent, processors, {}, leftoverProps);\n var anyValid = false;\n\n for (var propName in props) {\n if (props[propName] != null) {\n anyValid = true;\n break;\n }\n }\n\n if (anyValid) {\n var duration = null;\n\n if ('duration' in leftoverProps) {\n duration = createDuration(leftoverProps.duration);\n delete leftoverProps.duration;\n }\n\n if (!duration && props.startTime && props.endTime) {\n duration = subtractDurations(props.endTime, props.startTime);\n }\n\n return {\n allDayGuess: Boolean(!props.startTime && !props.endTime),\n duration: duration,\n typeData: props // doesn't need endTime anymore but oh well\n\n };\n }\n\n return null;\n },\n expand: function expand(typeData, framingRange, dateEnv) {\n var clippedFramingRange = intersectRanges(framingRange, {\n start: typeData.startRecur,\n end: typeData.endRecur\n });\n\n if (clippedFramingRange) {\n return expandRanges(typeData.daysOfWeek, typeData.startTime, clippedFramingRange, dateEnv);\n } else {\n return [];\n }\n }\n};\nvar SimpleRecurrencePlugin = createPlugin({\n recurringTypes: [recurring]\n});\n\nfunction expandRanges(daysOfWeek, startTime, framingRange, dateEnv) {\n var dowHash = daysOfWeek ? arrayToHash(daysOfWeek) : null;\n var dayMarker = startOfDay(framingRange.start);\n var endMarker = framingRange.end;\n var instanceStarts = [];\n\n while (dayMarker < endMarker) {\n var instanceStart // if everyday, or this particular day-of-week\n = void 0; // if everyday, or this particular day-of-week\n\n if (!dowHash || dowHash[dayMarker.getUTCDay()]) {\n if (startTime) {\n instanceStart = dateEnv.add(dayMarker, startTime);\n } else {\n instanceStart = dayMarker;\n }\n\n instanceStarts.push(instanceStart);\n }\n\n dayMarker = addDays(dayMarker, 1);\n }\n\n return instanceStarts;\n}\n\nvar DefaultOptionChangeHandlers = createPlugin({\n optionChangeHandlers: {\n events: function events(_events, calendar, deepEqual) {\n handleEventSources([_events], calendar, deepEqual);\n },\n eventSources: handleEventSources,\n plugins: handlePlugins\n }\n});\n\nfunction handleEventSources(inputs, calendar, deepEqual) {\n var unfoundSources = hashValuesToArray(calendar.state.eventSources);\n var newInputs = [];\n\n for (var _i = 0, inputs_1 = inputs; _i < inputs_1.length; _i++) {\n var input = inputs_1[_i];\n var inputFound = false;\n\n for (var i = 0; i < unfoundSources.length; i++) {\n if (deepEqual(unfoundSources[i]._raw, input)) {\n unfoundSources.splice(i, 1); // delete\n\n inputFound = true;\n break;\n }\n }\n\n if (!inputFound) {\n newInputs.push(input);\n }\n }\n\n for (var _a = 0, unfoundSources_1 = unfoundSources; _a < unfoundSources_1.length; _a++) {\n var unfoundSource = unfoundSources_1[_a];\n calendar.dispatch({\n type: 'REMOVE_EVENT_SOURCE',\n sourceId: unfoundSource.sourceId\n });\n }\n\n for (var _b = 0, newInputs_1 = newInputs; _b < newInputs_1.length; _b++) {\n var newInput = newInputs_1[_b];\n calendar.addEventSource(newInput);\n }\n} // shortcoming: won't remove plugins\n\n\nfunction handlePlugins(inputs, calendar) {\n calendar.addPluginInputs(inputs); // will gracefully handle duplicates\n}\n\nvar config = {}; // TODO: make these options\n\nvar globalDefaults = {\n defaultRangeSeparator: ' - ',\n titleRangeSeparator: \" \\u2013 \",\n defaultTimedEventDuration: '01:00:00',\n defaultAllDayEventDuration: {\n day: 1\n },\n forceEventDuration: false,\n nextDayThreshold: '00:00:00',\n // display\n columnHeader: true,\n defaultView: '',\n aspectRatio: 1.35,\n header: {\n left: 'title',\n center: '',\n right: 'today prev,next'\n },\n weekends: true,\n weekNumbers: false,\n weekNumberCalculation: 'local',\n editable: false,\n // nowIndicator: false,\n scrollTime: '06:00:00',\n minTime: '00:00:00',\n maxTime: '24:00:00',\n showNonCurrentDates: true,\n // event ajax\n lazyFetching: true,\n startParam: 'start',\n endParam: 'end',\n timeZoneParam: 'timeZone',\n timeZone: 'local',\n // allDayDefault: undefined,\n // locale\n locales: [],\n locale: '',\n // dir: will get this from the default locale\n // buttonIcons: null,\n // allows setting a min-height to the event segment to prevent short events overlapping each other\n timeGridEventMinHeight: 0,\n themeSystem: 'standard',\n // eventResizableFromStart: false,\n dragRevertDuration: 500,\n dragScroll: true,\n allDayMaintainDuration: false,\n // selectable: false,\n unselectAuto: true,\n // selectMinDistance: 0,\n dropAccept: '*',\n eventOrder: 'start,-duration,allDay,title',\n // ^ if start tie, longer events go before shorter. final tie-breaker is title text\n // rerenderDelay: null,\n eventLimit: false,\n eventLimitClick: 'popover',\n dayPopoverFormat: {\n month: 'long',\n day: 'numeric',\n year: 'numeric'\n },\n handleWindowResize: true,\n windowResizeDelay: 100,\n longPressDelay: 1000,\n eventDragMinDistance: 5 // only applies to mouse\n\n};\nvar rtlDefaults = {\n header: {\n left: 'next,prev today',\n center: '',\n right: 'title'\n },\n buttonIcons: {\n // TODO: make RTL support the responibility of the theme\n prev: 'fc-icon-chevron-right',\n next: 'fc-icon-chevron-left',\n prevYear: 'fc-icon-chevrons-right',\n nextYear: 'fc-icon-chevrons-left'\n }\n};\nvar complexOptions = ['header', 'footer', 'buttonText', 'buttonIcons']; // Merges an array of option objects into a single object\n\nfunction mergeOptions(optionObjs) {\n return mergeProps(optionObjs, complexOptions);\n} // TODO: move this stuff to a \"plugin\"-related file...\n\n\nvar INTERNAL_PLUGINS = [ArrayEventSourcePlugin, FuncEventSourcePlugin, JsonFeedEventSourcePlugin, SimpleRecurrencePlugin, DefaultOptionChangeHandlers];\n\nfunction refinePluginDefs(pluginInputs) {\n var plugins = [];\n\n for (var _i = 0, pluginInputs_1 = pluginInputs; _i < pluginInputs_1.length; _i++) {\n var pluginInput = pluginInputs_1[_i];\n\n if (typeof pluginInput === 'string') {\n var globalName = 'FullCalendar' + capitaliseFirstLetter(pluginInput);\n\n if (!window[globalName]) {\n console.warn('Plugin file not loaded for ' + pluginInput);\n } else {\n plugins.push(window[globalName][\"default\"]); // is an ES6 module\n }\n } else {\n plugins.push(pluginInput);\n }\n }\n\n return INTERNAL_PLUGINS.concat(plugins);\n}\n\nvar RAW_EN_LOCALE = {\n code: 'en',\n week: {\n dow: 0,\n doy: 4 // 4 days need to be within the year to be considered the first week\n\n },\n dir: 'ltr',\n buttonText: {\n prev: 'prev',\n next: 'next',\n prevYear: 'prev year',\n nextYear: 'next year',\n year: 'year',\n today: 'today',\n month: 'month',\n week: 'week',\n day: 'day',\n list: 'list'\n },\n weekLabel: 'W',\n allDayText: 'all-day',\n eventLimitText: 'more',\n noEventsMessage: 'No events to display'\n};\n\nfunction parseRawLocales(explicitRawLocales) {\n var defaultCode = explicitRawLocales.length > 0 ? explicitRawLocales[0].code : 'en';\n var globalArray = window['FullCalendarLocalesAll'] || []; // from locales-all.js\n\n var globalObject = window['FullCalendarLocales'] || {}; // from locales/*.js. keys are meaningless\n\n var allRawLocales = globalArray.concat( // globalArray is low prio\n hashValuesToArray(globalObject), // medium prio\n explicitRawLocales // highest prio\n );\n var rawLocaleMap = {\n en: RAW_EN_LOCALE // necessary?\n\n };\n\n for (var _i = 0, allRawLocales_1 = allRawLocales; _i < allRawLocales_1.length; _i++) {\n var rawLocale = allRawLocales_1[_i];\n rawLocaleMap[rawLocale.code] = rawLocale;\n }\n\n return {\n map: rawLocaleMap,\n defaultCode: defaultCode\n };\n}\n\nfunction buildLocale(inputSingular, available) {\n if (_typeof(inputSingular) === 'object' && !Array.isArray(inputSingular)) {\n return parseLocale(inputSingular.code, [inputSingular.code], inputSingular);\n } else {\n return queryLocale(inputSingular, available);\n }\n}\n\nfunction queryLocale(codeArg, available) {\n var codes = [].concat(codeArg || []); // will convert to array\n\n var raw = queryRawLocale(codes, available) || RAW_EN_LOCALE;\n return parseLocale(codeArg, codes, raw);\n}\n\nfunction queryRawLocale(codes, available) {\n for (var i = 0; i < codes.length; i++) {\n var parts = codes[i].toLocaleLowerCase().split('-');\n\n for (var j = parts.length; j > 0; j--) {\n var simpleId = parts.slice(0, j).join('-');\n\n if (available[simpleId]) {\n return available[simpleId];\n }\n }\n }\n\n return null;\n}\n\nfunction parseLocale(codeArg, codes, raw) {\n var merged = mergeProps([RAW_EN_LOCALE, raw], ['buttonText']);\n delete merged.code; // don't want this part of the options\n\n var week = merged.week;\n delete merged.week;\n return {\n codeArg: codeArg,\n codes: codes,\n week: week,\n simpleNumberFormat: new Intl.NumberFormat(codeArg),\n options: merged\n };\n}\n\nvar OptionsManager =\n/** @class */\nfunction () {\n function OptionsManager(overrides) {\n this.overrides = _assign({}, overrides); // make a copy\n\n this.dynamicOverrides = {};\n this.compute();\n }\n\n OptionsManager.prototype.mutate = function (updates, removals, isDynamic) {\n var overrideHash = isDynamic ? this.dynamicOverrides : this.overrides;\n\n _assign(overrideHash, updates);\n\n for (var _i = 0, removals_1 = removals; _i < removals_1.length; _i++) {\n var propName = removals_1[_i];\n delete overrideHash[propName];\n }\n\n this.compute();\n }; // Computes the flattened options hash for the calendar and assigns to `this.options`.\n // Assumes this.overrides and this.dynamicOverrides have already been initialized.\n\n\n OptionsManager.prototype.compute = function () {\n // TODO: not a very efficient system\n var locales = firstDefined( // explicit locale option given?\n this.dynamicOverrides.locales, this.overrides.locales, globalDefaults.locales);\n var locale = firstDefined( // explicit locales option given?\n this.dynamicOverrides.locale, this.overrides.locale, globalDefaults.locale);\n var available = parseRawLocales(locales);\n var localeDefaults = buildLocale(locale || available.defaultCode, available.map).options;\n var dir = firstDefined( // based on options computed so far, is direction RTL?\n this.dynamicOverrides.dir, this.overrides.dir, localeDefaults.dir);\n var dirDefaults = dir === 'rtl' ? rtlDefaults : {};\n this.dirDefaults = dirDefaults;\n this.localeDefaults = localeDefaults;\n this.computed = mergeOptions([globalDefaults, dirDefaults, localeDefaults, this.overrides, this.dynamicOverrides]);\n };\n\n return OptionsManager;\n}();\n\nvar calendarSystemClassMap = {};\n\nfunction registerCalendarSystem(name, theClass) {\n calendarSystemClassMap[name] = theClass;\n}\n\nfunction createCalendarSystem(name) {\n return new calendarSystemClassMap[name]();\n}\n\nvar GregorianCalendarSystem =\n/** @class */\nfunction () {\n function GregorianCalendarSystem() {}\n\n GregorianCalendarSystem.prototype.getMarkerYear = function (d) {\n return d.getUTCFullYear();\n };\n\n GregorianCalendarSystem.prototype.getMarkerMonth = function (d) {\n return d.getUTCMonth();\n };\n\n GregorianCalendarSystem.prototype.getMarkerDay = function (d) {\n return d.getUTCDate();\n };\n\n GregorianCalendarSystem.prototype.arrayToMarker = function (arr) {\n return arrayToUtcDate(arr);\n };\n\n GregorianCalendarSystem.prototype.markerToArray = function (marker) {\n return dateToUtcArray(marker);\n };\n\n return GregorianCalendarSystem;\n}();\n\nregisterCalendarSystem('gregory', GregorianCalendarSystem);\nvar ISO_RE = /^\\s*(\\d{4})(-(\\d{2})(-(\\d{2})([T ](\\d{2}):(\\d{2})(:(\\d{2})(\\.(\\d+))?)?(Z|(([-+])(\\d{2})(:?(\\d{2}))?))?)?)?)?$/;\n\nfunction parse(str) {\n var m = ISO_RE.exec(str);\n\n if (m) {\n var marker = new Date(Date.UTC(Number(m[1]), m[3] ? Number(m[3]) - 1 : 0, Number(m[5] || 1), Number(m[7] || 0), Number(m[8] || 0), Number(m[10] || 0), m[12] ? Number('0.' + m[12]) * 1000 : 0));\n\n if (isValidDate(marker)) {\n var timeZoneOffset = null;\n\n if (m[13]) {\n timeZoneOffset = (m[15] === '-' ? -1 : 1) * (Number(m[16] || 0) * 60 + Number(m[18] || 0));\n }\n\n return {\n marker: marker,\n isTimeUnspecified: !m[6],\n timeZoneOffset: timeZoneOffset\n };\n }\n }\n\n return null;\n}\n\nvar DateEnv =\n/** @class */\nfunction () {\n function DateEnv(settings) {\n var timeZone = this.timeZone = settings.timeZone;\n var isNamedTimeZone = timeZone !== 'local' && timeZone !== 'UTC';\n\n if (settings.namedTimeZoneImpl && isNamedTimeZone) {\n this.namedTimeZoneImpl = new settings.namedTimeZoneImpl(timeZone);\n }\n\n this.canComputeOffset = Boolean(!isNamedTimeZone || this.namedTimeZoneImpl);\n this.calendarSystem = createCalendarSystem(settings.calendarSystem);\n this.locale = settings.locale;\n this.weekDow = settings.locale.week.dow;\n this.weekDoy = settings.locale.week.doy;\n\n if (settings.weekNumberCalculation === 'ISO') {\n this.weekDow = 1;\n this.weekDoy = 4;\n }\n\n if (typeof settings.firstDay === 'number') {\n this.weekDow = settings.firstDay;\n }\n\n if (typeof settings.weekNumberCalculation === 'function') {\n this.weekNumberFunc = settings.weekNumberCalculation;\n }\n\n this.weekLabel = settings.weekLabel != null ? settings.weekLabel : settings.locale.options.weekLabel;\n this.cmdFormatter = settings.cmdFormatter;\n } // Creating / Parsing\n\n\n DateEnv.prototype.createMarker = function (input) {\n var meta = this.createMarkerMeta(input);\n\n if (meta === null) {\n return null;\n }\n\n return meta.marker;\n };\n\n DateEnv.prototype.createNowMarker = function () {\n if (this.canComputeOffset) {\n return this.timestampToMarker(new Date().valueOf());\n } else {\n // if we can't compute the current date val for a timezone,\n // better to give the current local date vals than UTC\n return arrayToUtcDate(dateToLocalArray(new Date()));\n }\n };\n\n DateEnv.prototype.createMarkerMeta = function (input) {\n if (typeof input === 'string') {\n return this.parse(input);\n }\n\n var marker = null;\n\n if (typeof input === 'number') {\n marker = this.timestampToMarker(input);\n } else if (input instanceof Date) {\n input = input.valueOf();\n\n if (!isNaN(input)) {\n marker = this.timestampToMarker(input);\n }\n } else if (Array.isArray(input)) {\n marker = arrayToUtcDate(input);\n }\n\n if (marker === null || !isValidDate(marker)) {\n return null;\n }\n\n return {\n marker: marker,\n isTimeUnspecified: false,\n forcedTzo: null\n };\n };\n\n DateEnv.prototype.parse = function (s) {\n var parts = parse(s);\n\n if (parts === null) {\n return null;\n }\n\n var marker = parts.marker;\n var forcedTzo = null;\n\n if (parts.timeZoneOffset !== null) {\n if (this.canComputeOffset) {\n marker = this.timestampToMarker(marker.valueOf() - parts.timeZoneOffset * 60 * 1000);\n } else {\n forcedTzo = parts.timeZoneOffset;\n }\n }\n\n return {\n marker: marker,\n isTimeUnspecified: parts.isTimeUnspecified,\n forcedTzo: forcedTzo\n };\n }; // Accessors\n\n\n DateEnv.prototype.getYear = function (marker) {\n return this.calendarSystem.getMarkerYear(marker);\n };\n\n DateEnv.prototype.getMonth = function (marker) {\n return this.calendarSystem.getMarkerMonth(marker);\n }; // Adding / Subtracting\n\n\n DateEnv.prototype.add = function (marker, dur) {\n var a = this.calendarSystem.markerToArray(marker);\n a[0] += dur.years;\n a[1] += dur.months;\n a[2] += dur.days;\n a[6] += dur.milliseconds;\n return this.calendarSystem.arrayToMarker(a);\n };\n\n DateEnv.prototype.subtract = function (marker, dur) {\n var a = this.calendarSystem.markerToArray(marker);\n a[0] -= dur.years;\n a[1] -= dur.months;\n a[2] -= dur.days;\n a[6] -= dur.milliseconds;\n return this.calendarSystem.arrayToMarker(a);\n };\n\n DateEnv.prototype.addYears = function (marker, n) {\n var a = this.calendarSystem.markerToArray(marker);\n a[0] += n;\n return this.calendarSystem.arrayToMarker(a);\n };\n\n DateEnv.prototype.addMonths = function (marker, n) {\n var a = this.calendarSystem.markerToArray(marker);\n a[1] += n;\n return this.calendarSystem.arrayToMarker(a);\n }; // Diffing Whole Units\n\n\n DateEnv.prototype.diffWholeYears = function (m0, m1) {\n var calendarSystem = this.calendarSystem;\n\n if (timeAsMs(m0) === timeAsMs(m1) && calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1) && calendarSystem.getMarkerMonth(m0) === calendarSystem.getMarkerMonth(m1)) {\n return calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0);\n }\n\n return null;\n };\n\n DateEnv.prototype.diffWholeMonths = function (m0, m1) {\n var calendarSystem = this.calendarSystem;\n\n if (timeAsMs(m0) === timeAsMs(m1) && calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1)) {\n return calendarSystem.getMarkerMonth(m1) - calendarSystem.getMarkerMonth(m0) + (calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0)) * 12;\n }\n\n return null;\n }; // Range / Duration\n\n\n DateEnv.prototype.greatestWholeUnit = function (m0, m1) {\n var n = this.diffWholeYears(m0, m1);\n\n if (n !== null) {\n return {\n unit: 'year',\n value: n\n };\n }\n\n n = this.diffWholeMonths(m0, m1);\n\n if (n !== null) {\n return {\n unit: 'month',\n value: n\n };\n }\n\n n = diffWholeWeeks(m0, m1);\n\n if (n !== null) {\n return {\n unit: 'week',\n value: n\n };\n }\n\n n = diffWholeDays(m0, m1);\n\n if (n !== null) {\n return {\n unit: 'day',\n value: n\n };\n }\n\n n = diffHours(m0, m1);\n\n if (isInt(n)) {\n return {\n unit: 'hour',\n value: n\n };\n }\n\n n = diffMinutes(m0, m1);\n\n if (isInt(n)) {\n return {\n unit: 'minute',\n value: n\n };\n }\n\n n = diffSeconds(m0, m1);\n\n if (isInt(n)) {\n return {\n unit: 'second',\n value: n\n };\n }\n\n return {\n unit: 'millisecond',\n value: m1.valueOf() - m0.valueOf()\n };\n };\n\n DateEnv.prototype.countDurationsBetween = function (m0, m1, d) {\n // TODO: can use greatestWholeUnit\n var diff;\n\n if (d.years) {\n diff = this.diffWholeYears(m0, m1);\n\n if (diff !== null) {\n return diff / asRoughYears(d);\n }\n }\n\n if (d.months) {\n diff = this.diffWholeMonths(m0, m1);\n\n if (diff !== null) {\n return diff / asRoughMonths(d);\n }\n }\n\n if (d.days) {\n diff = diffWholeDays(m0, m1);\n\n if (diff !== null) {\n return diff / asRoughDays(d);\n }\n }\n\n return (m1.valueOf() - m0.valueOf()) / asRoughMs(d);\n }; // Start-Of\n\n\n DateEnv.prototype.startOf = function (m, unit) {\n if (unit === 'year') {\n return this.startOfYear(m);\n } else if (unit === 'month') {\n return this.startOfMonth(m);\n } else if (unit === 'week') {\n return this.startOfWeek(m);\n } else if (unit === 'day') {\n return startOfDay(m);\n } else if (unit === 'hour') {\n return startOfHour(m);\n } else if (unit === 'minute') {\n return startOfMinute(m);\n } else if (unit === 'second') {\n return startOfSecond(m);\n }\n };\n\n DateEnv.prototype.startOfYear = function (m) {\n return this.calendarSystem.arrayToMarker([this.calendarSystem.getMarkerYear(m)]);\n };\n\n DateEnv.prototype.startOfMonth = function (m) {\n return this.calendarSystem.arrayToMarker([this.calendarSystem.getMarkerYear(m), this.calendarSystem.getMarkerMonth(m)]);\n };\n\n DateEnv.prototype.startOfWeek = function (m) {\n return this.calendarSystem.arrayToMarker([this.calendarSystem.getMarkerYear(m), this.calendarSystem.getMarkerMonth(m), m.getUTCDate() - (m.getUTCDay() - this.weekDow + 7) % 7]);\n }; // Week Number\n\n\n DateEnv.prototype.computeWeekNumber = function (marker) {\n if (this.weekNumberFunc) {\n return this.weekNumberFunc(this.toDate(marker));\n } else {\n return weekOfYear(marker, this.weekDow, this.weekDoy);\n }\n }; // TODO: choke on timeZoneName: long\n\n\n DateEnv.prototype.format = function (marker, formatter, dateOptions) {\n if (dateOptions === void 0) {\n dateOptions = {};\n }\n\n return formatter.format({\n marker: marker,\n timeZoneOffset: dateOptions.forcedTzo != null ? dateOptions.forcedTzo : this.offsetForMarker(marker)\n }, this);\n };\n\n DateEnv.prototype.formatRange = function (start, end, formatter, dateOptions) {\n if (dateOptions === void 0) {\n dateOptions = {};\n }\n\n if (dateOptions.isEndExclusive) {\n end = addMs(end, -1);\n }\n\n return formatter.formatRange({\n marker: start,\n timeZoneOffset: dateOptions.forcedStartTzo != null ? dateOptions.forcedStartTzo : this.offsetForMarker(start)\n }, {\n marker: end,\n timeZoneOffset: dateOptions.forcedEndTzo != null ? dateOptions.forcedEndTzo : this.offsetForMarker(end)\n }, this);\n };\n\n DateEnv.prototype.formatIso = function (marker, extraOptions) {\n if (extraOptions === void 0) {\n extraOptions = {};\n }\n\n var timeZoneOffset = null;\n\n if (!extraOptions.omitTimeZoneOffset) {\n if (extraOptions.forcedTzo != null) {\n timeZoneOffset = extraOptions.forcedTzo;\n } else {\n timeZoneOffset = this.offsetForMarker(marker);\n }\n }\n\n return buildIsoString(marker, timeZoneOffset, extraOptions.omitTime);\n }; // TimeZone\n\n\n DateEnv.prototype.timestampToMarker = function (ms) {\n if (this.timeZone === 'local') {\n return arrayToUtcDate(dateToLocalArray(new Date(ms)));\n } else if (this.timeZone === 'UTC' || !this.namedTimeZoneImpl) {\n return new Date(ms);\n } else {\n return arrayToUtcDate(this.namedTimeZoneImpl.timestampToArray(ms));\n }\n };\n\n DateEnv.prototype.offsetForMarker = function (m) {\n if (this.timeZone === 'local') {\n return -arrayToLocalDate(dateToUtcArray(m)).getTimezoneOffset(); // convert \"inverse\" offset to \"normal\" offset\n } else if (this.timeZone === 'UTC') {\n return 0;\n } else if (this.namedTimeZoneImpl) {\n return this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m));\n }\n\n return null;\n }; // Conversion\n\n\n DateEnv.prototype.toDate = function (m, forcedTzo) {\n if (this.timeZone === 'local') {\n return arrayToLocalDate(dateToUtcArray(m));\n } else if (this.timeZone === 'UTC') {\n return new Date(m.valueOf()); // make sure it's a copy\n } else if (!this.namedTimeZoneImpl) {\n return new Date(m.valueOf() - (forcedTzo || 0));\n } else {\n return new Date(m.valueOf() - this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m)) * 1000 * 60 // convert minutes -> ms\n );\n }\n };\n\n return DateEnv;\n}();\n\nvar SIMPLE_SOURCE_PROPS = {\n id: String,\n allDayDefault: Boolean,\n eventDataTransform: Function,\n success: Function,\n failure: Function\n};\nvar uid$2 = 0;\n\nfunction doesSourceNeedRange(eventSource, calendar) {\n var defs = calendar.pluginSystem.hooks.eventSourceDefs;\n return !defs[eventSource.sourceDefId].ignoreRange;\n}\n\nfunction parseEventSource(raw, calendar) {\n var defs = calendar.pluginSystem.hooks.eventSourceDefs;\n\n for (var i = defs.length - 1; i >= 0; i--) {\n // later-added plugins take precedence\n var def = defs[i];\n var meta = def.parseMeta(raw);\n\n if (meta) {\n var res = parseEventSourceProps(_typeof(raw) === 'object' ? raw : {}, meta, i, calendar);\n res._raw = raw;\n return res;\n }\n }\n\n return null;\n}\n\nfunction parseEventSourceProps(raw, meta, sourceDefId, calendar) {\n var leftovers0 = {};\n var props = refineProps(raw, SIMPLE_SOURCE_PROPS, {}, leftovers0);\n var leftovers1 = {};\n var ui = processUnscopedUiProps(leftovers0, calendar, leftovers1);\n props.isFetching = false;\n props.latestFetchId = '';\n props.fetchRange = null;\n props.publicId = String(raw.id || '');\n props.sourceId = String(uid$2++);\n props.sourceDefId = sourceDefId;\n props.meta = meta;\n props.ui = ui;\n props.extendedProps = leftovers1;\n return props;\n}\n\nfunction reduceEventSources(eventSources, action, dateProfile, calendar) {\n switch (action.type) {\n case 'ADD_EVENT_SOURCES':\n // already parsed\n return addSources(eventSources, action.sources, dateProfile ? dateProfile.activeRange : null, calendar);\n\n case 'REMOVE_EVENT_SOURCE':\n return removeSource(eventSources, action.sourceId);\n\n case 'PREV': // TODO: how do we track all actions that affect dateProfile :(\n\n case 'NEXT':\n case 'SET_DATE':\n case 'SET_VIEW_TYPE':\n if (dateProfile) {\n return fetchDirtySources(eventSources, dateProfile.activeRange, calendar);\n } else {\n return eventSources;\n }\n\n case 'FETCH_EVENT_SOURCES':\n case 'CHANGE_TIMEZONE':\n return fetchSourcesByIds(eventSources, action.sourceIds ? arrayToHash(action.sourceIds) : excludeStaticSources(eventSources, calendar), dateProfile ? dateProfile.activeRange : null, calendar);\n\n case 'RECEIVE_EVENTS':\n case 'RECEIVE_EVENT_ERROR':\n return receiveResponse(eventSources, action.sourceId, action.fetchId, action.fetchRange);\n\n case 'REMOVE_ALL_EVENT_SOURCES':\n return {};\n\n default:\n return eventSources;\n }\n}\n\nvar uid$3 = 0;\n\nfunction addSources(eventSourceHash, sources, fetchRange, calendar) {\n var hash = {};\n\n for (var _i = 0, sources_1 = sources; _i < sources_1.length; _i++) {\n var source = sources_1[_i];\n hash[source.sourceId] = source;\n }\n\n if (fetchRange) {\n hash = fetchDirtySources(hash, fetchRange, calendar);\n }\n\n return _assign({}, eventSourceHash, hash);\n}\n\nfunction removeSource(eventSourceHash, sourceId) {\n return filterHash(eventSourceHash, function (eventSource) {\n return eventSource.sourceId !== sourceId;\n });\n}\n\nfunction fetchDirtySources(sourceHash, fetchRange, calendar) {\n return fetchSourcesByIds(sourceHash, filterHash(sourceHash, function (eventSource) {\n return isSourceDirty(eventSource, fetchRange, calendar);\n }), fetchRange, calendar);\n}\n\nfunction isSourceDirty(eventSource, fetchRange, calendar) {\n if (!doesSourceNeedRange(eventSource, calendar)) {\n return !eventSource.latestFetchId;\n } else {\n return !calendar.opt('lazyFetching') || !eventSource.fetchRange || fetchRange.start < eventSource.fetchRange.start || fetchRange.end > eventSource.fetchRange.end;\n }\n}\n\nfunction fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, calendar) {\n var nextSources = {};\n\n for (var sourceId in prevSources) {\n var source = prevSources[sourceId];\n\n if (sourceIdHash[sourceId]) {\n nextSources[sourceId] = fetchSource(source, fetchRange, calendar);\n } else {\n nextSources[sourceId] = source;\n }\n }\n\n return nextSources;\n}\n\nfunction fetchSource(eventSource, fetchRange, calendar) {\n var sourceDef = calendar.pluginSystem.hooks.eventSourceDefs[eventSource.sourceDefId];\n var fetchId = String(uid$3++);\n sourceDef.fetch({\n eventSource: eventSource,\n calendar: calendar,\n range: fetchRange\n }, function (res) {\n var rawEvents = res.rawEvents;\n var calSuccess = calendar.opt('eventSourceSuccess');\n var calSuccessRes;\n var sourceSuccessRes;\n\n if (eventSource.success) {\n sourceSuccessRes = eventSource.success(rawEvents, res.xhr);\n }\n\n if (calSuccess) {\n calSuccessRes = calSuccess(rawEvents, res.xhr);\n }\n\n rawEvents = sourceSuccessRes || calSuccessRes || rawEvents;\n calendar.dispatch({\n type: 'RECEIVE_EVENTS',\n sourceId: eventSource.sourceId,\n fetchId: fetchId,\n fetchRange: fetchRange,\n rawEvents: rawEvents\n });\n }, function (error) {\n var callFailure = calendar.opt('eventSourceFailure');\n console.warn(error.message, error);\n\n if (eventSource.failure) {\n eventSource.failure(error);\n }\n\n if (callFailure) {\n callFailure(error);\n }\n\n calendar.dispatch({\n type: 'RECEIVE_EVENT_ERROR',\n sourceId: eventSource.sourceId,\n fetchId: fetchId,\n fetchRange: fetchRange,\n error: error\n });\n });\n return _assign({}, eventSource, {\n isFetching: true,\n latestFetchId: fetchId\n });\n}\n\nfunction receiveResponse(sourceHash, sourceId, fetchId, fetchRange) {\n var _a;\n\n var eventSource = sourceHash[sourceId];\n\n if (eventSource && // not already removed\n fetchId === eventSource.latestFetchId) {\n return _assign({}, sourceHash, (_a = {}, _a[sourceId] = _assign({}, eventSource, {\n isFetching: false,\n fetchRange: fetchRange\n }), _a));\n }\n\n return sourceHash;\n}\n\nfunction excludeStaticSources(eventSources, calendar) {\n return filterHash(eventSources, function (eventSource) {\n return doesSourceNeedRange(eventSource, calendar);\n });\n}\n\nvar DateProfileGenerator =\n/** @class */\nfunction () {\n function DateProfileGenerator(viewSpec, calendar) {\n this.viewSpec = viewSpec;\n this.options = viewSpec.options;\n this.dateEnv = calendar.dateEnv;\n this.calendar = calendar;\n this.initHiddenDays();\n }\n /* Date Range Computation\n ------------------------------------------------------------------------------------------------------------------*/\n // Builds a structure with info about what the dates/ranges will be for the \"prev\" view.\n\n\n DateProfileGenerator.prototype.buildPrev = function (currentDateProfile, currentDate) {\n var dateEnv = this.dateEnv;\n var prevDate = dateEnv.subtract(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month\n currentDateProfile.dateIncrement);\n return this.build(prevDate, -1);\n }; // Builds a structure with info about what the dates/ranges will be for the \"next\" view.\n\n\n DateProfileGenerator.prototype.buildNext = function (currentDateProfile, currentDate) {\n var dateEnv = this.dateEnv;\n var nextDate = dateEnv.add(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month\n currentDateProfile.dateIncrement);\n return this.build(nextDate, 1);\n }; // Builds a structure holding dates/ranges for rendering around the given date.\n // Optional direction param indicates whether the date is being incremented/decremented\n // from its previous value. decremented = -1, incremented = 1 (default).\n\n\n DateProfileGenerator.prototype.build = function (currentDate, direction, forceToValid) {\n if (forceToValid === void 0) {\n forceToValid = false;\n }\n\n var validRange;\n var minTime = null;\n var maxTime = null;\n var currentInfo;\n var isRangeAllDay;\n var renderRange;\n var activeRange;\n var isValid;\n validRange = this.buildValidRange();\n validRange = this.trimHiddenDays(validRange);\n\n if (forceToValid) {\n currentDate = constrainMarkerToRange(currentDate, validRange);\n }\n\n currentInfo = this.buildCurrentRangeInfo(currentDate, direction);\n isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit);\n renderRange = this.buildRenderRange(this.trimHiddenDays(currentInfo.range), currentInfo.unit, isRangeAllDay);\n renderRange = this.trimHiddenDays(renderRange);\n activeRange = renderRange;\n\n if (!this.options.showNonCurrentDates) {\n activeRange = intersectRanges(activeRange, currentInfo.range);\n }\n\n minTime = createDuration(this.options.minTime);\n maxTime = createDuration(this.options.maxTime);\n activeRange = this.adjustActiveRange(activeRange, minTime, maxTime);\n activeRange = intersectRanges(activeRange, validRange); // might return null\n // it's invalid if the originally requested date is not contained,\n // or if the range is completely outside of the valid range.\n\n isValid = rangesIntersect(currentInfo.range, validRange);\n return {\n // constraint for where prev/next operations can go and where events can be dragged/resized to.\n // an object with optional start and end properties.\n validRange: validRange,\n // range the view is formally responsible for.\n // for example, a month view might have 1st-31st, excluding padded dates\n currentRange: currentInfo.range,\n // name of largest unit being displayed, like \"month\" or \"week\"\n currentRangeUnit: currentInfo.unit,\n isRangeAllDay: isRangeAllDay,\n // dates that display events and accept drag-n-drop\n // will be `null` if no dates accept events\n activeRange: activeRange,\n // date range with a rendered skeleton\n // includes not-active days that need some sort of DOM\n renderRange: renderRange,\n // Duration object that denotes the first visible time of any given day\n minTime: minTime,\n // Duration object that denotes the exclusive visible end time of any given day\n maxTime: maxTime,\n isValid: isValid,\n // how far the current date will move for a prev/next operation\n dateIncrement: this.buildDateIncrement(currentInfo.duration) // pass a fallback (might be null) ^\n\n };\n }; // Builds an object with optional start/end properties.\n // Indicates the minimum/maximum dates to display.\n // not responsible for trimming hidden days.\n\n\n DateProfileGenerator.prototype.buildValidRange = function () {\n return this.getRangeOption('validRange', this.calendar.getNow()) || {\n start: null,\n end: null\n }; // completely open-ended\n }; // Builds a structure with info about the \"current\" range, the range that is\n // highlighted as being the current month for example.\n // See build() for a description of `direction`.\n // Guaranteed to have `range` and `unit` properties. `duration` is optional.\n\n\n DateProfileGenerator.prototype.buildCurrentRangeInfo = function (date, direction) {\n var _a = this,\n viewSpec = _a.viewSpec,\n dateEnv = _a.dateEnv;\n\n var duration = null;\n var unit = null;\n var range = null;\n var dayCount;\n\n if (viewSpec.duration) {\n duration = viewSpec.duration;\n unit = viewSpec.durationUnit;\n range = this.buildRangeFromDuration(date, direction, duration, unit);\n } else if (dayCount = this.options.dayCount) {\n unit = 'day';\n range = this.buildRangeFromDayCount(date, direction, dayCount);\n } else if (range = this.buildCustomVisibleRange(date)) {\n unit = dateEnv.greatestWholeUnit(range.start, range.end).unit;\n } else {\n duration = this.getFallbackDuration();\n unit = greatestDurationDenominator(duration).unit;\n range = this.buildRangeFromDuration(date, direction, duration, unit);\n }\n\n return {\n duration: duration,\n unit: unit,\n range: range\n };\n };\n\n DateProfileGenerator.prototype.getFallbackDuration = function () {\n return createDuration({\n day: 1\n });\n }; // Returns a new activeRange to have time values (un-ambiguate)\n // minTime or maxTime causes the range to expand.\n\n\n DateProfileGenerator.prototype.adjustActiveRange = function (range, minTime, maxTime) {\n var dateEnv = this.dateEnv;\n var start = range.start;\n var end = range.end;\n\n if (this.viewSpec[\"class\"].prototype.usesMinMaxTime) {\n // expand active range if minTime is negative (why not when positive?)\n if (asRoughDays(minTime) < 0) {\n start = startOfDay(start); // necessary?\n\n start = dateEnv.add(start, minTime);\n } // expand active range if maxTime is beyond one day (why not when positive?)\n\n\n if (asRoughDays(maxTime) > 1) {\n end = startOfDay(end); // necessary?\n\n end = addDays(end, -1);\n end = dateEnv.add(end, maxTime);\n }\n }\n\n return {\n start: start,\n end: end\n };\n }; // Builds the \"current\" range when it is specified as an explicit duration.\n // `unit` is the already-computed greatestDurationDenominator unit of duration.\n\n\n DateProfileGenerator.prototype.buildRangeFromDuration = function (date, direction, duration, unit) {\n var dateEnv = this.dateEnv;\n var alignment = this.options.dateAlignment;\n var dateIncrementInput;\n var dateIncrementDuration;\n var start;\n var end;\n var res; // compute what the alignment should be\n\n if (!alignment) {\n dateIncrementInput = this.options.dateIncrement;\n\n if (dateIncrementInput) {\n dateIncrementDuration = createDuration(dateIncrementInput); // use the smaller of the two units\n\n if (asRoughMs(dateIncrementDuration) < asRoughMs(duration)) {\n alignment = greatestDurationDenominator(dateIncrementDuration, !getWeeksFromInput(dateIncrementInput)).unit;\n } else {\n alignment = unit;\n }\n } else {\n alignment = unit;\n }\n } // if the view displays a single day or smaller\n\n\n if (asRoughDays(duration) <= 1) {\n if (this.isHiddenDay(start)) {\n start = this.skipHiddenDays(start, direction);\n start = startOfDay(start);\n }\n }\n\n function computeRes() {\n start = dateEnv.startOf(date, alignment);\n end = dateEnv.add(start, duration);\n res = {\n start: start,\n end: end\n };\n }\n\n computeRes(); // if range is completely enveloped by hidden days, go past the hidden days\n\n if (!this.trimHiddenDays(res)) {\n date = this.skipHiddenDays(date, direction);\n computeRes();\n }\n\n return res;\n }; // Builds the \"current\" range when a dayCount is specified.\n\n\n DateProfileGenerator.prototype.buildRangeFromDayCount = function (date, direction, dayCount) {\n var dateEnv = this.dateEnv;\n var customAlignment = this.options.dateAlignment;\n var runningCount = 0;\n var start = date;\n var end;\n\n if (customAlignment) {\n start = dateEnv.startOf(start, customAlignment);\n }\n\n start = startOfDay(start);\n start = this.skipHiddenDays(start, direction);\n end = start;\n\n do {\n end = addDays(end, 1);\n\n if (!this.isHiddenDay(end)) {\n runningCount++;\n }\n } while (runningCount < dayCount);\n\n return {\n start: start,\n end: end\n };\n }; // Builds a normalized range object for the \"visible\" range,\n // which is a way to define the currentRange and activeRange at the same time.\n\n\n DateProfileGenerator.prototype.buildCustomVisibleRange = function (date) {\n var dateEnv = this.dateEnv;\n var visibleRange = this.getRangeOption('visibleRange', dateEnv.toDate(date));\n\n if (visibleRange && (visibleRange.start == null || visibleRange.end == null)) {\n return null;\n }\n\n return visibleRange;\n }; // Computes the range that will represent the element/cells for *rendering*,\n // but which may have voided days/times.\n // not responsible for trimming hidden days.\n\n\n DateProfileGenerator.prototype.buildRenderRange = function (currentRange, currentRangeUnit, isRangeAllDay) {\n return currentRange;\n }; // Compute the duration value that should be added/substracted to the current date\n // when a prev/next operation happens.\n\n\n DateProfileGenerator.prototype.buildDateIncrement = function (fallback) {\n var dateIncrementInput = this.options.dateIncrement;\n var customAlignment;\n\n if (dateIncrementInput) {\n return createDuration(dateIncrementInput);\n } else if (customAlignment = this.options.dateAlignment) {\n return createDuration(1, customAlignment);\n } else if (fallback) {\n return fallback;\n } else {\n return createDuration({\n days: 1\n });\n }\n }; // Arguments after name will be forwarded to a hypothetical function value\n // WARNING: passed-in arguments will be given to generator functions as-is and can cause side-effects.\n // Always clone your objects if you fear mutation.\n\n\n DateProfileGenerator.prototype.getRangeOption = function (name) {\n var otherArgs = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n otherArgs[_i - 1] = arguments[_i];\n }\n\n var val = this.options[name];\n\n if (typeof val === 'function') {\n val = val.apply(null, otherArgs);\n }\n\n if (val) {\n val = parseRange(val, this.dateEnv);\n }\n\n if (val) {\n val = computeVisibleDayRange(val);\n }\n\n return val;\n };\n /* Hidden Days\n ------------------------------------------------------------------------------------------------------------------*/\n // Initializes internal variables related to calculating hidden days-of-week\n\n\n DateProfileGenerator.prototype.initHiddenDays = function () {\n var hiddenDays = this.options.hiddenDays || []; // array of day-of-week indices that are hidden\n\n var isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool)\n\n var dayCnt = 0;\n var i;\n\n if (this.options.weekends === false) {\n hiddenDays.push(0, 6); // 0=sunday, 6=saturday\n }\n\n for (i = 0; i < 7; i++) {\n if (!(isHiddenDayHash[i] = hiddenDays.indexOf(i) !== -1)) {\n dayCnt++;\n }\n }\n\n if (!dayCnt) {\n throw new Error('invalid hiddenDays'); // all days were hidden? bad.\n }\n\n this.isHiddenDayHash = isHiddenDayHash;\n }; // Remove days from the beginning and end of the range that are computed as hidden.\n // If the whole range is trimmed off, returns null\n\n\n DateProfileGenerator.prototype.trimHiddenDays = function (range) {\n var start = range.start;\n var end = range.end;\n\n if (start) {\n start = this.skipHiddenDays(start);\n }\n\n if (end) {\n end = this.skipHiddenDays(end, -1, true);\n }\n\n if (start == null || end == null || start < end) {\n return {\n start: start,\n end: end\n };\n }\n\n return null;\n }; // Is the current day hidden?\n // `day` is a day-of-week index (0-6), or a Date (used for UTC)\n\n\n DateProfileGenerator.prototype.isHiddenDay = function (day) {\n if (day instanceof Date) {\n day = day.getUTCDay();\n }\n\n return this.isHiddenDayHash[day];\n }; // Incrementing the current day until it is no longer a hidden day, returning a copy.\n // DOES NOT CONSIDER validRange!\n // If the initial value of `date` is not a hidden day, don't do anything.\n // Pass `isExclusive` as `true` if you are dealing with an end date.\n // `inc` defaults to `1` (increment one day forward each time)\n\n\n DateProfileGenerator.prototype.skipHiddenDays = function (date, inc, isExclusive) {\n if (inc === void 0) {\n inc = 1;\n }\n\n if (isExclusive === void 0) {\n isExclusive = false;\n }\n\n while (this.isHiddenDayHash[(date.getUTCDay() + (isExclusive ? inc : 0) + 7) % 7]) {\n date = addDays(date, inc);\n }\n\n return date;\n };\n\n return DateProfileGenerator;\n}(); // TODO: find a way to avoid comparing DateProfiles. it's tedious\n\n\nfunction isDateProfilesEqual(p0, p1) {\n return rangesEqual(p0.validRange, p1.validRange) && rangesEqual(p0.activeRange, p1.activeRange) && rangesEqual(p0.renderRange, p1.renderRange) && durationsEqual(p0.minTime, p1.minTime) && durationsEqual(p0.maxTime, p1.maxTime);\n /*\n TODO: compare more?\n currentRange: DateRange\n currentRangeUnit: string\n isRangeAllDay: boolean\n isValid: boolean\n dateIncrement: Duration\n */\n}\n\nfunction reduce(state, action, calendar) {\n var viewType = reduceViewType(state.viewType, action);\n var dateProfile = reduceDateProfile(state.dateProfile, action, state.currentDate, viewType, calendar);\n var eventSources = reduceEventSources(state.eventSources, action, dateProfile, calendar);\n\n var nextState = _assign({}, state, {\n viewType: viewType,\n dateProfile: dateProfile,\n currentDate: reduceCurrentDate(state.currentDate, action, dateProfile),\n eventSources: eventSources,\n eventStore: reduceEventStore(state.eventStore, action, eventSources, dateProfile, calendar),\n dateSelection: reduceDateSelection(state.dateSelection, action, calendar),\n eventSelection: reduceSelectedEvent(state.eventSelection, action),\n eventDrag: reduceEventDrag(state.eventDrag, action, eventSources, calendar),\n eventResize: reduceEventResize(state.eventResize, action, eventSources, calendar),\n eventSourceLoadingLevel: computeLoadingLevel(eventSources),\n loadingLevel: computeLoadingLevel(eventSources)\n });\n\n for (var _i = 0, _a = calendar.pluginSystem.hooks.reducers; _i < _a.length; _i++) {\n var reducerFunc = _a[_i];\n nextState = reducerFunc(nextState, action, calendar);\n } // console.log(action.type, nextState)\n\n\n return nextState;\n}\n\nfunction reduceViewType(currentViewType, action) {\n switch (action.type) {\n case 'SET_VIEW_TYPE':\n return action.viewType;\n\n default:\n return currentViewType;\n }\n}\n\nfunction reduceDateProfile(currentDateProfile, action, currentDate, viewType, calendar) {\n var newDateProfile;\n\n switch (action.type) {\n case 'PREV':\n newDateProfile = calendar.dateProfileGenerators[viewType].buildPrev(currentDateProfile, currentDate);\n break;\n\n case 'NEXT':\n newDateProfile = calendar.dateProfileGenerators[viewType].buildNext(currentDateProfile, currentDate);\n break;\n\n case 'SET_DATE':\n if (!currentDateProfile.activeRange || !rangeContainsMarker(currentDateProfile.currentRange, action.dateMarker)) {\n newDateProfile = calendar.dateProfileGenerators[viewType].build(action.dateMarker, undefined, true // forceToValid\n );\n }\n\n break;\n\n case 'SET_VIEW_TYPE':\n var generator = calendar.dateProfileGenerators[viewType];\n\n if (!generator) {\n throw new Error(viewType ? 'The FullCalendar view \"' + viewType + '\" does not exist. Make sure your plugins are loaded correctly.' : 'No available FullCalendar view plugins.');\n }\n\n newDateProfile = generator.build(action.dateMarker || currentDate, undefined, true // forceToValid\n );\n break;\n }\n\n if (newDateProfile && newDateProfile.isValid && !(currentDateProfile && isDateProfilesEqual(currentDateProfile, newDateProfile))) {\n return newDateProfile;\n } else {\n return currentDateProfile;\n }\n}\n\nfunction reduceCurrentDate(currentDate, action, dateProfile) {\n switch (action.type) {\n case 'PREV':\n case 'NEXT':\n if (!rangeContainsMarker(dateProfile.currentRange, currentDate)) {\n return dateProfile.currentRange.start;\n } else {\n return currentDate;\n }\n\n case 'SET_DATE':\n case 'SET_VIEW_TYPE':\n var newDate = action.dateMarker || currentDate;\n\n if (dateProfile.activeRange && !rangeContainsMarker(dateProfile.activeRange, newDate)) {\n return dateProfile.currentRange.start;\n } else {\n return newDate;\n }\n\n default:\n return currentDate;\n }\n}\n\nfunction reduceDateSelection(currentSelection, action, calendar) {\n switch (action.type) {\n case 'SELECT_DATES':\n return action.selection;\n\n case 'UNSELECT_DATES':\n return null;\n\n default:\n return currentSelection;\n }\n}\n\nfunction reduceSelectedEvent(currentInstanceId, action) {\n switch (action.type) {\n case 'SELECT_EVENT':\n return action.eventInstanceId;\n\n case 'UNSELECT_EVENT':\n return '';\n\n default:\n return currentInstanceId;\n }\n}\n\nfunction reduceEventDrag(currentDrag, action, sources, calendar) {\n switch (action.type) {\n case 'SET_EVENT_DRAG':\n var newDrag = action.state;\n return {\n affectedEvents: newDrag.affectedEvents,\n mutatedEvents: newDrag.mutatedEvents,\n isEvent: newDrag.isEvent,\n origSeg: newDrag.origSeg\n };\n\n case 'UNSET_EVENT_DRAG':\n return null;\n\n default:\n return currentDrag;\n }\n}\n\nfunction reduceEventResize(currentResize, action, sources, calendar) {\n switch (action.type) {\n case 'SET_EVENT_RESIZE':\n var newResize = action.state;\n return {\n affectedEvents: newResize.affectedEvents,\n mutatedEvents: newResize.mutatedEvents,\n isEvent: newResize.isEvent,\n origSeg: newResize.origSeg\n };\n\n case 'UNSET_EVENT_RESIZE':\n return null;\n\n default:\n return currentResize;\n }\n}\n\nfunction computeLoadingLevel(eventSources) {\n var cnt = 0;\n\n for (var sourceId in eventSources) {\n if (eventSources[sourceId].isFetching) {\n cnt++;\n }\n }\n\n return cnt;\n}\n\nvar STANDARD_PROPS = {\n start: null,\n end: null,\n allDay: Boolean\n};\n\nfunction parseDateSpan(raw, dateEnv, defaultDuration) {\n var span = parseOpenDateSpan(raw, dateEnv);\n var range = span.range;\n\n if (!range.start) {\n return null;\n }\n\n if (!range.end) {\n if (defaultDuration == null) {\n return null;\n } else {\n range.end = dateEnv.add(range.start, defaultDuration);\n }\n }\n\n return span;\n}\n/*\nTODO: somehow combine with parseRange?\nWill return null if the start/end props were present but parsed invalidly.\n*/\n\n\nfunction parseOpenDateSpan(raw, dateEnv) {\n var leftovers = {};\n var standardProps = refineProps(raw, STANDARD_PROPS, {}, leftovers);\n var startMeta = standardProps.start ? dateEnv.createMarkerMeta(standardProps.start) : null;\n var endMeta = standardProps.end ? dateEnv.createMarkerMeta(standardProps.end) : null;\n var allDay = standardProps.allDay;\n\n if (allDay == null) {\n allDay = startMeta && startMeta.isTimeUnspecified && (!endMeta || endMeta.isTimeUnspecified);\n } // use this leftover object as the selection object\n\n\n leftovers.range = {\n start: startMeta ? startMeta.marker : null,\n end: endMeta ? endMeta.marker : null\n };\n leftovers.allDay = allDay;\n return leftovers;\n}\n\nfunction isDateSpansEqual(span0, span1) {\n return rangesEqual(span0.range, span1.range) && span0.allDay === span1.allDay && isSpanPropsEqual(span0, span1);\n} // the NON-DATE-RELATED props\n\n\nfunction isSpanPropsEqual(span0, span1) {\n for (var propName in span1) {\n if (propName !== 'range' && propName !== 'allDay') {\n if (span0[propName] !== span1[propName]) {\n return false;\n }\n }\n } // are there any props that span0 has that span1 DOESN'T have?\n // both have range/allDay, so no need to special-case.\n\n\n for (var propName in span0) {\n if (!(propName in span1)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction buildDateSpanApi(span, dateEnv) {\n return {\n start: dateEnv.toDate(span.range.start),\n end: dateEnv.toDate(span.range.end),\n startStr: dateEnv.formatIso(span.range.start, {\n omitTime: span.allDay\n }),\n endStr: dateEnv.formatIso(span.range.end, {\n omitTime: span.allDay\n }),\n allDay: span.allDay\n };\n}\n\nfunction buildDatePointApi(span, dateEnv) {\n return {\n date: dateEnv.toDate(span.range.start),\n dateStr: dateEnv.formatIso(span.range.start, {\n omitTime: span.allDay\n }),\n allDay: span.allDay\n };\n}\n\nfunction fabricateEventRange(dateSpan, eventUiBases, calendar) {\n var def = parseEventDef({\n editable: false\n }, '', // sourceId\n dateSpan.allDay, true, // hasEnd\n calendar);\n return {\n def: def,\n ui: compileEventUi(def, eventUiBases),\n instance: createEventInstance(def.defId, dateSpan.range),\n range: dateSpan.range,\n isStart: true,\n isEnd: true\n };\n}\n\nfunction compileViewDefs(defaultConfigs, overrideConfigs) {\n var hash = {};\n var viewType;\n\n for (viewType in defaultConfigs) {\n ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);\n }\n\n for (viewType in overrideConfigs) {\n ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);\n }\n\n return hash;\n}\n\nfunction ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs) {\n if (hash[viewType]) {\n return hash[viewType];\n }\n\n var viewDef = buildViewDef(viewType, hash, defaultConfigs, overrideConfigs);\n\n if (viewDef) {\n hash[viewType] = viewDef;\n }\n\n return viewDef;\n}\n\nfunction buildViewDef(viewType, hash, defaultConfigs, overrideConfigs) {\n var defaultConfig = defaultConfigs[viewType];\n var overrideConfig = overrideConfigs[viewType];\n\n var queryProp = function queryProp(name) {\n return defaultConfig && defaultConfig[name] !== null ? defaultConfig[name] : overrideConfig && overrideConfig[name] !== null ? overrideConfig[name] : null;\n };\n\n var theClass = queryProp('class');\n var superType = queryProp('superType');\n\n if (!superType && theClass) {\n superType = findViewNameBySubclass(theClass, overrideConfigs) || findViewNameBySubclass(theClass, defaultConfigs);\n }\n\n var superDef = null;\n\n if (superType) {\n if (superType === viewType) {\n throw new Error('Can\\'t have a custom view type that references itself');\n }\n\n superDef = ensureViewDef(superType, hash, defaultConfigs, overrideConfigs);\n }\n\n if (!theClass && superDef) {\n theClass = superDef[\"class\"];\n }\n\n if (!theClass) {\n return null; // don't throw a warning, might be settings for a single-unit view\n }\n\n return {\n type: viewType,\n \"class\": theClass,\n defaults: _assign({}, superDef ? superDef.defaults : {}, defaultConfig ? defaultConfig.options : {}),\n overrides: _assign({}, superDef ? superDef.overrides : {}, overrideConfig ? overrideConfig.options : {})\n };\n}\n\nfunction findViewNameBySubclass(viewSubclass, configs) {\n var superProto = Object.getPrototypeOf(viewSubclass.prototype);\n\n for (var viewType in configs) {\n var parsed = configs[viewType]; // need DIRECT subclass, so instanceof won't do it\n\n if (parsed[\"class\"] && parsed[\"class\"].prototype === superProto) {\n return viewType;\n }\n }\n\n return '';\n}\n\nfunction parseViewConfigs(inputs) {\n return mapHash(inputs, parseViewConfig);\n}\n\nvar VIEW_DEF_PROPS = {\n type: String,\n \"class\": null\n};\n\nfunction parseViewConfig(input) {\n if (typeof input === 'function') {\n input = {\n \"class\": input\n };\n }\n\n var options = {};\n var props = refineProps(input, VIEW_DEF_PROPS, {}, options);\n return {\n superType: props.type,\n \"class\": props[\"class\"],\n options: options\n };\n}\n\nfunction buildViewSpecs(defaultInputs, optionsManager) {\n var defaultConfigs = parseViewConfigs(defaultInputs);\n var overrideConfigs = parseViewConfigs(optionsManager.overrides.views);\n var viewDefs = compileViewDefs(defaultConfigs, overrideConfigs);\n return mapHash(viewDefs, function (viewDef) {\n return buildViewSpec(viewDef, overrideConfigs, optionsManager);\n });\n}\n\nfunction buildViewSpec(viewDef, overrideConfigs, optionsManager) {\n var durationInput = viewDef.overrides.duration || viewDef.defaults.duration || optionsManager.dynamicOverrides.duration || optionsManager.overrides.duration;\n var duration = null;\n var durationUnit = '';\n var singleUnit = '';\n var singleUnitOverrides = {};\n\n if (durationInput) {\n duration = createDuration(durationInput);\n\n if (duration) {\n // valid?\n var denom = greatestDurationDenominator(duration, !getWeeksFromInput(durationInput));\n durationUnit = denom.unit;\n\n if (denom.value === 1) {\n singleUnit = durationUnit;\n singleUnitOverrides = overrideConfigs[durationUnit] ? overrideConfigs[durationUnit].options : {};\n }\n }\n }\n\n var queryButtonText = function queryButtonText(options) {\n var buttonTextMap = options.buttonText || {};\n var buttonTextKey = viewDef.defaults.buttonTextKey;\n\n if (buttonTextKey != null && buttonTextMap[buttonTextKey] != null) {\n return buttonTextMap[buttonTextKey];\n }\n\n if (buttonTextMap[viewDef.type] != null) {\n return buttonTextMap[viewDef.type];\n }\n\n if (buttonTextMap[singleUnit] != null) {\n return buttonTextMap[singleUnit];\n }\n };\n\n return {\n type: viewDef.type,\n \"class\": viewDef[\"class\"],\n duration: duration,\n durationUnit: durationUnit,\n singleUnit: singleUnit,\n options: _assign({}, globalDefaults, viewDef.defaults, optionsManager.dirDefaults, optionsManager.localeDefaults, optionsManager.overrides, singleUnitOverrides, viewDef.overrides, optionsManager.dynamicOverrides),\n buttonTextOverride: queryButtonText(optionsManager.dynamicOverrides) || queryButtonText(optionsManager.overrides) || // constructor-specified buttonText lookup hash takes precedence\n viewDef.overrides.buttonText,\n buttonTextDefault: queryButtonText(optionsManager.localeDefaults) || queryButtonText(optionsManager.dirDefaults) || viewDef.defaults.buttonText || queryButtonText(globalDefaults) || viewDef.type // fall back to given view name\n\n };\n}\n\nvar Toolbar =\n/** @class */\nfunction (_super) {\n __extends(Toolbar, _super);\n\n function Toolbar(context, extraClassName) {\n var _this = _super.call(this, context) || this;\n\n _this._renderLayout = memoizeRendering(_this.renderLayout, _this.unrenderLayout);\n _this._updateTitle = memoizeRendering(_this.updateTitle, null, [_this._renderLayout]);\n _this._updateActiveButton = memoizeRendering(_this.updateActiveButton, null, [_this._renderLayout]);\n _this._updateToday = memoizeRendering(_this.updateToday, null, [_this._renderLayout]);\n _this._updatePrev = memoizeRendering(_this.updatePrev, null, [_this._renderLayout]);\n _this._updateNext = memoizeRendering(_this.updateNext, null, [_this._renderLayout]);\n _this.el = createElement('div', {\n className: 'fc-toolbar ' + extraClassName\n });\n return _this;\n }\n\n Toolbar.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n\n this._renderLayout.unrender(); // should unrender everything else\n\n\n removeElement(this.el);\n };\n\n Toolbar.prototype.render = function (props) {\n this._renderLayout(props.layout);\n\n this._updateTitle(props.title);\n\n this._updateActiveButton(props.activeButton);\n\n this._updateToday(props.isTodayEnabled);\n\n this._updatePrev(props.isPrevEnabled);\n\n this._updateNext(props.isNextEnabled);\n };\n\n Toolbar.prototype.renderLayout = function (layout) {\n var el = this.el;\n this.viewsWithButtons = [];\n appendToElement(el, this.renderSection('left', layout.left));\n appendToElement(el, this.renderSection('center', layout.center));\n appendToElement(el, this.renderSection('right', layout.right));\n };\n\n Toolbar.prototype.unrenderLayout = function () {\n this.el.innerHTML = '';\n };\n\n Toolbar.prototype.renderSection = function (position, buttonStr) {\n var _this = this;\n\n var _a = this,\n theme = _a.theme,\n calendar = _a.calendar;\n\n var optionsManager = calendar.optionsManager;\n var viewSpecs = calendar.viewSpecs;\n var sectionEl = createElement('div', {\n className: 'fc-' + position\n });\n var calendarCustomButtons = optionsManager.computed.customButtons || {};\n var calendarButtonTextOverrides = optionsManager.overrides.buttonText || {};\n var calendarButtonText = optionsManager.computed.buttonText || {};\n\n if (buttonStr) {\n buttonStr.split(' ').forEach(function (buttonGroupStr, i) {\n var groupChildren = [];\n var isOnlyButtons = true;\n var groupEl;\n buttonGroupStr.split(',').forEach(function (buttonName, j) {\n var customButtonProps;\n var viewSpec;\n var buttonClick;\n var buttonIcon; // only one of these will be set\n\n var buttonText; // \"\n\n var buttonInnerHtml;\n var buttonClasses;\n var buttonEl;\n var buttonAriaAttr;\n\n if (buttonName === 'title') {\n groupChildren.push(htmlToElement('

 

')); // we always want it to take up height\n\n isOnlyButtons = false;\n } else {\n if (customButtonProps = calendarCustomButtons[buttonName]) {\n buttonClick = function buttonClick(ev) {\n if (customButtonProps.click) {\n customButtonProps.click.call(buttonEl, ev);\n }\n };\n\n (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) || (buttonIcon = theme.getIconClass(buttonName)) || (buttonText = customButtonProps.text);\n } else if (viewSpec = viewSpecs[buttonName]) {\n _this.viewsWithButtons.push(buttonName);\n\n buttonClick = function buttonClick() {\n calendar.changeView(buttonName);\n };\n\n (buttonText = viewSpec.buttonTextOverride) || (buttonIcon = theme.getIconClass(buttonName)) || (buttonText = viewSpec.buttonTextDefault);\n } else if (calendar[buttonName]) {\n // a calendar method\n buttonClick = function buttonClick() {\n calendar[buttonName]();\n };\n\n (buttonText = calendarButtonTextOverrides[buttonName]) || (buttonIcon = theme.getIconClass(buttonName)) || (buttonText = calendarButtonText[buttonName]); // ^ everything else is considered default\n }\n\n if (buttonClick) {\n buttonClasses = ['fc-' + buttonName + '-button', theme.getClass('button')];\n\n if (buttonText) {\n buttonInnerHtml = htmlEscape(buttonText);\n buttonAriaAttr = '';\n } else if (buttonIcon) {\n buttonInnerHtml = \"\";\n buttonAriaAttr = ' aria-label=\"' + buttonName + '\"';\n }\n\n buttonEl = htmlToElement( // type=\"button\" so that it doesn't submit a form\n '');\n buttonEl.addEventListener('click', buttonClick);\n groupChildren.push(buttonEl);\n }\n }\n });\n\n if (groupChildren.length > 1) {\n groupEl = document.createElement('div');\n var buttonGroupClassName = theme.getClass('buttonGroup');\n\n if (isOnlyButtons && buttonGroupClassName) {\n groupEl.classList.add(buttonGroupClassName);\n }\n\n appendToElement(groupEl, groupChildren);\n sectionEl.appendChild(groupEl);\n } else {\n appendToElement(sectionEl, groupChildren); // 1 or 0 children\n }\n });\n }\n\n return sectionEl;\n };\n\n Toolbar.prototype.updateToday = function (isTodayEnabled) {\n this.toggleButtonEnabled('today', isTodayEnabled);\n };\n\n Toolbar.prototype.updatePrev = function (isPrevEnabled) {\n this.toggleButtonEnabled('prev', isPrevEnabled);\n };\n\n Toolbar.prototype.updateNext = function (isNextEnabled) {\n this.toggleButtonEnabled('next', isNextEnabled);\n };\n\n Toolbar.prototype.updateTitle = function (text) {\n findElements(this.el, 'h2').forEach(function (titleEl) {\n titleEl.innerText = text;\n });\n };\n\n Toolbar.prototype.updateActiveButton = function (buttonName) {\n var className = this.theme.getClass('buttonActive');\n findElements(this.el, 'button').forEach(function (buttonEl) {\n if (buttonName && buttonEl.classList.contains('fc-' + buttonName + '-button')) {\n buttonEl.classList.add(className);\n } else {\n buttonEl.classList.remove(className);\n }\n });\n };\n\n Toolbar.prototype.toggleButtonEnabled = function (buttonName, bool) {\n findElements(this.el, '.fc-' + buttonName + '-button').forEach(function (buttonEl) {\n buttonEl.disabled = !bool;\n });\n };\n\n return Toolbar;\n}(Component);\n\nvar CalendarComponent =\n/** @class */\nfunction (_super) {\n __extends(CalendarComponent, _super);\n\n function CalendarComponent(context, el) {\n var _this = _super.call(this, context) || this;\n\n _this._renderToolbars = memoizeRendering(_this.renderToolbars);\n _this.buildViewPropTransformers = memoize(buildViewPropTransformers);\n _this.el = el;\n prependToElement(el, _this.contentEl = createElement('div', {\n className: 'fc-view-container'\n }));\n var calendar = _this.calendar;\n\n for (var _i = 0, _a = calendar.pluginSystem.hooks.viewContainerModifiers; _i < _a.length; _i++) {\n var modifyViewContainer = _a[_i];\n modifyViewContainer(_this.contentEl, calendar);\n }\n\n _this.toggleElClassNames(true);\n\n _this.computeTitle = memoize(computeTitle);\n _this.parseBusinessHours = memoize(function (input) {\n return parseBusinessHours(input, _this.calendar);\n });\n return _this;\n }\n\n CalendarComponent.prototype.destroy = function () {\n if (this.header) {\n this.header.destroy();\n }\n\n if (this.footer) {\n this.footer.destroy();\n }\n\n if (this.view) {\n this.view.destroy();\n }\n\n removeElement(this.contentEl);\n this.toggleElClassNames(false);\n\n _super.prototype.destroy.call(this);\n };\n\n CalendarComponent.prototype.toggleElClassNames = function (bool) {\n var classList = this.el.classList;\n var dirClassName = 'fc-' + this.opt('dir');\n var themeClassName = this.theme.getClass('widget');\n\n if (bool) {\n classList.add('fc');\n classList.add(dirClassName);\n classList.add(themeClassName);\n } else {\n classList.remove('fc');\n classList.remove(dirClassName);\n classList.remove(themeClassName);\n }\n };\n\n CalendarComponent.prototype.render = function (props) {\n this.freezeHeight();\n var title = this.computeTitle(props.dateProfile, props.viewSpec.options);\n\n this._renderToolbars(props.viewSpec, props.dateProfile, props.currentDate, props.dateProfileGenerator, title);\n\n this.renderView(props, title);\n this.updateSize();\n this.thawHeight();\n };\n\n CalendarComponent.prototype.renderToolbars = function (viewSpec, dateProfile, currentDate, dateProfileGenerator, title) {\n var headerLayout = this.opt('header');\n var footerLayout = this.opt('footer');\n var now = this.calendar.getNow();\n var todayInfo = dateProfileGenerator.build(now);\n var prevInfo = dateProfileGenerator.buildPrev(dateProfile, currentDate);\n var nextInfo = dateProfileGenerator.buildNext(dateProfile, currentDate);\n var toolbarProps = {\n title: title,\n activeButton: viewSpec.type,\n isTodayEnabled: todayInfo.isValid && !rangeContainsMarker(dateProfile.currentRange, now),\n isPrevEnabled: prevInfo.isValid,\n isNextEnabled: nextInfo.isValid\n };\n\n if (headerLayout) {\n if (!this.header) {\n this.header = new Toolbar(this.context, 'fc-header-toolbar');\n prependToElement(this.el, this.header.el);\n }\n\n this.header.receiveProps(_assign({\n layout: headerLayout\n }, toolbarProps));\n } else if (this.header) {\n this.header.destroy();\n this.header = null;\n }\n\n if (footerLayout) {\n if (!this.footer) {\n this.footer = new Toolbar(this.context, 'fc-footer-toolbar');\n appendToElement(this.el, this.footer.el);\n }\n\n this.footer.receiveProps(_assign({\n layout: footerLayout\n }, toolbarProps));\n } else if (this.footer) {\n this.footer.destroy();\n this.footer = null;\n }\n };\n\n CalendarComponent.prototype.renderView = function (props, title) {\n var view = this.view;\n var viewSpec = props.viewSpec,\n dateProfileGenerator = props.dateProfileGenerator;\n\n if (!view || view.viewSpec !== viewSpec) {\n if (view) {\n view.destroy();\n }\n\n view = this.view = new viewSpec['class']({\n calendar: this.calendar,\n view: null,\n dateEnv: this.dateEnv,\n theme: this.theme,\n options: viewSpec.options\n }, viewSpec, dateProfileGenerator, this.contentEl);\n } else {\n view.addScroll(view.queryScroll());\n }\n\n view.title = title; // for the API\n\n var viewProps = {\n dateProfile: props.dateProfile,\n businessHours: this.parseBusinessHours(viewSpec.options.businessHours),\n eventStore: props.eventStore,\n eventUiBases: props.eventUiBases,\n dateSelection: props.dateSelection,\n eventSelection: props.eventSelection,\n eventDrag: props.eventDrag,\n eventResize: props.eventResize\n };\n var transformers = this.buildViewPropTransformers(this.calendar.pluginSystem.hooks.viewPropsTransformers);\n\n for (var _i = 0, transformers_1 = transformers; _i < transformers_1.length; _i++) {\n var transformer = transformers_1[_i];\n\n _assign(viewProps, transformer.transform(viewProps, viewSpec, props, view));\n }\n\n view.receiveProps(viewProps);\n }; // Sizing\n // -----------------------------------------------------------------------------------------------------------------\n\n\n CalendarComponent.prototype.updateSize = function (isResize) {\n if (isResize === void 0) {\n isResize = false;\n }\n\n var view = this.view;\n\n if (isResize) {\n view.addScroll(view.queryScroll());\n }\n\n if (isResize || this.isHeightAuto == null) {\n this.computeHeightVars();\n }\n\n view.updateSize(isResize, this.viewHeight, this.isHeightAuto);\n view.updateNowIndicator(); // we need to guarantee this will run after updateSize\n\n view.popScroll(isResize);\n };\n\n CalendarComponent.prototype.computeHeightVars = function () {\n var calendar = this.calendar; // yuck. need to handle dynamic options\n\n var heightInput = calendar.opt('height');\n var contentHeightInput = calendar.opt('contentHeight');\n this.isHeightAuto = heightInput === 'auto' || contentHeightInput === 'auto';\n\n if (typeof contentHeightInput === 'number') {\n // exists and not 'auto'\n this.viewHeight = contentHeightInput;\n } else if (typeof contentHeightInput === 'function') {\n // exists and is a function\n this.viewHeight = contentHeightInput();\n } else if (typeof heightInput === 'number') {\n // exists and not 'auto'\n this.viewHeight = heightInput - this.queryToolbarsHeight();\n } else if (typeof heightInput === 'function') {\n // exists and is a function\n this.viewHeight = heightInput() - this.queryToolbarsHeight();\n } else if (heightInput === 'parent') {\n // set to height of parent element\n var parentEl = this.el.parentNode;\n this.viewHeight = parentEl.getBoundingClientRect().height - this.queryToolbarsHeight();\n } else {\n this.viewHeight = Math.round(this.contentEl.getBoundingClientRect().width / Math.max(calendar.opt('aspectRatio'), .5));\n }\n };\n\n CalendarComponent.prototype.queryToolbarsHeight = function () {\n var height = 0;\n\n if (this.header) {\n height += computeHeightAndMargins(this.header.el);\n }\n\n if (this.footer) {\n height += computeHeightAndMargins(this.footer.el);\n }\n\n return height;\n }; // Height \"Freezing\"\n // -----------------------------------------------------------------------------------------------------------------\n\n\n CalendarComponent.prototype.freezeHeight = function () {\n applyStyle(this.el, {\n height: this.el.getBoundingClientRect().height,\n overflow: 'hidden'\n });\n };\n\n CalendarComponent.prototype.thawHeight = function () {\n applyStyle(this.el, {\n height: '',\n overflow: ''\n });\n };\n\n return CalendarComponent;\n}(Component); // Title and Date Formatting\n// -----------------------------------------------------------------------------------------------------------------\n// Computes what the title at the top of the calendar should be for this view\n\n\nfunction computeTitle(dateProfile, viewOptions) {\n var range; // for views that span a large unit of time, show the proper interval, ignoring stray days before and after\n\n if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) {\n range = dateProfile.currentRange;\n } else {\n // for day units or smaller, use the actual day range\n range = dateProfile.activeRange;\n }\n\n return this.dateEnv.formatRange(range.start, range.end, createFormatter(viewOptions.titleFormat || computeTitleFormat(dateProfile), viewOptions.titleRangeSeparator), {\n isEndExclusive: dateProfile.isRangeAllDay\n });\n} // Generates the format string that should be used to generate the title for the current date range.\n// Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.\n\n\nfunction computeTitleFormat(dateProfile) {\n var currentRangeUnit = dateProfile.currentRangeUnit;\n\n if (currentRangeUnit === 'year') {\n return {\n year: 'numeric'\n };\n } else if (currentRangeUnit === 'month') {\n return {\n year: 'numeric',\n month: 'long'\n }; // like \"September 2014\"\n } else {\n var days = diffWholeDays(dateProfile.currentRange.start, dateProfile.currentRange.end);\n\n if (days !== null && days > 1) {\n // multi-day range. shorter, like \"Sep 9 - 10 2014\"\n return {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n };\n } else {\n // one day. longer, like \"September 9 2014\"\n return {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n };\n }\n }\n} // Plugin\n// -----------------------------------------------------------------------------------------------------------------\n\n\nfunction buildViewPropTransformers(theClasses) {\n return theClasses.map(function (theClass) {\n return new theClass();\n });\n}\n\nvar Interaction =\n/** @class */\nfunction () {\n function Interaction(settings) {\n this.component = settings.component;\n }\n\n Interaction.prototype.destroy = function () {};\n\n return Interaction;\n}();\n\nfunction parseInteractionSettings(component, input) {\n return {\n component: component,\n el: input.el,\n useEventCenter: input.useEventCenter != null ? input.useEventCenter : true\n };\n}\n\nfunction interactionSettingsToStore(settings) {\n var _a;\n\n return _a = {}, _a[settings.component.uid] = settings, _a;\n} // global state\n\n\nvar interactionSettingsStore = {};\n/*\nDetects when the user clicks on an event within a DateComponent\n*/\n\nvar EventClicking =\n/** @class */\nfunction (_super) {\n __extends(EventClicking, _super);\n\n function EventClicking(settings) {\n var _this = _super.call(this, settings) || this;\n\n _this.handleSegClick = function (ev, segEl) {\n var component = _this.component;\n var seg = getElSeg(segEl);\n\n if (seg && // might be the
surrounding the more link\n component.isValidSegDownEl(ev.target)) {\n // our way to simulate a link click for elements that can't be tags\n // grab before trigger fired in case trigger trashes DOM thru rerendering\n var hasUrlContainer = elementClosest(ev.target, '.fc-has-url');\n var url = hasUrlContainer ? hasUrlContainer.querySelector('a[href]').href : '';\n component.publiclyTrigger('eventClick', [{\n el: segEl,\n event: new EventApi(component.calendar, seg.eventRange.def, seg.eventRange.instance),\n jsEvent: ev,\n view: component.view\n }]);\n\n if (url && !ev.defaultPrevented) {\n window.location.href = url;\n }\n }\n };\n\n var component = settings.component;\n _this.destroy = listenBySelector(component.el, 'click', component.fgSegSelector + ',' + component.bgSegSelector, _this.handleSegClick);\n return _this;\n }\n\n return EventClicking;\n}(Interaction);\n/*\nTriggers events and adds/removes core classNames when the user's pointer\nenters/leaves event-elements of a component.\n*/\n\n\nvar EventHovering =\n/** @class */\nfunction (_super) {\n __extends(EventHovering, _super);\n\n function EventHovering(settings) {\n var _this = _super.call(this, settings) || this; // for simulating an eventMouseLeave when the event el is destroyed while mouse is over it\n\n\n _this.handleEventElRemove = function (el) {\n if (el === _this.currentSegEl) {\n _this.handleSegLeave(null, _this.currentSegEl);\n }\n };\n\n _this.handleSegEnter = function (ev, segEl) {\n if (getElSeg(segEl)) {\n // TODO: better way to make sure not hovering over more+ link or its wrapper\n segEl.classList.add('fc-allow-mouse-resize');\n _this.currentSegEl = segEl;\n\n _this.triggerEvent('eventMouseEnter', ev, segEl);\n }\n };\n\n _this.handleSegLeave = function (ev, segEl) {\n if (_this.currentSegEl) {\n segEl.classList.remove('fc-allow-mouse-resize');\n _this.currentSegEl = null;\n\n _this.triggerEvent('eventMouseLeave', ev, segEl);\n }\n };\n\n var component = settings.component;\n _this.removeHoverListeners = listenToHoverBySelector(component.el, component.fgSegSelector + ',' + component.bgSegSelector, _this.handleSegEnter, _this.handleSegLeave);\n component.calendar.on('eventElRemove', _this.handleEventElRemove);\n return _this;\n }\n\n EventHovering.prototype.destroy = function () {\n this.removeHoverListeners();\n this.component.calendar.off('eventElRemove', this.handleEventElRemove);\n };\n\n EventHovering.prototype.triggerEvent = function (publicEvName, ev, segEl) {\n var component = this.component;\n var seg = getElSeg(segEl);\n\n if (!ev || component.isValidSegDownEl(ev.target)) {\n component.publiclyTrigger(publicEvName, [{\n el: segEl,\n event: new EventApi(this.component.calendar, seg.eventRange.def, seg.eventRange.instance),\n jsEvent: ev,\n view: component.view\n }]);\n }\n };\n\n return EventHovering;\n}(Interaction);\n\nvar StandardTheme =\n/** @class */\nfunction (_super) {\n __extends(StandardTheme, _super);\n\n function StandardTheme() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n return StandardTheme;\n}(Theme);\n\nStandardTheme.prototype.classes = {\n widget: 'fc-unthemed',\n widgetHeader: 'fc-widget-header',\n widgetContent: 'fc-widget-content',\n buttonGroup: 'fc-button-group',\n button: 'fc-button fc-button-primary',\n buttonActive: 'fc-button-active',\n popoverHeader: 'fc-widget-header',\n popoverContent: 'fc-widget-content',\n // day grid\n headerRow: 'fc-widget-header',\n dayRow: 'fc-widget-content',\n // list view\n listView: 'fc-widget-content'\n};\nStandardTheme.prototype.baseIconClass = 'fc-icon';\nStandardTheme.prototype.iconClasses = {\n close: 'fc-icon-x',\n prev: 'fc-icon-chevron-left',\n next: 'fc-icon-chevron-right',\n prevYear: 'fc-icon-chevrons-left',\n nextYear: 'fc-icon-chevrons-right'\n};\nStandardTheme.prototype.iconOverrideOption = 'buttonIcons';\nStandardTheme.prototype.iconOverrideCustomButtonOption = 'icon';\nStandardTheme.prototype.iconOverridePrefix = 'fc-icon-';\n\nvar Calendar =\n/** @class */\nfunction () {\n function Calendar(el, overrides) {\n var _this = this;\n\n this.parseRawLocales = memoize(parseRawLocales);\n this.buildLocale = memoize(buildLocale);\n this.buildDateEnv = memoize(buildDateEnv);\n this.buildTheme = memoize(buildTheme);\n this.buildEventUiSingleBase = memoize(this._buildEventUiSingleBase);\n this.buildSelectionConfig = memoize(this._buildSelectionConfig);\n this.buildEventUiBySource = memoizeOutput(buildEventUiBySource, isPropsEqual);\n this.buildEventUiBases = memoize(buildEventUiBases);\n this.interactionsStore = {};\n this.actionQueue = [];\n this.isReducing = false; // isDisplaying: boolean = false // installed in DOM? accepting renders?\n\n this.needsRerender = false; // needs a render?\n\n this.needsFullRerender = false;\n this.isRendering = false; // currently in the executeRender function?\n\n this.renderingPauseDepth = 0;\n this.buildDelayedRerender = memoize(buildDelayedRerender);\n this.afterSizingTriggers = {};\n this.isViewUpdated = false;\n this.isDatesUpdated = false;\n this.isEventsUpdated = false;\n this.el = el;\n this.optionsManager = new OptionsManager(overrides || {});\n this.pluginSystem = new PluginSystem(); // only do once. don't do in handleOptions. because can't remove plugins\n\n this.addPluginInputs(this.optionsManager.computed.plugins || []);\n this.handleOptions(this.optionsManager.computed);\n this.publiclyTrigger('_init'); // for tests\n\n this.hydrate();\n this.calendarInteractions = this.pluginSystem.hooks.calendarInteractions.map(function (calendarInteractionClass) {\n return new calendarInteractionClass(_this);\n });\n }\n\n Calendar.prototype.addPluginInputs = function (pluginInputs) {\n var pluginDefs = refinePluginDefs(pluginInputs);\n\n for (var _i = 0, pluginDefs_1 = pluginDefs; _i < pluginDefs_1.length; _i++) {\n var pluginDef = pluginDefs_1[_i];\n this.pluginSystem.add(pluginDef);\n }\n };\n\n Object.defineProperty(Calendar.prototype, \"view\", {\n // public API\n get: function get() {\n return this.component ? this.component.view : null;\n },\n enumerable: true,\n configurable: true\n }); // Public API for rendering\n // -----------------------------------------------------------------------------------------------------------------\n\n Calendar.prototype.render = function () {\n if (!this.component) {\n this.renderableEventStore = createEmptyEventStore();\n this.bindHandlers();\n this.executeRender();\n } else {\n this.requestRerender(true);\n }\n };\n\n Calendar.prototype.destroy = function () {\n if (this.component) {\n this.unbindHandlers();\n this.component.destroy(); // don't null-out. in case API needs access\n\n this.component = null; // umm ???\n\n for (var _i = 0, _a = this.calendarInteractions; _i < _a.length; _i++) {\n var interaction = _a[_i];\n interaction.destroy();\n }\n\n this.publiclyTrigger('_destroyed');\n }\n }; // Handlers\n // -----------------------------------------------------------------------------------------------------------------\n\n\n Calendar.prototype.bindHandlers = function () {\n var _this = this; // event delegation for nav links\n\n\n this.removeNavLinkListener = listenBySelector(this.el, 'click', 'a[data-goto]', function (ev, anchorEl) {\n var gotoOptions = anchorEl.getAttribute('data-goto');\n gotoOptions = gotoOptions ? JSON.parse(gotoOptions) : {};\n var dateEnv = _this.dateEnv;\n var dateMarker = dateEnv.createMarker(gotoOptions.date);\n var viewType = gotoOptions.type; // property like \"navLinkDayClick\". might be a string or a function\n\n var customAction = _this.viewOpt('navLink' + capitaliseFirstLetter(viewType) + 'Click');\n\n if (typeof customAction === 'function') {\n customAction(dateEnv.toDate(dateMarker), ev);\n } else {\n if (typeof customAction === 'string') {\n viewType = customAction;\n }\n\n _this.zoomTo(dateMarker, viewType);\n }\n });\n\n if (this.opt('handleWindowResize')) {\n window.addEventListener('resize', this.windowResizeProxy = debounce( // prevents rapid calls\n this.windowResize.bind(this), this.opt('windowResizeDelay')));\n }\n };\n\n Calendar.prototype.unbindHandlers = function () {\n this.removeNavLinkListener();\n\n if (this.windowResizeProxy) {\n window.removeEventListener('resize', this.windowResizeProxy);\n this.windowResizeProxy = null;\n }\n }; // Dispatcher\n // -----------------------------------------------------------------------------------------------------------------\n\n\n Calendar.prototype.hydrate = function () {\n var _this = this;\n\n this.state = this.buildInitialState();\n var rawSources = this.opt('eventSources') || [];\n var singleRawSource = this.opt('events');\n var sources = []; // parsed\n\n if (singleRawSource) {\n rawSources.unshift(singleRawSource);\n }\n\n for (var _i = 0, rawSources_1 = rawSources; _i < rawSources_1.length; _i++) {\n var rawSource = rawSources_1[_i];\n var source = parseEventSource(rawSource, this);\n\n if (source) {\n sources.push(source);\n }\n }\n\n this.batchRendering(function () {\n _this.dispatch({\n type: 'INIT'\n }); // pass in sources here?\n\n\n _this.dispatch({\n type: 'ADD_EVENT_SOURCES',\n sources: sources\n });\n\n _this.dispatch({\n type: 'SET_VIEW_TYPE',\n viewType: _this.opt('defaultView') || _this.pluginSystem.hooks.defaultView\n });\n });\n };\n\n Calendar.prototype.buildInitialState = function () {\n return {\n viewType: null,\n loadingLevel: 0,\n eventSourceLoadingLevel: 0,\n currentDate: this.getInitialDate(),\n dateProfile: null,\n eventSources: {},\n eventStore: createEmptyEventStore(),\n dateSelection: null,\n eventSelection: '',\n eventDrag: null,\n eventResize: null\n };\n };\n\n Calendar.prototype.dispatch = function (action) {\n this.actionQueue.push(action);\n\n if (!this.isReducing) {\n this.isReducing = true;\n var oldState = this.state;\n\n while (this.actionQueue.length) {\n this.state = this.reduce(this.state, this.actionQueue.shift(), this);\n }\n\n var newState = this.state;\n this.isReducing = false;\n\n if (!oldState.loadingLevel && newState.loadingLevel) {\n this.publiclyTrigger('loading', [true]);\n } else if (oldState.loadingLevel && !newState.loadingLevel) {\n this.publiclyTrigger('loading', [false]);\n }\n\n var view = this.component && this.component.view;\n\n if (oldState.eventStore !== newState.eventStore || this.needsFullRerender) {\n if (oldState.eventStore) {\n this.isEventsUpdated = true;\n }\n }\n\n if (oldState.dateProfile !== newState.dateProfile || this.needsFullRerender) {\n if (oldState.dateProfile && view) {\n // why would view be null!?\n this.publiclyTrigger('datesDestroy', [{\n view: view,\n el: view.el\n }]);\n }\n\n this.isDatesUpdated = true;\n }\n\n if (oldState.viewType !== newState.viewType || this.needsFullRerender) {\n if (oldState.viewType && view) {\n // why would view be null!?\n this.publiclyTrigger('viewSkeletonDestroy', [{\n view: view,\n el: view.el\n }]);\n }\n\n this.isViewUpdated = true;\n }\n\n this.requestRerender();\n }\n };\n\n Calendar.prototype.reduce = function (state, action, calendar) {\n return reduce(state, action, calendar);\n }; // Render Queue\n // -----------------------------------------------------------------------------------------------------------------\n\n\n Calendar.prototype.requestRerender = function (needsFull) {\n if (needsFull === void 0) {\n needsFull = false;\n }\n\n this.needsRerender = true;\n this.needsFullRerender = this.needsFullRerender || needsFull;\n this.delayedRerender(); // will call a debounced-version of tryRerender\n };\n\n Calendar.prototype.tryRerender = function () {\n if (this.component && // must be accepting renders\n this.needsRerender && // indicates that a rerender was requested\n !this.renderingPauseDepth && // not paused\n !this.isRendering // not currently in the render loop\n ) {\n this.executeRender();\n }\n };\n\n Calendar.prototype.batchRendering = function (func) {\n this.renderingPauseDepth++;\n func();\n this.renderingPauseDepth--;\n\n if (this.needsRerender) {\n this.requestRerender();\n }\n }; // Rendering\n // -----------------------------------------------------------------------------------------------------------------\n\n\n Calendar.prototype.executeRender = function () {\n var needsFullRerender = this.needsFullRerender; // save before clearing\n // clear these BEFORE the render so that new values will accumulate during render\n\n this.needsRerender = false;\n this.needsFullRerender = false;\n this.isRendering = true;\n this.renderComponent(needsFullRerender);\n this.isRendering = false; // received a rerender request while rendering\n\n if (this.needsRerender) {\n this.delayedRerender();\n }\n };\n /*\n don't call this directly. use executeRender instead\n */\n\n\n Calendar.prototype.renderComponent = function (needsFull) {\n var _a = this,\n state = _a.state,\n component = _a.component;\n\n var viewType = state.viewType;\n var viewSpec = this.viewSpecs[viewType];\n var savedScroll = needsFull && component ? component.view.queryScroll() : null;\n\n if (!viewSpec) {\n throw new Error(\"View type \\\"\" + viewType + \"\\\" is not valid\");\n } // if event sources are still loading and progressive rendering hasn't been enabled,\n // keep rendering the last fully loaded set of events\n\n\n var renderableEventStore = this.renderableEventStore = state.eventSourceLoadingLevel && !this.opt('progressiveEventRendering') ? this.renderableEventStore : state.eventStore;\n var eventUiSingleBase = this.buildEventUiSingleBase(viewSpec.options);\n var eventUiBySource = this.buildEventUiBySource(state.eventSources);\n var eventUiBases = this.eventUiBases = this.buildEventUiBases(renderableEventStore.defs, eventUiSingleBase, eventUiBySource);\n\n if (needsFull || !component) {\n if (component) {\n component.freezeHeight(); // next component will unfreeze it\n\n component.destroy();\n }\n\n component = this.component = new CalendarComponent({\n calendar: this,\n view: null,\n dateEnv: this.dateEnv,\n theme: this.theme,\n options: this.optionsManager.computed\n }, this.el);\n this.isViewUpdated = true;\n this.isDatesUpdated = true;\n this.isEventsUpdated = true;\n }\n\n component.receiveProps(_assign({}, state, {\n viewSpec: viewSpec,\n dateProfile: state.dateProfile,\n dateProfileGenerator: this.dateProfileGenerators[viewType],\n eventStore: renderableEventStore,\n eventUiBases: eventUiBases,\n dateSelection: state.dateSelection,\n eventSelection: state.eventSelection,\n eventDrag: state.eventDrag,\n eventResize: state.eventResize\n }));\n\n if (savedScroll) {\n component.view.applyScroll(savedScroll, false);\n }\n\n if (this.isViewUpdated) {\n this.isViewUpdated = false;\n this.publiclyTrigger('viewSkeletonRender', [{\n view: component.view,\n el: component.view.el\n }]);\n }\n\n if (this.isDatesUpdated) {\n this.isDatesUpdated = false;\n this.publiclyTrigger('datesRender', [{\n view: component.view,\n el: component.view.el\n }]);\n }\n\n if (this.isEventsUpdated) {\n this.isEventsUpdated = false;\n }\n\n this.releaseAfterSizingTriggers();\n }; // Options\n // -----------------------------------------------------------------------------------------------------------------\n\n\n Calendar.prototype.setOption = function (name, val) {\n var _a;\n\n this.mutateOptions((_a = {}, _a[name] = val, _a), [], true);\n };\n\n Calendar.prototype.getOption = function (name) {\n return this.optionsManager.computed[name];\n };\n\n Calendar.prototype.opt = function (name) {\n return this.optionsManager.computed[name];\n };\n\n Calendar.prototype.viewOpt = function (name) {\n return this.viewOpts()[name];\n };\n\n Calendar.prototype.viewOpts = function () {\n return this.viewSpecs[this.state.viewType].options;\n };\n /*\n handles option changes (like a diff)\n */\n\n\n Calendar.prototype.mutateOptions = function (updates, removals, isDynamic, deepEqual) {\n var _this = this;\n\n var changeHandlers = this.pluginSystem.hooks.optionChangeHandlers;\n var normalUpdates = {};\n var specialUpdates = {};\n var oldDateEnv = this.dateEnv; // do this before handleOptions\n\n var isTimeZoneDirty = false;\n var isSizeDirty = false;\n var anyDifficultOptions = Boolean(removals.length);\n\n for (var name_1 in updates) {\n if (changeHandlers[name_1]) {\n specialUpdates[name_1] = updates[name_1];\n } else {\n normalUpdates[name_1] = updates[name_1];\n }\n }\n\n for (var name_2 in normalUpdates) {\n if (/^(height|contentHeight|aspectRatio)$/.test(name_2)) {\n isSizeDirty = true;\n } else if (/^(defaultDate|defaultView)$/.test(name_2)) ;else {\n anyDifficultOptions = true;\n\n if (name_2 === 'timeZone') {\n isTimeZoneDirty = true;\n }\n }\n }\n\n this.optionsManager.mutate(normalUpdates, removals, isDynamic);\n\n if (anyDifficultOptions) {\n this.handleOptions(this.optionsManager.computed);\n this.needsFullRerender = true;\n }\n\n this.batchRendering(function () {\n if (anyDifficultOptions) {\n if (isTimeZoneDirty) {\n _this.dispatch({\n type: 'CHANGE_TIMEZONE',\n oldDateEnv: oldDateEnv\n });\n }\n /* HACK\n has the same effect as calling this.requestRerender(true)\n but recomputes the state's dateProfile\n */\n\n\n _this.dispatch({\n type: 'SET_VIEW_TYPE',\n viewType: _this.state.viewType\n });\n } else if (isSizeDirty) {\n _this.updateSize();\n } // special updates\n\n\n if (deepEqual) {\n for (var name_3 in specialUpdates) {\n changeHandlers[name_3](specialUpdates[name_3], _this, deepEqual);\n }\n }\n });\n };\n /*\n rebuilds things based off of a complete set of refined options\n */\n\n\n Calendar.prototype.handleOptions = function (options) {\n var _this = this;\n\n var pluginHooks = this.pluginSystem.hooks;\n this.defaultAllDayEventDuration = createDuration(options.defaultAllDayEventDuration);\n this.defaultTimedEventDuration = createDuration(options.defaultTimedEventDuration);\n this.delayedRerender = this.buildDelayedRerender(options.rerenderDelay);\n this.theme = this.buildTheme(options);\n var available = this.parseRawLocales(options.locales);\n this.availableRawLocales = available.map;\n var locale = this.buildLocale(options.locale || available.defaultCode, available.map);\n this.dateEnv = this.buildDateEnv(locale, options.timeZone, pluginHooks.namedTimeZonedImpl, options.firstDay, options.weekNumberCalculation, options.weekLabel, pluginHooks.cmdFormatter);\n this.selectionConfig = this.buildSelectionConfig(options); // needs dateEnv. do after :(\n // ineffecient to do every time?\n\n this.viewSpecs = buildViewSpecs(pluginHooks.views, this.optionsManager); // ineffecient to do every time?\n\n this.dateProfileGenerators = mapHash(this.viewSpecs, function (viewSpec) {\n return new viewSpec[\"class\"].prototype.dateProfileGeneratorClass(viewSpec, _this);\n });\n };\n\n Calendar.prototype.getAvailableLocaleCodes = function () {\n return Object.keys(this.availableRawLocales);\n };\n\n Calendar.prototype._buildSelectionConfig = function (rawOpts) {\n return processScopedUiProps('select', rawOpts, this);\n };\n\n Calendar.prototype._buildEventUiSingleBase = function (rawOpts) {\n if (rawOpts.editable) {\n // so 'editable' affected events\n rawOpts = _assign({}, rawOpts, {\n eventEditable: true\n });\n }\n\n return processScopedUiProps('event', rawOpts, this);\n }; // Trigger\n // -----------------------------------------------------------------------------------------------------------------\n\n\n Calendar.prototype.hasPublicHandlers = function (name) {\n return this.hasHandlers(name) || this.opt(name); // handler specified in options\n };\n\n Calendar.prototype.publiclyTrigger = function (name, args) {\n var optHandler = this.opt(name);\n this.triggerWith(name, this, args);\n\n if (optHandler) {\n return optHandler.apply(this, args);\n }\n };\n\n Calendar.prototype.publiclyTriggerAfterSizing = function (name, args) {\n var afterSizingTriggers = this.afterSizingTriggers;\n (afterSizingTriggers[name] || (afterSizingTriggers[name] = [])).push(args);\n };\n\n Calendar.prototype.releaseAfterSizingTriggers = function () {\n var afterSizingTriggers = this.afterSizingTriggers;\n\n for (var name_4 in afterSizingTriggers) {\n for (var _i = 0, _a = afterSizingTriggers[name_4]; _i < _a.length; _i++) {\n var args = _a[_i];\n this.publiclyTrigger(name_4, args);\n }\n }\n\n this.afterSizingTriggers = {};\n }; // View\n // -----------------------------------------------------------------------------------------------------------------\n // Returns a boolean about whether the view is okay to instantiate at some point\n\n\n Calendar.prototype.isValidViewType = function (viewType) {\n return Boolean(this.viewSpecs[viewType]);\n };\n\n Calendar.prototype.changeView = function (viewType, dateOrRange) {\n var dateMarker = null;\n\n if (dateOrRange) {\n if (dateOrRange.start && dateOrRange.end) {\n // a range\n this.optionsManager.mutate({\n visibleRange: dateOrRange\n }, []); // will not rerender\n\n this.handleOptions(this.optionsManager.computed); // ...but yuck\n } else {\n // a date\n dateMarker = this.dateEnv.createMarker(dateOrRange); // just like gotoDate\n }\n }\n\n this.unselect();\n this.dispatch({\n type: 'SET_VIEW_TYPE',\n viewType: viewType,\n dateMarker: dateMarker\n });\n }; // Forces navigation to a view for the given date.\n // `viewType` can be a specific view name or a generic one like \"week\" or \"day\".\n // needs to change\n\n\n Calendar.prototype.zoomTo = function (dateMarker, viewType) {\n var spec;\n viewType = viewType || 'day'; // day is default zoom\n\n spec = this.viewSpecs[viewType] || this.getUnitViewSpec(viewType);\n this.unselect();\n\n if (spec) {\n this.dispatch({\n type: 'SET_VIEW_TYPE',\n viewType: spec.type,\n dateMarker: dateMarker\n });\n } else {\n this.dispatch({\n type: 'SET_DATE',\n dateMarker: dateMarker\n });\n }\n }; // Given a duration singular unit, like \"week\" or \"day\", finds a matching view spec.\n // Preference is given to views that have corresponding buttons.\n\n\n Calendar.prototype.getUnitViewSpec = function (unit) {\n var component = this.component;\n var viewTypes = [];\n var i;\n var spec; // put views that have buttons first. there will be duplicates, but oh\n\n if (component.header) {\n viewTypes.push.apply(viewTypes, component.header.viewsWithButtons);\n }\n\n if (component.footer) {\n viewTypes.push.apply(viewTypes, component.footer.viewsWithButtons);\n }\n\n for (var viewType in this.viewSpecs) {\n viewTypes.push(viewType);\n }\n\n for (i = 0; i < viewTypes.length; i++) {\n spec = this.viewSpecs[viewTypes[i]];\n\n if (spec) {\n if (spec.singleUnit === unit) {\n return spec;\n }\n }\n }\n }; // Current Date\n // -----------------------------------------------------------------------------------------------------------------\n\n\n Calendar.prototype.getInitialDate = function () {\n var defaultDateInput = this.opt('defaultDate'); // compute the initial ambig-timezone date\n\n if (defaultDateInput != null) {\n return this.dateEnv.createMarker(defaultDateInput);\n } else {\n return this.getNow(); // getNow already returns unzoned\n }\n };\n\n Calendar.prototype.prev = function () {\n this.unselect();\n this.dispatch({\n type: 'PREV'\n });\n };\n\n Calendar.prototype.next = function () {\n this.unselect();\n this.dispatch({\n type: 'NEXT'\n });\n };\n\n Calendar.prototype.prevYear = function () {\n this.unselect();\n this.dispatch({\n type: 'SET_DATE',\n dateMarker: this.dateEnv.addYears(this.state.currentDate, -1)\n });\n };\n\n Calendar.prototype.nextYear = function () {\n this.unselect();\n this.dispatch({\n type: 'SET_DATE',\n dateMarker: this.dateEnv.addYears(this.state.currentDate, 1)\n });\n };\n\n Calendar.prototype.today = function () {\n this.unselect();\n this.dispatch({\n type: 'SET_DATE',\n dateMarker: this.getNow()\n });\n };\n\n Calendar.prototype.gotoDate = function (zonedDateInput) {\n this.unselect();\n this.dispatch({\n type: 'SET_DATE',\n dateMarker: this.dateEnv.createMarker(zonedDateInput)\n });\n };\n\n Calendar.prototype.incrementDate = function (deltaInput) {\n var delta = createDuration(deltaInput);\n\n if (delta) {\n // else, warn about invalid input?\n this.unselect();\n this.dispatch({\n type: 'SET_DATE',\n dateMarker: this.dateEnv.add(this.state.currentDate, delta)\n });\n }\n }; // for external API\n\n\n Calendar.prototype.getDate = function () {\n return this.dateEnv.toDate(this.state.currentDate);\n }; // Date Formatting Utils\n // -----------------------------------------------------------------------------------------------------------------\n\n\n Calendar.prototype.formatDate = function (d, formatter) {\n var dateEnv = this.dateEnv;\n return dateEnv.format(dateEnv.createMarker(d), createFormatter(formatter));\n }; // `settings` is for formatter AND isEndExclusive\n\n\n Calendar.prototype.formatRange = function (d0, d1, settings) {\n var dateEnv = this.dateEnv;\n return dateEnv.formatRange(dateEnv.createMarker(d0), dateEnv.createMarker(d1), createFormatter(settings, this.opt('defaultRangeSeparator')), settings);\n };\n\n Calendar.prototype.formatIso = function (d, omitTime) {\n var dateEnv = this.dateEnv;\n return dateEnv.formatIso(dateEnv.createMarker(d), {\n omitTime: omitTime\n });\n }; // Sizing\n // -----------------------------------------------------------------------------------------------------------------\n\n\n Calendar.prototype.windowResize = function (ev) {\n if (!this.isHandlingWindowResize && this.component && // why?\n ev.target === window // not a jqui resize event\n ) {\n this.isHandlingWindowResize = true;\n this.updateSize();\n this.publiclyTrigger('windowResize', [this.view]);\n this.isHandlingWindowResize = false;\n }\n };\n\n Calendar.prototype.updateSize = function () {\n if (this.component) {\n // when?\n this.component.updateSize(true);\n }\n }; // Component Registration\n // -----------------------------------------------------------------------------------------------------------------\n\n\n Calendar.prototype.registerInteractiveComponent = function (component, settingsInput) {\n var settings = parseInteractionSettings(component, settingsInput);\n var DEFAULT_INTERACTIONS = [EventClicking, EventHovering];\n var interactionClasses = DEFAULT_INTERACTIONS.concat(this.pluginSystem.hooks.componentInteractions);\n var interactions = interactionClasses.map(function (interactionClass) {\n return new interactionClass(settings);\n });\n this.interactionsStore[component.uid] = interactions;\n interactionSettingsStore[component.uid] = settings;\n };\n\n Calendar.prototype.unregisterInteractiveComponent = function (component) {\n for (var _i = 0, _a = this.interactionsStore[component.uid]; _i < _a.length; _i++) {\n var listener = _a[_i];\n listener.destroy();\n }\n\n delete this.interactionsStore[component.uid];\n delete interactionSettingsStore[component.uid];\n }; // Date Selection / Event Selection / DayClick\n // -----------------------------------------------------------------------------------------------------------------\n // this public method receives start/end dates in any format, with any timezone\n // NOTE: args were changed from v3\n\n\n Calendar.prototype.select = function (dateOrObj, endDate) {\n var selectionInput;\n\n if (endDate == null) {\n if (dateOrObj.start != null) {\n selectionInput = dateOrObj;\n } else {\n selectionInput = {\n start: dateOrObj,\n end: null\n };\n }\n } else {\n selectionInput = {\n start: dateOrObj,\n end: endDate\n };\n }\n\n var selection = parseDateSpan(selectionInput, this.dateEnv, createDuration({\n days: 1\n }) // TODO: cache this?\n );\n\n if (selection) {\n // throw parse error otherwise?\n this.dispatch({\n type: 'SELECT_DATES',\n selection: selection\n });\n this.triggerDateSelect(selection);\n }\n }; // public method\n\n\n Calendar.prototype.unselect = function (pev) {\n if (this.state.dateSelection) {\n this.dispatch({\n type: 'UNSELECT_DATES'\n });\n this.triggerDateUnselect(pev);\n }\n };\n\n Calendar.prototype.triggerDateSelect = function (selection, pev) {\n var arg = _assign({}, this.buildDateSpanApi(selection), {\n jsEvent: pev ? pev.origEvent : null,\n view: this.view\n });\n\n this.publiclyTrigger('select', [arg]);\n };\n\n Calendar.prototype.triggerDateUnselect = function (pev) {\n this.publiclyTrigger('unselect', [{\n jsEvent: pev ? pev.origEvent : null,\n view: this.view\n }]);\n }; // TODO: receive pev?\n\n\n Calendar.prototype.triggerDateClick = function (dateSpan, dayEl, view, ev) {\n var arg = _assign({}, this.buildDatePointApi(dateSpan), {\n dayEl: dayEl,\n jsEvent: ev,\n // Is this always a mouse event? See #4655\n view: view\n });\n\n this.publiclyTrigger('dateClick', [arg]);\n };\n\n Calendar.prototype.buildDatePointApi = function (dateSpan) {\n var props = {};\n\n for (var _i = 0, _a = this.pluginSystem.hooks.datePointTransforms; _i < _a.length; _i++) {\n var transform = _a[_i];\n\n _assign(props, transform(dateSpan, this));\n }\n\n _assign(props, buildDatePointApi(dateSpan, this.dateEnv));\n\n return props;\n };\n\n Calendar.prototype.buildDateSpanApi = function (dateSpan) {\n var props = {};\n\n for (var _i = 0, _a = this.pluginSystem.hooks.dateSpanTransforms; _i < _a.length; _i++) {\n var transform = _a[_i];\n\n _assign(props, transform(dateSpan, this));\n }\n\n _assign(props, buildDateSpanApi(dateSpan, this.dateEnv));\n\n return props;\n }; // Date Utils\n // -----------------------------------------------------------------------------------------------------------------\n // Returns a DateMarker for the current date, as defined by the client's computer or from the `now` option\n\n\n Calendar.prototype.getNow = function () {\n var now = this.opt('now');\n\n if (typeof now === 'function') {\n now = now();\n }\n\n if (now == null) {\n return this.dateEnv.createNowMarker();\n }\n\n return this.dateEnv.createMarker(now);\n }; // Event-Date Utilities\n // -----------------------------------------------------------------------------------------------------------------\n // Given an event's allDay status and start date, return what its fallback end date should be.\n // TODO: rename to computeDefaultEventEnd\n\n\n Calendar.prototype.getDefaultEventEnd = function (allDay, marker) {\n var end = marker;\n\n if (allDay) {\n end = startOfDay(end);\n end = this.dateEnv.add(end, this.defaultAllDayEventDuration);\n } else {\n end = this.dateEnv.add(end, this.defaultTimedEventDuration);\n }\n\n return end;\n }; // Public Events API\n // -----------------------------------------------------------------------------------------------------------------\n\n\n Calendar.prototype.addEvent = function (eventInput, sourceInput) {\n if (eventInput instanceof EventApi) {\n var def = eventInput._def;\n var instance = eventInput._instance; // not already present? don't want to add an old snapshot\n\n if (!this.state.eventStore.defs[def.defId]) {\n this.dispatch({\n type: 'ADD_EVENTS',\n eventStore: eventTupleToStore({\n def: def,\n instance: instance\n }) // TODO: better util for two args?\n\n });\n }\n\n return eventInput;\n }\n\n var sourceId;\n\n if (sourceInput instanceof EventSourceApi) {\n sourceId = sourceInput.internalEventSource.sourceId;\n } else if (sourceInput != null) {\n var sourceApi = this.getEventSourceById(sourceInput); // TODO: use an internal function\n\n if (!sourceApi) {\n console.warn('Could not find an event source with ID \"' + sourceInput + '\"'); // TODO: test\n\n return null;\n } else {\n sourceId = sourceApi.internalEventSource.sourceId;\n }\n }\n\n var tuple = parseEvent(eventInput, sourceId, this);\n\n if (tuple) {\n this.dispatch({\n type: 'ADD_EVENTS',\n eventStore: eventTupleToStore(tuple)\n });\n return new EventApi(this, tuple.def, tuple.def.recurringDef ? null : tuple.instance);\n }\n\n return null;\n }; // TODO: optimize\n\n\n Calendar.prototype.getEventById = function (id) {\n var _a = this.state.eventStore,\n defs = _a.defs,\n instances = _a.instances;\n id = String(id);\n\n for (var defId in defs) {\n var def = defs[defId];\n\n if (def.publicId === id) {\n if (def.recurringDef) {\n return new EventApi(this, def, null);\n } else {\n for (var instanceId in instances) {\n var instance = instances[instanceId];\n\n if (instance.defId === def.defId) {\n return new EventApi(this, def, instance);\n }\n }\n }\n }\n }\n\n return null;\n };\n\n Calendar.prototype.getEvents = function () {\n var _a = this.state.eventStore,\n defs = _a.defs,\n instances = _a.instances;\n var eventApis = [];\n\n for (var id in instances) {\n var instance = instances[id];\n var def = defs[instance.defId];\n eventApis.push(new EventApi(this, def, instance));\n }\n\n return eventApis;\n };\n\n Calendar.prototype.removeAllEvents = function () {\n this.dispatch({\n type: 'REMOVE_ALL_EVENTS'\n });\n };\n\n Calendar.prototype.rerenderEvents = function () {\n this.dispatch({\n type: 'RESET_EVENTS'\n });\n }; // Public Event Sources API\n // -----------------------------------------------------------------------------------------------------------------\n\n\n Calendar.prototype.getEventSources = function () {\n var sourceHash = this.state.eventSources;\n var sourceApis = [];\n\n for (var internalId in sourceHash) {\n sourceApis.push(new EventSourceApi(this, sourceHash[internalId]));\n }\n\n return sourceApis;\n };\n\n Calendar.prototype.getEventSourceById = function (id) {\n var sourceHash = this.state.eventSources;\n id = String(id);\n\n for (var sourceId in sourceHash) {\n if (sourceHash[sourceId].publicId === id) {\n return new EventSourceApi(this, sourceHash[sourceId]);\n }\n }\n\n return null;\n };\n\n Calendar.prototype.addEventSource = function (sourceInput) {\n if (sourceInput instanceof EventSourceApi) {\n // not already present? don't want to add an old snapshot\n if (!this.state.eventSources[sourceInput.internalEventSource.sourceId]) {\n this.dispatch({\n type: 'ADD_EVENT_SOURCES',\n sources: [sourceInput.internalEventSource]\n });\n }\n\n return sourceInput;\n }\n\n var eventSource = parseEventSource(sourceInput, this);\n\n if (eventSource) {\n // TODO: error otherwise?\n this.dispatch({\n type: 'ADD_EVENT_SOURCES',\n sources: [eventSource]\n });\n return new EventSourceApi(this, eventSource);\n }\n\n return null;\n };\n\n Calendar.prototype.removeAllEventSources = function () {\n this.dispatch({\n type: 'REMOVE_ALL_EVENT_SOURCES'\n });\n };\n\n Calendar.prototype.refetchEvents = function () {\n this.dispatch({\n type: 'FETCH_EVENT_SOURCES'\n });\n }; // Scroll\n // -----------------------------------------------------------------------------------------------------------------\n\n\n Calendar.prototype.scrollToTime = function (timeInput) {\n var duration = createDuration(timeInput);\n\n if (duration) {\n this.component.view.scrollToDuration(duration);\n }\n };\n\n return Calendar;\n}();\n\nEmitterMixin.mixInto(Calendar); // for memoizers\n// -----------------------------------------------------------------------------------------------------------------\n\nfunction buildDateEnv(locale, timeZone, namedTimeZoneImpl, firstDay, weekNumberCalculation, weekLabel, cmdFormatter) {\n return new DateEnv({\n calendarSystem: 'gregory',\n timeZone: timeZone,\n namedTimeZoneImpl: namedTimeZoneImpl,\n locale: locale,\n weekNumberCalculation: weekNumberCalculation,\n firstDay: firstDay,\n weekLabel: weekLabel,\n cmdFormatter: cmdFormatter\n });\n}\n\nfunction buildTheme(calendarOptions) {\n var themeClass = this.pluginSystem.hooks.themeClasses[calendarOptions.themeSystem] || StandardTheme;\n return new themeClass(calendarOptions);\n}\n\nfunction buildDelayedRerender(wait) {\n var func = this.tryRerender.bind(this);\n\n if (wait != null) {\n func = debounce(func, wait);\n }\n\n return func;\n}\n\nfunction buildEventUiBySource(eventSources) {\n return mapHash(eventSources, function (eventSource) {\n return eventSource.ui;\n });\n}\n\nfunction buildEventUiBases(eventDefs, eventUiSingleBase, eventUiBySource) {\n var eventUiBases = {\n '': eventUiSingleBase\n };\n\n for (var defId in eventDefs) {\n var def = eventDefs[defId];\n\n if (def.sourceId && eventUiBySource[def.sourceId]) {\n eventUiBases[defId] = eventUiBySource[def.sourceId];\n }\n }\n\n return eventUiBases;\n}\n\nvar View =\n/** @class */\nfunction (_super) {\n __extends(View, _super);\n\n function View(context, viewSpec, dateProfileGenerator, parentEl) {\n var _this = _super.call(this, context, createElement('div', {\n className: 'fc-view fc-' + viewSpec.type + '-view'\n }), true // isView (HACK)\n ) || this;\n\n _this.renderDatesMem = memoizeRendering(_this.renderDatesWrap, _this.unrenderDatesWrap);\n _this.renderBusinessHoursMem = memoizeRendering(_this.renderBusinessHours, _this.unrenderBusinessHours, [_this.renderDatesMem]);\n _this.renderDateSelectionMem = memoizeRendering(_this.renderDateSelectionWrap, _this.unrenderDateSelectionWrap, [_this.renderDatesMem]);\n _this.renderEventsMem = memoizeRendering(_this.renderEvents, _this.unrenderEvents, [_this.renderDatesMem]);\n _this.renderEventSelectionMem = memoizeRendering(_this.renderEventSelectionWrap, _this.unrenderEventSelectionWrap, [_this.renderEventsMem]);\n _this.renderEventDragMem = memoizeRendering(_this.renderEventDragWrap, _this.unrenderEventDragWrap, [_this.renderDatesMem]);\n _this.renderEventResizeMem = memoizeRendering(_this.renderEventResizeWrap, _this.unrenderEventResizeWrap, [_this.renderDatesMem]);\n _this.viewSpec = viewSpec;\n _this.dateProfileGenerator = dateProfileGenerator;\n _this.type = viewSpec.type;\n _this.eventOrderSpecs = parseFieldSpecs(_this.opt('eventOrder'));\n _this.nextDayThreshold = createDuration(_this.opt('nextDayThreshold'));\n parentEl.appendChild(_this.el);\n\n _this.initialize();\n\n return _this;\n }\n\n View.prototype.initialize = function () {};\n\n Object.defineProperty(View.prototype, \"activeStart\", {\n // Date Setting/Unsetting\n // -----------------------------------------------------------------------------------------------------------------\n get: function get() {\n return this.dateEnv.toDate(this.props.dateProfile.activeRange.start);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(View.prototype, \"activeEnd\", {\n get: function get() {\n return this.dateEnv.toDate(this.props.dateProfile.activeRange.end);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(View.prototype, \"currentStart\", {\n get: function get() {\n return this.dateEnv.toDate(this.props.dateProfile.currentRange.start);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(View.prototype, \"currentEnd\", {\n get: function get() {\n return this.dateEnv.toDate(this.props.dateProfile.currentRange.end);\n },\n enumerable: true,\n configurable: true\n }); // General Rendering\n // -----------------------------------------------------------------------------------------------------------------\n\n View.prototype.render = function (props) {\n this.renderDatesMem(props.dateProfile);\n this.renderBusinessHoursMem(props.businessHours);\n this.renderDateSelectionMem(props.dateSelection);\n this.renderEventsMem(props.eventStore);\n this.renderEventSelectionMem(props.eventSelection);\n this.renderEventDragMem(props.eventDrag);\n this.renderEventResizeMem(props.eventResize);\n };\n\n View.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n\n this.renderDatesMem.unrender(); // should unrender everything else\n }; // Sizing\n // -----------------------------------------------------------------------------------------------------------------\n\n\n View.prototype.updateSize = function (isResize, viewHeight, isAuto) {\n var calendar = this.calendar;\n\n if (isResize || // HACKS...\n calendar.isViewUpdated || calendar.isDatesUpdated || calendar.isEventsUpdated) {\n // sort of the catch-all sizing\n // anything that might cause dimension changes\n this.updateBaseSize(isResize, viewHeight, isAuto);\n }\n };\n\n View.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) {}; // Date Rendering\n // -----------------------------------------------------------------------------------------------------------------\n\n\n View.prototype.renderDatesWrap = function (dateProfile) {\n this.renderDates(dateProfile);\n this.addScroll({\n duration: createDuration(this.opt('scrollTime'))\n });\n this.startNowIndicator(dateProfile); // shouldn't render yet because updateSize will be called soon\n };\n\n View.prototype.unrenderDatesWrap = function () {\n this.stopNowIndicator();\n this.unrenderDates();\n };\n\n View.prototype.renderDates = function (dateProfile) {};\n\n View.prototype.unrenderDates = function () {}; // Business Hours\n // -----------------------------------------------------------------------------------------------------------------\n\n\n View.prototype.renderBusinessHours = function (businessHours) {};\n\n View.prototype.unrenderBusinessHours = function () {}; // Date Selection\n // -----------------------------------------------------------------------------------------------------------------\n\n\n View.prototype.renderDateSelectionWrap = function (selection) {\n if (selection) {\n this.renderDateSelection(selection);\n }\n };\n\n View.prototype.unrenderDateSelectionWrap = function (selection) {\n if (selection) {\n this.unrenderDateSelection(selection);\n }\n };\n\n View.prototype.renderDateSelection = function (selection) {};\n\n View.prototype.unrenderDateSelection = function (selection) {}; // Event Rendering\n // -----------------------------------------------------------------------------------------------------------------\n\n\n View.prototype.renderEvents = function (eventStore) {};\n\n View.prototype.unrenderEvents = function () {}; // util for subclasses\n\n\n View.prototype.sliceEvents = function (eventStore, allDay) {\n var props = this.props;\n return sliceEventStore(eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? this.nextDayThreshold : null).fg;\n };\n\n View.prototype.computeEventDraggable = function (eventDef, eventUi) {\n var transformers = this.calendar.pluginSystem.hooks.isDraggableTransformers;\n var val = eventUi.startEditable;\n\n for (var _i = 0, transformers_1 = transformers; _i < transformers_1.length; _i++) {\n var transformer = transformers_1[_i];\n val = transformer(val, eventDef, eventUi, this);\n }\n\n return val;\n };\n\n View.prototype.computeEventStartResizable = function (eventDef, eventUi) {\n return eventUi.durationEditable && this.opt('eventResizableFromStart');\n };\n\n View.prototype.computeEventEndResizable = function (eventDef, eventUi) {\n return eventUi.durationEditable;\n }; // Event Selection\n // -----------------------------------------------------------------------------------------------------------------\n\n\n View.prototype.renderEventSelectionWrap = function (instanceId) {\n if (instanceId) {\n this.renderEventSelection(instanceId);\n }\n };\n\n View.prototype.unrenderEventSelectionWrap = function (instanceId) {\n if (instanceId) {\n this.unrenderEventSelection(instanceId);\n }\n };\n\n View.prototype.renderEventSelection = function (instanceId) {};\n\n View.prototype.unrenderEventSelection = function (instanceId) {}; // Event Drag\n // -----------------------------------------------------------------------------------------------------------------\n\n\n View.prototype.renderEventDragWrap = function (state) {\n if (state) {\n this.renderEventDrag(state);\n }\n };\n\n View.prototype.unrenderEventDragWrap = function (state) {\n if (state) {\n this.unrenderEventDrag(state);\n }\n };\n\n View.prototype.renderEventDrag = function (state) {};\n\n View.prototype.unrenderEventDrag = function (state) {}; // Event Resize\n // -----------------------------------------------------------------------------------------------------------------\n\n\n View.prototype.renderEventResizeWrap = function (state) {\n if (state) {\n this.renderEventResize(state);\n }\n };\n\n View.prototype.unrenderEventResizeWrap = function (state) {\n if (state) {\n this.unrenderEventResize(state);\n }\n };\n\n View.prototype.renderEventResize = function (state) {};\n\n View.prototype.unrenderEventResize = function (state) {};\n /* Now Indicator\n ------------------------------------------------------------------------------------------------------------------*/\n // Immediately render the current time indicator and begins re-rendering it at an interval,\n // which is defined by this.getNowIndicatorUnit().\n // TODO: somehow do this for the current whole day's background too\n\n\n View.prototype.startNowIndicator = function (dateProfile) {\n var _this = this;\n\n var dateEnv = this.dateEnv;\n var unit;\n var update;\n var delay; // ms wait value\n\n if (this.opt('nowIndicator')) {\n unit = this.getNowIndicatorUnit(dateProfile);\n\n if (unit) {\n update = this.updateNowIndicator.bind(this);\n this.initialNowDate = this.calendar.getNow();\n this.initialNowQueriedMs = new Date().valueOf(); // wait until the beginning of the next interval\n\n delay = dateEnv.add(dateEnv.startOf(this.initialNowDate, unit), createDuration(1, unit)).valueOf() - this.initialNowDate.valueOf(); // TODO: maybe always use setTimeout, waiting until start of next unit\n\n this.nowIndicatorTimeoutID = setTimeout(function () {\n _this.nowIndicatorTimeoutID = null;\n update();\n\n if (unit === 'second') {\n delay = 1000; // every second\n } else {\n delay = 1000 * 60; // otherwise, every minute\n }\n\n _this.nowIndicatorIntervalID = setInterval(update, delay); // update every interval\n }, delay);\n } // rendering will be initiated in updateSize\n\n }\n }; // rerenders the now indicator, computing the new current time from the amount of time that has passed\n // since the initial getNow call.\n\n\n View.prototype.updateNowIndicator = function () {\n if (this.props.dateProfile && // a way to determine if dates were rendered yet\n this.initialNowDate // activated before?\n ) {\n this.unrenderNowIndicator(); // won't unrender if unnecessary\n\n this.renderNowIndicator(addMs(this.initialNowDate, new Date().valueOf() - this.initialNowQueriedMs));\n this.isNowIndicatorRendered = true;\n }\n }; // Immediately unrenders the view's current time indicator and stops any re-rendering timers.\n // Won't cause side effects if indicator isn't rendered.\n\n\n View.prototype.stopNowIndicator = function () {\n if (this.isNowIndicatorRendered) {\n if (this.nowIndicatorTimeoutID) {\n clearTimeout(this.nowIndicatorTimeoutID);\n this.nowIndicatorTimeoutID = null;\n }\n\n if (this.nowIndicatorIntervalID) {\n clearInterval(this.nowIndicatorIntervalID);\n this.nowIndicatorIntervalID = null;\n }\n\n this.unrenderNowIndicator();\n this.isNowIndicatorRendered = false;\n }\n };\n\n View.prototype.getNowIndicatorUnit = function (dateProfile) {// subclasses should implement\n }; // Renders a current time indicator at the given datetime\n\n\n View.prototype.renderNowIndicator = function (date) {// SUBCLASSES MUST PASS TO CHILDREN!\n }; // Undoes the rendering actions from renderNowIndicator\n\n\n View.prototype.unrenderNowIndicator = function () {// SUBCLASSES MUST PASS TO CHILDREN!\n };\n /* Scroller\n ------------------------------------------------------------------------------------------------------------------*/\n\n\n View.prototype.addScroll = function (scroll) {\n var queuedScroll = this.queuedScroll || (this.queuedScroll = {});\n\n _assign(queuedScroll, scroll);\n };\n\n View.prototype.popScroll = function (isResize) {\n this.applyQueuedScroll(isResize);\n this.queuedScroll = null;\n };\n\n View.prototype.applyQueuedScroll = function (isResize) {\n this.applyScroll(this.queuedScroll || {}, isResize);\n };\n\n View.prototype.queryScroll = function () {\n var scroll = {};\n\n if (this.props.dateProfile) {\n // dates rendered yet?\n _assign(scroll, this.queryDateScroll());\n }\n\n return scroll;\n };\n\n View.prototype.applyScroll = function (scroll, isResize) {\n var duration = scroll.duration;\n\n if (duration != null) {\n delete scroll.duration;\n\n if (this.props.dateProfile) {\n // dates rendered yet?\n _assign(scroll, this.computeDateScroll(duration));\n }\n }\n\n if (this.props.dateProfile) {\n // dates rendered yet?\n this.applyDateScroll(scroll);\n }\n };\n\n View.prototype.computeDateScroll = function (duration) {\n return {}; // subclasses must implement\n };\n\n View.prototype.queryDateScroll = function () {\n return {}; // subclasses must implement\n };\n\n View.prototype.applyDateScroll = function (scroll) {// subclasses must implement\n }; // for API\n\n\n View.prototype.scrollToDuration = function (duration) {\n this.applyScroll({\n duration: duration\n }, false);\n };\n\n return View;\n}(DateComponent);\n\nEmitterMixin.mixInto(View);\nView.prototype.usesMinMaxTime = false;\nView.prototype.dateProfileGeneratorClass = DateProfileGenerator;\n\nvar FgEventRenderer =\n/** @class */\nfunction () {\n function FgEventRenderer(context) {\n this.segs = [];\n this.isSizeDirty = false;\n this.context = context;\n }\n\n FgEventRenderer.prototype.renderSegs = function (segs, mirrorInfo) {\n this.rangeUpdated(); // called too frequently :(\n // render an `.el` on each seg\n // returns a subset of the segs. segs that were actually rendered\n\n segs = this.renderSegEls(segs, mirrorInfo);\n this.segs = segs;\n this.attachSegs(segs, mirrorInfo);\n this.isSizeDirty = true;\n this.context.view.triggerRenderedSegs(this.segs, Boolean(mirrorInfo));\n };\n\n FgEventRenderer.prototype.unrender = function (_segs, mirrorInfo) {\n this.context.view.triggerWillRemoveSegs(this.segs, Boolean(mirrorInfo));\n this.detachSegs(this.segs);\n this.segs = [];\n }; // Updates values that rely on options and also relate to range\n\n\n FgEventRenderer.prototype.rangeUpdated = function () {\n var options = this.context.options;\n var displayEventTime;\n var displayEventEnd;\n this.eventTimeFormat = createFormatter(options.eventTimeFormat || this.computeEventTimeFormat(), options.defaultRangeSeparator);\n displayEventTime = options.displayEventTime;\n\n if (displayEventTime == null) {\n displayEventTime = this.computeDisplayEventTime(); // might be based off of range\n }\n\n displayEventEnd = options.displayEventEnd;\n\n if (displayEventEnd == null) {\n displayEventEnd = this.computeDisplayEventEnd(); // might be based off of range\n }\n\n this.displayEventTime = displayEventTime;\n this.displayEventEnd = displayEventEnd;\n }; // Renders and assigns an `el` property for each foreground event segment.\n // Only returns segments that successfully rendered.\n\n\n FgEventRenderer.prototype.renderSegEls = function (segs, mirrorInfo) {\n var html = '';\n var i;\n\n if (segs.length) {\n // don't build an empty html string\n // build a large concatenation of event segment HTML\n for (i = 0; i < segs.length; i++) {\n html += this.renderSegHtml(segs[i], mirrorInfo);\n } // Grab individual elements from the combined HTML string. Use each as the default rendering.\n // Then, compute the 'el' for each segment. An el might be null if the eventRender callback returned false.\n\n\n htmlToElements(html).forEach(function (el, i) {\n var seg = segs[i];\n\n if (el) {\n seg.el = el;\n }\n });\n segs = filterSegsViaEls(this.context.view, segs, Boolean(mirrorInfo));\n }\n\n return segs;\n }; // Generic utility for generating the HTML classNames for an event segment's element\n\n\n FgEventRenderer.prototype.getSegClasses = function (seg, isDraggable, isResizable, mirrorInfo) {\n var classes = ['fc-event', seg.isStart ? 'fc-start' : 'fc-not-start', seg.isEnd ? 'fc-end' : 'fc-not-end'].concat(seg.eventRange.ui.classNames);\n\n if (isDraggable) {\n classes.push('fc-draggable');\n }\n\n if (isResizable) {\n classes.push('fc-resizable');\n }\n\n if (mirrorInfo) {\n classes.push('fc-mirror');\n\n if (mirrorInfo.isDragging) {\n classes.push('fc-dragging');\n }\n\n if (mirrorInfo.isResizing) {\n classes.push('fc-resizing');\n }\n }\n\n return classes;\n }; // Compute the text that should be displayed on an event's element.\n // `range` can be the Event object itself, or something range-like, with at least a `start`.\n // If event times are disabled, or the event has no time, will return a blank string.\n // If not specified, formatter will default to the eventTimeFormat setting,\n // and displayEnd will default to the displayEventEnd setting.\n\n\n FgEventRenderer.prototype.getTimeText = function (eventRange, formatter, displayEnd) {\n var def = eventRange.def,\n instance = eventRange.instance;\n return this._getTimeText(instance.range.start, def.hasEnd ? instance.range.end : null, def.allDay, formatter, displayEnd, instance.forcedStartTzo, instance.forcedEndTzo);\n };\n\n FgEventRenderer.prototype._getTimeText = function (start, end, allDay, formatter, displayEnd, forcedStartTzo, forcedEndTzo) {\n var dateEnv = this.context.dateEnv;\n\n if (formatter == null) {\n formatter = this.eventTimeFormat;\n }\n\n if (displayEnd == null) {\n displayEnd = this.displayEventEnd;\n }\n\n if (this.displayEventTime && !allDay) {\n if (displayEnd && end) {\n return dateEnv.formatRange(start, end, formatter, {\n forcedStartTzo: forcedStartTzo,\n forcedEndTzo: forcedEndTzo\n });\n } else {\n return dateEnv.format(start, formatter, {\n forcedTzo: forcedStartTzo\n });\n }\n }\n\n return '';\n };\n\n FgEventRenderer.prototype.computeEventTimeFormat = function () {\n return {\n hour: 'numeric',\n minute: '2-digit',\n omitZeroMinute: true\n };\n };\n\n FgEventRenderer.prototype.computeDisplayEventTime = function () {\n return true;\n };\n\n FgEventRenderer.prototype.computeDisplayEventEnd = function () {\n return true;\n }; // Utility for generating event skin-related CSS properties\n\n\n FgEventRenderer.prototype.getSkinCss = function (ui) {\n return {\n 'background-color': ui.backgroundColor,\n 'border-color': ui.borderColor,\n color: ui.textColor\n };\n };\n\n FgEventRenderer.prototype.sortEventSegs = function (segs) {\n var specs = this.context.view.eventOrderSpecs;\n var objs = segs.map(buildSegCompareObj);\n objs.sort(function (obj0, obj1) {\n return compareByFieldSpecs(obj0, obj1, specs);\n });\n return objs.map(function (c) {\n return c._seg;\n });\n };\n\n FgEventRenderer.prototype.computeSizes = function (force) {\n if (force || this.isSizeDirty) {\n this.computeSegSizes(this.segs);\n }\n };\n\n FgEventRenderer.prototype.assignSizes = function (force) {\n if (force || this.isSizeDirty) {\n this.assignSegSizes(this.segs);\n this.isSizeDirty = false;\n }\n };\n\n FgEventRenderer.prototype.computeSegSizes = function (segs) {};\n\n FgEventRenderer.prototype.assignSegSizes = function (segs) {}; // Manipulation on rendered segs\n\n\n FgEventRenderer.prototype.hideByHash = function (hash) {\n if (hash) {\n for (var _i = 0, _a = this.segs; _i < _a.length; _i++) {\n var seg = _a[_i];\n\n if (hash[seg.eventRange.instance.instanceId]) {\n seg.el.style.visibility = 'hidden';\n }\n }\n }\n };\n\n FgEventRenderer.prototype.showByHash = function (hash) {\n if (hash) {\n for (var _i = 0, _a = this.segs; _i < _a.length; _i++) {\n var seg = _a[_i];\n\n if (hash[seg.eventRange.instance.instanceId]) {\n seg.el.style.visibility = '';\n }\n }\n }\n };\n\n FgEventRenderer.prototype.selectByInstanceId = function (instanceId) {\n if (instanceId) {\n for (var _i = 0, _a = this.segs; _i < _a.length; _i++) {\n var seg = _a[_i];\n var eventInstance = seg.eventRange.instance;\n\n if (eventInstance && eventInstance.instanceId === instanceId && seg.el // necessary?\n ) {\n seg.el.classList.add('fc-selected');\n }\n }\n }\n };\n\n FgEventRenderer.prototype.unselectByInstanceId = function (instanceId) {\n if (instanceId) {\n for (var _i = 0, _a = this.segs; _i < _a.length; _i++) {\n var seg = _a[_i];\n\n if (seg.el) {\n // necessary?\n seg.el.classList.remove('fc-selected');\n }\n }\n }\n };\n\n return FgEventRenderer;\n}(); // returns a object with all primitive props that can be compared\n\n\nfunction buildSegCompareObj(seg) {\n var eventDef = seg.eventRange.def;\n var range = seg.eventRange.instance.range;\n var start = range.start ? range.start.valueOf() : 0; // TODO: better support for open-range events\n\n var end = range.end ? range.end.valueOf() : 0; // \"\n\n return _assign({}, eventDef.extendedProps, eventDef, {\n id: eventDef.publicId,\n start: start,\n end: end,\n duration: end - start,\n allDay: Number(eventDef.allDay),\n _seg: seg // for later retrieval\n\n });\n}\n\nvar FillRenderer =\n/** @class */\nfunction () {\n function FillRenderer(context) {\n this.fillSegTag = 'div';\n this.dirtySizeFlags = {};\n this.context = context;\n this.containerElsByType = {};\n this.segsByType = {};\n }\n\n FillRenderer.prototype.getSegsByType = function (type) {\n return this.segsByType[type] || [];\n };\n\n FillRenderer.prototype.renderSegs = function (type, segs) {\n var _a;\n\n var renderedSegs = this.renderSegEls(type, segs); // assignes `.el` to each seg. returns successfully rendered segs\n\n var containerEls = this.attachSegs(type, renderedSegs);\n\n if (containerEls) {\n (_a = this.containerElsByType[type] || (this.containerElsByType[type] = [])).push.apply(_a, containerEls);\n }\n\n this.segsByType[type] = renderedSegs;\n\n if (type === 'bgEvent') {\n this.context.view.triggerRenderedSegs(renderedSegs, false); // isMirror=false\n }\n\n this.dirtySizeFlags[type] = true;\n }; // Unrenders a specific type of fill that is currently rendered on the grid\n\n\n FillRenderer.prototype.unrender = function (type) {\n var segs = this.segsByType[type];\n\n if (segs) {\n if (type === 'bgEvent') {\n this.context.view.triggerWillRemoveSegs(segs, false); // isMirror=false\n }\n\n this.detachSegs(type, segs);\n }\n }; // Renders and assigns an `el` property for each fill segment. Generic enough to work with different types.\n // Only returns segments that successfully rendered.\n\n\n FillRenderer.prototype.renderSegEls = function (type, segs) {\n var _this = this;\n\n var html = '';\n var i;\n\n if (segs.length) {\n // build a large concatenation of segment HTML\n for (i = 0; i < segs.length; i++) {\n html += this.renderSegHtml(type, segs[i]);\n } // Grab individual elements from the combined HTML string. Use each as the default rendering.\n // Then, compute the 'el' for each segment.\n\n\n htmlToElements(html).forEach(function (el, i) {\n var seg = segs[i];\n\n if (el) {\n seg.el = el;\n }\n });\n\n if (type === 'bgEvent') {\n segs = filterSegsViaEls(this.context.view, segs, false // isMirror. background events can never be mirror elements\n );\n } // correct element type? (would be bad if a non-TD were inserted into a table for example)\n\n\n segs = segs.filter(function (seg) {\n return elementMatches(seg.el, _this.fillSegTag);\n });\n }\n\n return segs;\n }; // Builds the HTML needed for one fill segment. Generic enough to work with different types.\n\n\n FillRenderer.prototype.renderSegHtml = function (type, seg) {\n var css = null;\n var classNames = [];\n\n if (type !== 'highlight' && type !== 'businessHours') {\n css = {\n 'background-color': seg.eventRange.ui.backgroundColor\n };\n }\n\n if (type !== 'highlight') {\n classNames = classNames.concat(seg.eventRange.ui.classNames);\n }\n\n if (type === 'businessHours') {\n classNames.push('fc-bgevent');\n } else {\n classNames.push('fc-' + type.toLowerCase());\n }\n\n return '<' + this.fillSegTag + (classNames.length ? ' class=\"' + classNames.join(' ') + '\"' : '') + (css ? ' style=\"' + cssToStr(css) + '\"' : '') + '>';\n };\n\n FillRenderer.prototype.detachSegs = function (type, segs) {\n var containerEls = this.containerElsByType[type];\n\n if (containerEls) {\n containerEls.forEach(removeElement);\n delete this.containerElsByType[type];\n }\n };\n\n FillRenderer.prototype.computeSizes = function (force) {\n for (var type in this.segsByType) {\n if (force || this.dirtySizeFlags[type]) {\n this.computeSegSizes(this.segsByType[type]);\n }\n }\n };\n\n FillRenderer.prototype.assignSizes = function (force) {\n for (var type in this.segsByType) {\n if (force || this.dirtySizeFlags[type]) {\n this.assignSegSizes(this.segsByType[type]);\n }\n }\n\n this.dirtySizeFlags = {};\n };\n\n FillRenderer.prototype.computeSegSizes = function (segs) {};\n\n FillRenderer.prototype.assignSegSizes = function (segs) {};\n\n return FillRenderer;\n}();\n\nvar NamedTimeZoneImpl =\n/** @class */\nfunction () {\n function NamedTimeZoneImpl(timeZoneName) {\n this.timeZoneName = timeZoneName;\n }\n\n return NamedTimeZoneImpl;\n}();\n/*\nAn abstraction for a dragging interaction originating on an event.\nDoes higher-level things than PointerDragger, such as possibly:\n- a \"mirror\" that moves with the pointer\n- a minimum number of pixels or other criteria for a true drag to begin\n\nsubclasses must emit:\n- pointerdown\n- dragstart\n- dragmove\n- pointerup\n- dragend\n*/\n\n\nvar ElementDragging =\n/** @class */\nfunction () {\n function ElementDragging(el) {\n this.emitter = new EmitterMixin();\n }\n\n ElementDragging.prototype.destroy = function () {};\n\n ElementDragging.prototype.setMirrorIsVisible = function (bool) {// optional if subclass doesn't want to support a mirror\n };\n\n ElementDragging.prototype.setMirrorNeedsRevert = function (bool) {// optional if subclass doesn't want to support a mirror\n };\n\n ElementDragging.prototype.setAutoScrollEnabled = function (bool) {// optional\n };\n\n return ElementDragging;\n}();\n\nfunction formatDate(dateInput, settings) {\n if (settings === void 0) {\n settings = {};\n }\n\n var dateEnv = buildDateEnv$1(settings);\n var formatter = createFormatter(settings);\n var dateMeta = dateEnv.createMarkerMeta(dateInput);\n\n if (!dateMeta) {\n // TODO: warning?\n return '';\n }\n\n return dateEnv.format(dateMeta.marker, formatter, {\n forcedTzo: dateMeta.forcedTzo\n });\n}\n\nfunction formatRange(startInput, endInput, settings // mixture of env and formatter settings\n) {\n var dateEnv = buildDateEnv$1(_typeof(settings) === 'object' && settings ? settings : {}); // pass in if non-null object\n\n var formatter = createFormatter(settings, globalDefaults.defaultRangeSeparator);\n var startMeta = dateEnv.createMarkerMeta(startInput);\n var endMeta = dateEnv.createMarkerMeta(endInput);\n\n if (!startMeta || !endMeta) {\n // TODO: warning?\n return '';\n }\n\n return dateEnv.formatRange(startMeta.marker, endMeta.marker, formatter, {\n forcedStartTzo: startMeta.forcedTzo,\n forcedEndTzo: endMeta.forcedTzo,\n isEndExclusive: settings.isEndExclusive\n });\n} // TODO: more DRY and optimized\n\n\nfunction buildDateEnv$1(settings) {\n var locale = buildLocale(settings.locale || 'en', parseRawLocales([]).map); // TODO: don't hardcode 'en' everywhere\n // ensure required settings\n\n settings = _assign({\n timeZone: globalDefaults.timeZone,\n calendarSystem: 'gregory'\n }, settings, {\n locale: locale\n });\n return new DateEnv(settings);\n}\n\nvar DRAG_META_PROPS = {\n startTime: createDuration,\n duration: createDuration,\n create: Boolean,\n sourceId: String\n};\nvar DRAG_META_DEFAULTS = {\n create: true\n};\n\nfunction parseDragMeta(raw) {\n var leftoverProps = {};\n var refined = refineProps(raw, DRAG_META_PROPS, DRAG_META_DEFAULTS, leftoverProps);\n refined.leftoverProps = leftoverProps;\n return refined;\n} // Computes a default column header formatting string if `colFormat` is not explicitly defined\n\n\nfunction computeFallbackHeaderFormat(datesRepDistinctDays, dayCnt) {\n // if more than one week row, or if there are a lot of columns with not much space,\n // put just the day numbers will be in each cell\n if (!datesRepDistinctDays || dayCnt > 10) {\n return {\n weekday: 'short'\n }; // \"Sat\"\n } else if (dayCnt > 1) {\n return {\n weekday: 'short',\n month: 'numeric',\n day: 'numeric',\n omitCommas: true\n }; // \"Sat 11/12\"\n } else {\n return {\n weekday: 'long'\n }; // \"Saturday\"\n }\n}\n\nfunction renderDateCell(dateMarker, dateProfile, datesRepDistinctDays, colCnt, colHeadFormat, context, colspan, otherAttrs) {\n var view = context.view,\n dateEnv = context.dateEnv,\n theme = context.theme,\n options = context.options;\n var isDateValid = rangeContainsMarker(dateProfile.activeRange, dateMarker); // TODO: called too frequently. cache somehow.\n\n var classNames = ['fc-day-header', theme.getClass('widgetHeader')];\n var innerHtml;\n\n if (typeof options.columnHeaderHtml === 'function') {\n innerHtml = options.columnHeaderHtml(dateEnv.toDate(dateMarker));\n } else if (typeof options.columnHeaderText === 'function') {\n innerHtml = htmlEscape(options.columnHeaderText(dateEnv.toDate(dateMarker)));\n } else {\n innerHtml = htmlEscape(dateEnv.format(dateMarker, colHeadFormat));\n } // if only one row of days, the classNames on the header can represent the specific days beneath\n\n\n if (datesRepDistinctDays) {\n classNames = classNames.concat( // includes the day-of-week class\n // noThemeHighlight=true (don't highlight the header)\n getDayClasses(dateMarker, dateProfile, context, true));\n } else {\n classNames.push('fc-' + DAY_IDS[dateMarker.getUTCDay()]); // only add the day-of-week class\n }\n\n return '' + ' 1 ? ' colspan=\"' + colspan + '\"' : '') + (otherAttrs ? ' ' + otherAttrs : '') + '>' + (isDateValid ? // don't make a link if the heading could represent multiple days, or if there's only one day (forceOff)\n buildGotoAnchorHtml(view, {\n date: dateMarker,\n forceOff: !datesRepDistinctDays || colCnt === 1\n }, innerHtml) : // if not valid, display text, but no link\n innerHtml) + '';\n}\n\nvar DayHeader =\n/** @class */\nfunction (_super) {\n __extends(DayHeader, _super);\n\n function DayHeader(context, parentEl) {\n var _this = _super.call(this, context) || this;\n\n parentEl.innerHTML = ''; // because might be nbsp\n\n parentEl.appendChild(_this.el = htmlToElement('
' + '' + '' + '
' + '
'));\n _this.thead = _this.el.querySelector('thead');\n return _this;\n }\n\n DayHeader.prototype.destroy = function () {\n removeElement(this.el);\n };\n\n DayHeader.prototype.render = function (props) {\n var dates = props.dates,\n datesRepDistinctDays = props.datesRepDistinctDays;\n var parts = [];\n\n if (props.renderIntroHtml) {\n parts.push(props.renderIntroHtml());\n }\n\n var colHeadFormat = createFormatter(this.opt('columnHeaderFormat') || computeFallbackHeaderFormat(datesRepDistinctDays, dates.length));\n\n for (var _i = 0, dates_1 = dates; _i < dates_1.length; _i++) {\n var date = dates_1[_i];\n parts.push(renderDateCell(date, props.dateProfile, datesRepDistinctDays, dates.length, colHeadFormat, this.context));\n }\n\n if (this.isRtl) {\n parts.reverse();\n }\n\n this.thead.innerHTML = '' + parts.join('') + '';\n };\n\n return DayHeader;\n}(Component);\n\nvar DaySeries =\n/** @class */\nfunction () {\n function DaySeries(range, dateProfileGenerator) {\n var date = range.start;\n var end = range.end;\n var indices = [];\n var dates = [];\n var dayIndex = -1;\n\n while (date < end) {\n // loop each day from start to end\n if (dateProfileGenerator.isHiddenDay(date)) {\n indices.push(dayIndex + 0.5); // mark that it's between indices\n } else {\n dayIndex++;\n indices.push(dayIndex);\n dates.push(date);\n }\n\n date = addDays(date, 1);\n }\n\n this.dates = dates;\n this.indices = indices;\n this.cnt = dates.length;\n }\n\n DaySeries.prototype.sliceRange = function (range) {\n var firstIndex = this.getDateDayIndex(range.start); // inclusive first index\n\n var lastIndex = this.getDateDayIndex(addDays(range.end, -1)); // inclusive last index\n\n var clippedFirstIndex = Math.max(0, firstIndex);\n var clippedLastIndex = Math.min(this.cnt - 1, lastIndex); // deal with in-between indices\n\n clippedFirstIndex = Math.ceil(clippedFirstIndex); // in-between starts round to next cell\n\n clippedLastIndex = Math.floor(clippedLastIndex); // in-between ends round to prev cell\n\n if (clippedFirstIndex <= clippedLastIndex) {\n return {\n firstIndex: clippedFirstIndex,\n lastIndex: clippedLastIndex,\n isStart: firstIndex === clippedFirstIndex,\n isEnd: lastIndex === clippedLastIndex\n };\n } else {\n return null;\n }\n }; // Given a date, returns its chronolocial cell-index from the first cell of the grid.\n // If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.\n // If before the first offset, returns a negative number.\n // If after the last offset, returns an offset past the last cell offset.\n // Only works for *start* dates of cells. Will not work for exclusive end dates for cells.\n\n\n DaySeries.prototype.getDateDayIndex = function (date) {\n var indices = this.indices;\n var dayOffset = Math.floor(diffDays(this.dates[0], date));\n\n if (dayOffset < 0) {\n return indices[0] - 1;\n } else if (dayOffset >= indices.length) {\n return indices[indices.length - 1] + 1;\n } else {\n return indices[dayOffset];\n }\n };\n\n return DaySeries;\n}();\n\nvar DayTable =\n/** @class */\nfunction () {\n function DayTable(daySeries, breakOnWeeks) {\n var dates = daySeries.dates;\n var daysPerRow;\n var firstDay;\n var rowCnt;\n\n if (breakOnWeeks) {\n // count columns until the day-of-week repeats\n firstDay = dates[0].getUTCDay();\n\n for (daysPerRow = 1; daysPerRow < dates.length; daysPerRow++) {\n if (dates[daysPerRow].getUTCDay() === firstDay) {\n break;\n }\n }\n\n rowCnt = Math.ceil(dates.length / daysPerRow);\n } else {\n rowCnt = 1;\n daysPerRow = dates.length;\n }\n\n this.rowCnt = rowCnt;\n this.colCnt = daysPerRow;\n this.daySeries = daySeries;\n this.cells = this.buildCells();\n this.headerDates = this.buildHeaderDates();\n }\n\n DayTable.prototype.buildCells = function () {\n var rows = [];\n\n for (var row = 0; row < this.rowCnt; row++) {\n var cells = [];\n\n for (var col = 0; col < this.colCnt; col++) {\n cells.push(this.buildCell(row, col));\n }\n\n rows.push(cells);\n }\n\n return rows;\n };\n\n DayTable.prototype.buildCell = function (row, col) {\n return {\n date: this.daySeries.dates[row * this.colCnt + col]\n };\n };\n\n DayTable.prototype.buildHeaderDates = function () {\n var dates = [];\n\n for (var col = 0; col < this.colCnt; col++) {\n dates.push(this.cells[0][col].date);\n }\n\n return dates;\n };\n\n DayTable.prototype.sliceRange = function (range) {\n var colCnt = this.colCnt;\n var seriesSeg = this.daySeries.sliceRange(range);\n var segs = [];\n\n if (seriesSeg) {\n var firstIndex = seriesSeg.firstIndex,\n lastIndex = seriesSeg.lastIndex;\n var index = firstIndex;\n\n while (index <= lastIndex) {\n var row = Math.floor(index / colCnt);\n var nextIndex = Math.min((row + 1) * colCnt, lastIndex + 1);\n segs.push({\n row: row,\n firstCol: index % colCnt,\n lastCol: (nextIndex - 1) % colCnt,\n isStart: seriesSeg.isStart && index === firstIndex,\n isEnd: seriesSeg.isEnd && nextIndex - 1 === lastIndex\n });\n index = nextIndex;\n }\n }\n\n return segs;\n };\n\n return DayTable;\n}();\n\nvar Slicer =\n/** @class */\nfunction () {\n function Slicer() {\n this.sliceBusinessHours = memoize(this._sliceBusinessHours);\n this.sliceDateSelection = memoize(this._sliceDateSpan);\n this.sliceEventStore = memoize(this._sliceEventStore);\n this.sliceEventDrag = memoize(this._sliceInteraction);\n this.sliceEventResize = memoize(this._sliceInteraction);\n }\n\n Slicer.prototype.sliceProps = function (props, dateProfile, nextDayThreshold, component) {\n var extraArgs = [];\n\n for (var _i = 4; _i < arguments.length; _i++) {\n extraArgs[_i - 4] = arguments[_i];\n }\n\n var eventUiBases = props.eventUiBases;\n var eventSegs = this.sliceEventStore.apply(this, [props.eventStore, eventUiBases, dateProfile, nextDayThreshold, component].concat(extraArgs));\n return {\n dateSelectionSegs: this.sliceDateSelection.apply(this, [props.dateSelection, eventUiBases, component].concat(extraArgs)),\n businessHourSegs: this.sliceBusinessHours.apply(this, [props.businessHours, dateProfile, nextDayThreshold, component].concat(extraArgs)),\n fgEventSegs: eventSegs.fg,\n bgEventSegs: eventSegs.bg,\n eventDrag: this.sliceEventDrag.apply(this, [props.eventDrag, eventUiBases, dateProfile, nextDayThreshold, component].concat(extraArgs)),\n eventResize: this.sliceEventResize.apply(this, [props.eventResize, eventUiBases, dateProfile, nextDayThreshold, component].concat(extraArgs)),\n eventSelection: props.eventSelection\n }; // TODO: give interactionSegs?\n };\n\n Slicer.prototype.sliceNowDate = function ( // does not memoize\n date, component) {\n var extraArgs = [];\n\n for (var _i = 2; _i < arguments.length; _i++) {\n extraArgs[_i - 2] = arguments[_i];\n }\n\n return this._sliceDateSpan.apply(this, [{\n range: {\n start: date,\n end: addMs(date, 1)\n },\n allDay: false\n }, {}, component].concat(extraArgs));\n };\n\n Slicer.prototype._sliceBusinessHours = function (businessHours, dateProfile, nextDayThreshold, component) {\n var extraArgs = [];\n\n for (var _i = 4; _i < arguments.length; _i++) {\n extraArgs[_i - 4] = arguments[_i];\n }\n\n if (!businessHours) {\n return [];\n }\n\n return this._sliceEventStore.apply(this, [expandRecurring(businessHours, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), component.calendar), {}, dateProfile, nextDayThreshold, component].concat(extraArgs)).bg;\n };\n\n Slicer.prototype._sliceEventStore = function (eventStore, eventUiBases, dateProfile, nextDayThreshold, component) {\n var extraArgs = [];\n\n for (var _i = 5; _i < arguments.length; _i++) {\n extraArgs[_i - 5] = arguments[_i];\n }\n\n if (eventStore) {\n var rangeRes = sliceEventStore(eventStore, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);\n return {\n bg: this.sliceEventRanges(rangeRes.bg, component, extraArgs),\n fg: this.sliceEventRanges(rangeRes.fg, component, extraArgs)\n };\n } else {\n return {\n bg: [],\n fg: []\n };\n }\n };\n\n Slicer.prototype._sliceInteraction = function (interaction, eventUiBases, dateProfile, nextDayThreshold, component) {\n var extraArgs = [];\n\n for (var _i = 5; _i < arguments.length; _i++) {\n extraArgs[_i - 5] = arguments[_i];\n }\n\n if (!interaction) {\n return null;\n }\n\n var rangeRes = sliceEventStore(interaction.mutatedEvents, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);\n return {\n segs: this.sliceEventRanges(rangeRes.fg, component, extraArgs),\n affectedInstances: interaction.affectedEvents.instances,\n isEvent: interaction.isEvent,\n sourceSeg: interaction.origSeg\n };\n };\n\n Slicer.prototype._sliceDateSpan = function (dateSpan, eventUiBases, component) {\n var extraArgs = [];\n\n for (var _i = 3; _i < arguments.length; _i++) {\n extraArgs[_i - 3] = arguments[_i];\n }\n\n if (!dateSpan) {\n return [];\n }\n\n var eventRange = fabricateEventRange(dateSpan, eventUiBases, component.calendar);\n var segs = this.sliceRange.apply(this, [dateSpan.range].concat(extraArgs));\n\n for (var _a = 0, segs_1 = segs; _a < segs_1.length; _a++) {\n var seg = segs_1[_a];\n seg.component = component;\n seg.eventRange = eventRange;\n }\n\n return segs;\n };\n /*\n \"complete\" seg means it has component and eventRange\n */\n\n\n Slicer.prototype.sliceEventRanges = function (eventRanges, component, // TODO: kill\n extraArgs) {\n var segs = [];\n\n for (var _i = 0, eventRanges_1 = eventRanges; _i < eventRanges_1.length; _i++) {\n var eventRange = eventRanges_1[_i];\n segs.push.apply(segs, this.sliceEventRange(eventRange, component, extraArgs));\n }\n\n return segs;\n };\n /*\n \"complete\" seg means it has component and eventRange\n */\n\n\n Slicer.prototype.sliceEventRange = function (eventRange, component, // TODO: kill\n extraArgs) {\n var segs = this.sliceRange.apply(this, [eventRange.range].concat(extraArgs));\n\n for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {\n var seg = segs_2[_i];\n seg.component = component;\n seg.eventRange = eventRange;\n seg.isStart = eventRange.isStart && seg.isStart;\n seg.isEnd = eventRange.isEnd && seg.isEnd;\n }\n\n return segs;\n };\n\n return Slicer;\n}();\n/*\nfor incorporating minTime/maxTime if appropriate\nTODO: should be part of DateProfile!\nTimelineDateProfile already does this btw\n*/\n\n\nfunction computeActiveRange(dateProfile, isComponentAllDay) {\n var range = dateProfile.activeRange;\n\n if (isComponentAllDay) {\n return range;\n }\n\n return {\n start: addMs(range.start, dateProfile.minTime.milliseconds),\n end: addMs(range.end, dateProfile.maxTime.milliseconds - 864e5) // 864e5 = ms in a day\n\n };\n} // exports\n// --------------------------------------------------------------------------------------------------\n\n\nvar version = '4.3.1';\nexport { Calendar, Component, DateComponent, DateEnv, DateProfileGenerator, DayHeader, DaySeries, DayTable, ElementDragging, ElementScrollController, EmitterMixin, EventApi, FgEventRenderer, FillRenderer, Interaction, Mixin, NamedTimeZoneImpl, PositionCache, ScrollComponent, ScrollController, Slicer, Splitter, Theme, View, WindowScrollController, addDays, addDurations, addMs, addWeeks, allowContextMenu, allowSelection, appendToElement, applyAll, applyMutationToEventStore, applyStyle, applyStyleProp, asRoughMinutes, asRoughMs, asRoughSeconds, buildGotoAnchorHtml, buildSegCompareObj, capitaliseFirstLetter, combineEventUis, compareByFieldSpec, compareByFieldSpecs, compareNumbers, compensateScroll, computeClippingRect, computeEdges, computeFallbackHeaderFormat, computeHeightAndMargins, computeInnerRect, computeRect, computeVisibleDayRange, config, constrainPoint, createDuration, createElement, createEmptyEventStore, createEventInstance, createFormatter, createPlugin, cssToStr, debounce, diffDates, diffDayAndTime, diffDays, diffPoints, diffWeeks, diffWholeDays, diffWholeWeeks, disableCursor, distributeHeight, elementClosest, elementMatches, enableCursor, eventTupleToStore, filterEventStoreDefs, filterHash, findChildren, findElements, flexibleCompare, forceClassName, formatDate, formatIsoTimeString, formatRange, getAllDayHtml, getClippingParents, getDayClasses, getElSeg, getRectCenter, getRelevantEvents, globalDefaults, greatestDurationDenominator, hasBgRendering, htmlEscape, htmlToElement, insertAfterElement, interactionSettingsStore, interactionSettingsToStore, intersectRanges, intersectRects, isArraysEqual, isDateSpansEqual, isInt, isInteractionValid, isMultiDayRange, isPropsEqual, isPropsValid, isSingleDay, isValidDate, listenBySelector, mapHash, matchCellWidths, memoize, memoizeOutput, memoizeRendering, mergeEventStores, multiplyDuration, padStart, parseBusinessHours, parseDragMeta, parseEventDef, parseFieldSpecs, parse as parseMarker, pointInsideRect, prependToElement, preventContextMenu, preventDefault, preventSelection, processScopedUiProps, rangeContainsMarker, rangeContainsRange, rangesEqual, rangesIntersect, refineProps, removeElement, removeExact, renderDateCell, requestJson, sliceEventStore, startOfDay, subtractInnerElHeight, translateRect, uncompensateScroll, undistributeHeight, unpromisify, version, whenTransitionDone, wholeDivideDurations };","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n * jQuery JavaScript Library v3.4.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2019-05-01T21:04Z\n */\n(function (global, factory) {\n \"use strict\";\n\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && _typeof(module.exports) === \"object\") {\n // For CommonJS and CommonJS-like environments where a proper `window`\n // is present, execute the factory and get jQuery.\n // For environments that do not have a `window` with a `document`\n // (such as Node.js), expose a factory as module.exports.\n // This accentuates the need for the creation of a real `window`.\n // e.g. var jQuery = require(\"jquery\")(window);\n // See ticket #14549 for more info.\n module.exports = global.document ? factory(global, true) : function (w) {\n if (!w.document) {\n throw new Error(\"jQuery requires a window with a document\");\n }\n\n return factory(w);\n };\n } else {\n factory(global);\n } // Pass this if window is not defined yet\n\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n // Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n // throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n // arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n // enough that all such attempts are guarded in a try block.\n \"use strict\";\n\n var arr = [];\n var document = window.document;\n var getProto = Object.getPrototypeOf;\n var _slice = arr.slice;\n var concat = arr.concat;\n var push = arr.push;\n var indexOf = arr.indexOf;\n var class2type = {};\n var toString = class2type.toString;\n var hasOwn = class2type.hasOwnProperty;\n var fnToString = hasOwn.toString;\n var ObjectFunctionString = fnToString.call(Object);\n var support = {};\n\n var isFunction = function isFunction(obj) {\n // Support: Chrome <=57, Firefox <=52\n // In some browsers, typeof returns \"function\" for HTML elements\n // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n // We don't want to classify *any* DOM node as a function.\n return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n };\n\n var isWindow = function isWindow(obj) {\n return obj != null && obj === obj.window;\n };\n\n var preservedScriptAttributes = {\n type: true,\n src: true,\n nonce: true,\n noModule: true\n };\n\n function DOMEval(code, node, doc) {\n doc = doc || document;\n var i,\n val,\n script = doc.createElement(\"script\");\n script.text = code;\n\n if (node) {\n for (i in preservedScriptAttributes) {\n // Support: Firefox 64+, Edge 18+\n // Some browsers don't support the \"nonce\" property on scripts.\n // On the other hand, just using `getAttribute` is not enough as\n // the `nonce` attribute is reset to an empty string whenever it\n // becomes browsing-context connected.\n // See https://github.com/whatwg/html/issues/2369\n // See https://html.spec.whatwg.org/#nonce-attributes\n // The `node.getAttribute` check was added for the sake of\n // `jQuery.globalEval` so that it can fake a nonce-containing node\n // via an object.\n val = node[i] || node.getAttribute && node.getAttribute(i);\n\n if (val) {\n script.setAttribute(i, val);\n }\n }\n }\n\n doc.head.appendChild(script).parentNode.removeChild(script);\n }\n\n function toType(obj) {\n if (obj == null) {\n return obj + \"\";\n } // Support: Android <=2.3 only (functionish RegExp)\n\n\n return _typeof(obj) === \"object\" || typeof obj === \"function\" ? class2type[toString.call(obj)] || \"object\" : _typeof(obj);\n }\n /* global Symbol */\n // Defining this global in .eslintrc.json would create a danger of using the global\n // unguarded in another place, it seems safer to define global only for this module\n\n\n var version = \"3.4.1\",\n // Define a local copy of jQuery\n jQuery = function jQuery(selector, context) {\n // The jQuery object is actually just the init constructor 'enhanced'\n // Need init if jQuery is called (just allow error to be thrown if not included)\n return new jQuery.fn.init(selector, context);\n },\n // Support: Android <=4.0 only\n // Make sure we trim BOM and NBSP\n rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\n jQuery.fn = jQuery.prototype = {\n // The current version of jQuery being used\n jquery: version,\n constructor: jQuery,\n // The default length of a jQuery object is 0\n length: 0,\n toArray: function toArray() {\n return _slice.call(this);\n },\n // Get the Nth element in the matched element set OR\n // Get the whole matched element set as a clean array\n get: function get(num) {\n // Return all the elements in a clean array\n if (num == null) {\n return _slice.call(this);\n } // Return just the one element from the set\n\n\n return num < 0 ? this[num + this.length] : this[num];\n },\n // Take an array of elements and push it onto the stack\n // (returning the new matched element set)\n pushStack: function pushStack(elems) {\n // Build a new jQuery matched element set\n var ret = jQuery.merge(this.constructor(), elems); // Add the old object onto the stack (as a reference)\n\n ret.prevObject = this; // Return the newly-formed element set\n\n return ret;\n },\n // Execute a callback for every element in the matched set.\n each: function each(callback) {\n return jQuery.each(this, callback);\n },\n map: function map(callback) {\n return this.pushStack(jQuery.map(this, function (elem, i) {\n return callback.call(elem, i, elem);\n }));\n },\n slice: function slice() {\n return this.pushStack(_slice.apply(this, arguments));\n },\n first: function first() {\n return this.eq(0);\n },\n last: function last() {\n return this.eq(-1);\n },\n eq: function eq(i) {\n var len = this.length,\n j = +i + (i < 0 ? len : 0);\n return this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n },\n end: function end() {\n return this.prevObject || this.constructor();\n },\n // For internal use only.\n // Behaves like an Array's method, not like a jQuery method.\n push: push,\n sort: arr.sort,\n splice: arr.splice\n };\n\n jQuery.extend = jQuery.fn.extend = function () {\n var options,\n name,\n src,\n copy,\n copyIsArray,\n clone,\n target = arguments[0] || {},\n i = 1,\n length = arguments.length,\n deep = false; // Handle a deep copy situation\n\n if (typeof target === \"boolean\") {\n deep = target; // Skip the boolean and the target\n\n target = arguments[i] || {};\n i++;\n } // Handle case when target is a string or something (possible in deep copy)\n\n\n if (_typeof(target) !== \"object\" && !isFunction(target)) {\n target = {};\n } // Extend jQuery itself if only one argument is passed\n\n\n if (i === length) {\n target = this;\n i--;\n }\n\n for (; i < length; i++) {\n // Only deal with non-null/undefined values\n if ((options = arguments[i]) != null) {\n // Extend the base object\n for (name in options) {\n copy = options[name]; // Prevent Object.prototype pollution\n // Prevent never-ending loop\n\n if (name === \"__proto__\" || target === copy) {\n continue;\n } // Recurse if we're merging plain objects or arrays\n\n\n if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {\n src = target[name]; // Ensure proper type for the source value\n\n if (copyIsArray && !Array.isArray(src)) {\n clone = [];\n } else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n clone = {};\n } else {\n clone = src;\n }\n\n copyIsArray = false; // Never move original objects, clone them\n\n target[name] = jQuery.extend(deep, clone, copy); // Don't bring in undefined values\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n } // Return the modified object\n\n\n return target;\n };\n\n jQuery.extend({\n // Unique for each copy of jQuery on the page\n expando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n // Assume jQuery is ready without the ready module\n isReady: true,\n error: function error(msg) {\n throw new Error(msg);\n },\n noop: function noop() {},\n isPlainObject: function isPlainObject(obj) {\n var proto, Ctor; // Detect obvious negatives\n // Use toString instead of jQuery.type to catch host objects\n\n if (!obj || toString.call(obj) !== \"[object Object]\") {\n return false;\n }\n\n proto = getProto(obj); // Objects with no prototype (e.g., `Object.create( null )`) are plain\n\n if (!proto) {\n return true;\n } // Objects with prototype are plain iff they were constructed by a global Object function\n\n\n Ctor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n return typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n },\n isEmptyObject: function isEmptyObject(obj) {\n var name;\n\n for (name in obj) {\n return false;\n }\n\n return true;\n },\n // Evaluates a script in a global context\n globalEval: function globalEval(code, options) {\n DOMEval(code, {\n nonce: options && options.nonce\n });\n },\n each: function each(obj, callback) {\n var length,\n i = 0;\n\n if (isArrayLike(obj)) {\n length = obj.length;\n\n for (; i < length; i++) {\n if (callback.call(obj[i], i, obj[i]) === false) {\n break;\n }\n }\n } else {\n for (i in obj) {\n if (callback.call(obj[i], i, obj[i]) === false) {\n break;\n }\n }\n }\n\n return obj;\n },\n // Support: Android <=4.0 only\n trim: function trim(text) {\n return text == null ? \"\" : (text + \"\").replace(rtrim, \"\");\n },\n // results is for internal usage only\n makeArray: function makeArray(arr, results) {\n var ret = results || [];\n\n if (arr != null) {\n if (isArrayLike(Object(arr))) {\n jQuery.merge(ret, typeof arr === \"string\" ? [arr] : arr);\n } else {\n push.call(ret, arr);\n }\n }\n\n return ret;\n },\n inArray: function inArray(elem, arr, i) {\n return arr == null ? -1 : indexOf.call(arr, elem, i);\n },\n // Support: Android <=4.0 only, PhantomJS 1 only\n // push.apply(_, arraylike) throws on ancient WebKit\n merge: function merge(first, second) {\n var len = +second.length,\n j = 0,\n i = first.length;\n\n for (; j < len; j++) {\n first[i++] = second[j];\n }\n\n first.length = i;\n return first;\n },\n grep: function grep(elems, callback, invert) {\n var callbackInverse,\n matches = [],\n i = 0,\n length = elems.length,\n callbackExpect = !invert; // Go through the array, only saving the items\n // that pass the validator function\n\n for (; i < length; i++) {\n callbackInverse = !callback(elems[i], i);\n\n if (callbackInverse !== callbackExpect) {\n matches.push(elems[i]);\n }\n }\n\n return matches;\n },\n // arg is for internal usage only\n map: function map(elems, callback, arg) {\n var length,\n value,\n i = 0,\n ret = []; // Go through the array, translating each of the items to their new values\n\n if (isArrayLike(elems)) {\n length = elems.length;\n\n for (; i < length; i++) {\n value = callback(elems[i], i, arg);\n\n if (value != null) {\n ret.push(value);\n }\n } // Go through every key on the object,\n\n } else {\n for (i in elems) {\n value = callback(elems[i], i, arg);\n\n if (value != null) {\n ret.push(value);\n }\n }\n } // Flatten any nested arrays\n\n\n return concat.apply([], ret);\n },\n // A global GUID counter for objects\n guid: 1,\n // jQuery.support is not used in Core but other projects attach their\n // properties to it so it needs to exist.\n support: support\n });\n\n if (typeof Symbol === \"function\") {\n jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n } // Populate the class2type map\n\n\n jQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"), function (i, name) {\n class2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n });\n\n function isArrayLike(obj) {\n // Support: real iOS 8.2 only (not reproducible in simulator)\n // `in` check used to prevent JIT error (gh-2145)\n // hasOwn isn't used here due to false negatives\n // regarding Nodelist length in IE\n var length = !!obj && \"length\" in obj && obj.length,\n type = toType(obj);\n\n if (isFunction(obj) || isWindow(obj)) {\n return false;\n }\n\n return type === \"array\" || length === 0 || typeof length === \"number\" && length > 0 && length - 1 in obj;\n }\n\n var Sizzle =\n /*!\n * Sizzle CSS Selector Engine v2.3.4\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2019-04-08\n */\n function (window) {\n var i,\n support,\n Expr,\n getText,\n isXML,\n tokenize,\n compile,\n select,\n outermostContext,\n sortInput,\n hasDuplicate,\n // Local document vars\n setDocument,\n document,\n docElem,\n documentIsHTML,\n rbuggyQSA,\n rbuggyMatches,\n matches,\n contains,\n // Instance-specific data\n expando = \"sizzle\" + 1 * new Date(),\n preferredDoc = window.document,\n dirruns = 0,\n done = 0,\n classCache = createCache(),\n tokenCache = createCache(),\n compilerCache = createCache(),\n nonnativeSelectorCache = createCache(),\n sortOrder = function sortOrder(a, b) {\n if (a === b) {\n hasDuplicate = true;\n }\n\n return 0;\n },\n // Instance methods\n hasOwn = {}.hasOwnProperty,\n arr = [],\n pop = arr.pop,\n push_native = arr.push,\n push = arr.push,\n slice = arr.slice,\n // Use a stripped-down indexOf as it's faster than native\n // https://jsperf.com/thor-indexof-vs-for/5\n indexOf = function indexOf(list, elem) {\n var i = 0,\n len = list.length;\n\n for (; i < len; i++) {\n if (list[i] === elem) {\n return i;\n }\n }\n\n return -1;\n },\n booleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n // Regular expressions\n // http://www.w3.org/TR/css3-selectors/#whitespace\n whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n identifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace + // Operator (capture 2)\n \"*([*^$|!~]?=)\" + whitespace + // \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n \"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace + \"*\\\\]\",\n pseudos = \":(\" + identifier + \")(?:\\\\((\" + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n // 1. quoted (capture 3; capture 4 or capture 5)\n \"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" + // 2. simple (capture 6)\n \"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" + // 3. anything else (capture 2)\n \".*\" + \")\\\\)|)\",\n // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n rwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n rtrim = new RegExp(\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\"),\n rcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n rcombinators = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\"),\n rdescend = new RegExp(whitespace + \"|>\"),\n rpseudo = new RegExp(pseudos),\n ridentifier = new RegExp(\"^\" + identifier + \"$\"),\n matchExpr = {\n \"ID\": new RegExp(\"^#(\" + identifier + \")\"),\n \"CLASS\": new RegExp(\"^\\\\.(\" + identifier + \")\"),\n \"TAG\": new RegExp(\"^(\" + identifier + \"|[*])\"),\n \"ATTR\": new RegExp(\"^\" + attributes),\n \"PSEUDO\": new RegExp(\"^\" + pseudos),\n \"CHILD\": new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n \"bool\": new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n // For use in libraries implementing .is()\n // We use this for POS matching in `select`\n \"needsContext\": new RegExp(\"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n },\n rhtml = /HTML$/i,\n rinputs = /^(?:input|select|textarea|button)$/i,\n rheader = /^h\\d$/i,\n rnative = /^[^{]+\\{\\s*\\[native \\w/,\n // Easily-parseable/retrievable ID or TAG or CLASS selectors\n rquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n rsibling = /[+~]/,\n // CSS escapes\n // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n runescape = new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\"),\n funescape = function funescape(_, escaped, escapedWhitespace) {\n var high = \"0x\" + escaped - 0x10000; // NaN means non-codepoint\n // Support: Firefox<24\n // Workaround erroneous numeric interpretation of +\"0x\"\n\n return high !== high || escapedWhitespace ? escaped : high < 0 ? // BMP codepoint\n String.fromCharCode(high + 0x10000) : // Supplemental Plane codepoint (surrogate pair)\n String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n },\n // CSS string/identifier serialization\n // https://drafts.csswg.org/cssom/#common-serializing-idioms\n rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n fcssescape = function fcssescape(ch, asCodePoint) {\n if (asCodePoint) {\n // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n if (ch === \"\\0\") {\n return \"\\uFFFD\";\n } // Control characters and (dependent upon position) numbers get escaped as code points\n\n\n return ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n } // Other potentially-special ASCII characters get backslash-escaped\n\n\n return \"\\\\\" + ch;\n },\n // Used for iframes\n // See setDocument()\n // Removing the function wrapper causes a \"Permission Denied\"\n // error in IE\n unloadHandler = function unloadHandler() {\n setDocument();\n },\n inDisabledFieldset = addCombinator(function (elem) {\n return elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n }, {\n dir: \"parentNode\",\n next: \"legend\"\n }); // Optimize for push.apply( _, NodeList )\n\n\n try {\n push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes); // Support: Android<4.0\n // Detect silently failing push.apply\n\n arr[preferredDoc.childNodes.length].nodeType;\n } catch (e) {\n push = {\n apply: arr.length ? // Leverage slice if possible\n function (target, els) {\n push_native.apply(target, slice.call(els));\n } : // Support: IE<9\n // Otherwise append directly\n function (target, els) {\n var j = target.length,\n i = 0; // Can't trust NodeList.length\n\n while (target[j++] = els[i++]) {}\n\n target.length = j - 1;\n }\n };\n }\n\n function Sizzle(selector, context, results, seed) {\n var m,\n i,\n elem,\n nid,\n match,\n groups,\n newSelector,\n newContext = context && context.ownerDocument,\n // nodeType defaults to 9, since context defaults to document\n nodeType = context ? context.nodeType : 9;\n results = results || []; // Return early from calls with invalid selector or context\n\n if (typeof selector !== \"string\" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n return results;\n } // Try to shortcut find operations (as opposed to filters) in HTML documents\n\n\n if (!seed) {\n if ((context ? context.ownerDocument || context : preferredDoc) !== document) {\n setDocument(context);\n }\n\n context = context || document;\n\n if (documentIsHTML) {\n // If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n // (excepting DocumentFragment context, where the methods don't exist)\n if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n // ID selector\n if (m = match[1]) {\n // Document context\n if (nodeType === 9) {\n if (elem = context.getElementById(m)) {\n // Support: IE, Opera, Webkit\n // TODO: identify versions\n // getElementById can match elements by name instead of ID\n if (elem.id === m) {\n results.push(elem);\n return results;\n }\n } else {\n return results;\n } // Element context\n\n } else {\n // Support: IE, Opera, Webkit\n // TODO: identify versions\n // getElementById can match elements by name instead of ID\n if (newContext && (elem = newContext.getElementById(m)) && contains(context, elem) && elem.id === m) {\n results.push(elem);\n return results;\n }\n } // Type selector\n\n } else if (match[2]) {\n push.apply(results, context.getElementsByTagName(selector));\n return results; // Class selector\n } else if ((m = match[3]) && support.getElementsByClassName && context.getElementsByClassName) {\n push.apply(results, context.getElementsByClassName(m));\n return results;\n }\n } // Take advantage of querySelectorAll\n\n\n if (support.qsa && !nonnativeSelectorCache[selector + \" \"] && (!rbuggyQSA || !rbuggyQSA.test(selector)) && ( // Support: IE 8 only\n // Exclude object elements\n nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\")) {\n newSelector = selector;\n newContext = context; // qSA considers elements outside a scoping root when evaluating child or\n // descendant combinators, which is not what we want.\n // In such cases, we work around the behavior by prefixing every selector in the\n // list with an ID selector referencing the scope context.\n // Thanks to Andrew Dupont for this technique.\n\n if (nodeType === 1 && rdescend.test(selector)) {\n // Capture the context ID, setting it first if necessary\n if (nid = context.getAttribute(\"id\")) {\n nid = nid.replace(rcssescape, fcssescape);\n } else {\n context.setAttribute(\"id\", nid = expando);\n } // Prefix every selector in the list\n\n\n groups = tokenize(selector);\n i = groups.length;\n\n while (i--) {\n groups[i] = \"#\" + nid + \" \" + toSelector(groups[i]);\n }\n\n newSelector = groups.join(\",\"); // Expand context for sibling selectors\n\n newContext = rsibling.test(selector) && testContext(context.parentNode) || context;\n }\n\n try {\n push.apply(results, newContext.querySelectorAll(newSelector));\n return results;\n } catch (qsaError) {\n nonnativeSelectorCache(selector, true);\n } finally {\n if (nid === expando) {\n context.removeAttribute(\"id\");\n }\n }\n }\n }\n } // All others\n\n\n return select(selector.replace(rtrim, \"$1\"), context, results, seed);\n }\n /**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\n\n\n function createCache() {\n var keys = [];\n\n function cache(key, value) {\n // Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n if (keys.push(key + \" \") > Expr.cacheLength) {\n // Only keep the most recent entries\n delete cache[keys.shift()];\n }\n\n return cache[key + \" \"] = value;\n }\n\n return cache;\n }\n /**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\n\n\n function markFunction(fn) {\n fn[expando] = true;\n return fn;\n }\n /**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\n\n\n function assert(fn) {\n var el = document.createElement(\"fieldset\");\n\n try {\n return !!fn(el);\n } catch (e) {\n return false;\n } finally {\n // Remove from its parent by default\n if (el.parentNode) {\n el.parentNode.removeChild(el);\n } // release memory in IE\n\n\n el = null;\n }\n }\n /**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\n\n\n function addHandle(attrs, handler) {\n var arr = attrs.split(\"|\"),\n i = arr.length;\n\n while (i--) {\n Expr.attrHandle[arr[i]] = handler;\n }\n }\n /**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\n\n\n function siblingCheck(a, b) {\n var cur = b && a,\n diff = cur && a.nodeType === 1 && b.nodeType === 1 && a.sourceIndex - b.sourceIndex; // Use IE sourceIndex if available on both nodes\n\n if (diff) {\n return diff;\n } // Check if b follows a\n\n\n if (cur) {\n while (cur = cur.nextSibling) {\n if (cur === b) {\n return -1;\n }\n }\n }\n\n return a ? 1 : -1;\n }\n /**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\n\n\n function createInputPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return name === \"input\" && elem.type === type;\n };\n }\n /**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\n\n\n function createButtonPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return (name === \"input\" || name === \"button\") && elem.type === type;\n };\n }\n /**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\n\n\n function createDisabledPseudo(disabled) {\n // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n return function (elem) {\n // Only certain elements can match :enabled or :disabled\n // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n if (\"form\" in elem) {\n // Check for inherited disabledness on relevant non-disabled elements:\n // * listed form-associated elements in a disabled fieldset\n // https://html.spec.whatwg.org/multipage/forms.html#category-listed\n // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n // * option elements in a disabled optgroup\n // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n // All such elements have a \"form\" property.\n if (elem.parentNode && elem.disabled === false) {\n // Option elements defer to a parent optgroup if present\n if (\"label\" in elem) {\n if (\"label\" in elem.parentNode) {\n return elem.parentNode.disabled === disabled;\n } else {\n return elem.disabled === disabled;\n }\n } // Support: IE 6 - 11\n // Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\n\n return elem.isDisabled === disabled || // Where there is no isDisabled, check manually\n\n /* jshint -W018 */\n elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled;\n }\n\n return elem.disabled === disabled; // Try to winnow out elements that can't be disabled before trusting the disabled property.\n // Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n // even exist on them, let alone have a boolean value.\n } else if (\"label\" in elem) {\n return elem.disabled === disabled;\n } // Remaining elements are neither :enabled nor :disabled\n\n\n return false;\n };\n }\n /**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\n\n\n function createPositionalPseudo(fn) {\n return markFunction(function (argument) {\n argument = +argument;\n return markFunction(function (seed, matches) {\n var j,\n matchIndexes = fn([], seed.length, argument),\n i = matchIndexes.length; // Match elements found at the specified indexes\n\n while (i--) {\n if (seed[j = matchIndexes[i]]) {\n seed[j] = !(matches[j] = seed[j]);\n }\n }\n });\n });\n }\n /**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\n\n\n function testContext(context) {\n return context && typeof context.getElementsByTagName !== \"undefined\" && context;\n } // Expose support vars for convenience\n\n\n support = Sizzle.support = {};\n /**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\n\n isXML = Sizzle.isXML = function (elem) {\n var namespace = elem.namespaceURI,\n docElem = (elem.ownerDocument || elem).documentElement; // Support: IE <=8\n // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n // https://bugs.jquery.com/ticket/4833\n\n return !rhtml.test(namespace || docElem && docElem.nodeName || \"HTML\");\n };\n /**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\n\n\n setDocument = Sizzle.setDocument = function (node) {\n var hasCompare,\n subWindow,\n doc = node ? node.ownerDocument || node : preferredDoc; // Return early if doc is invalid or already selected\n\n if (doc === document || doc.nodeType !== 9 || !doc.documentElement) {\n return document;\n } // Update global variables\n\n\n document = doc;\n docElem = document.documentElement;\n documentIsHTML = !isXML(document); // Support: IE 9-11, Edge\n // Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\n if (preferredDoc !== document && (subWindow = document.defaultView) && subWindow.top !== subWindow) {\n // Support: IE 11, Edge\n if (subWindow.addEventListener) {\n subWindow.addEventListener(\"unload\", unloadHandler, false); // Support: IE 9 - 10 only\n } else if (subWindow.attachEvent) {\n subWindow.attachEvent(\"onunload\", unloadHandler);\n }\n }\n /* Attributes\n ---------------------------------------------------------------------- */\n // Support: IE<8\n // Verify that getAttribute really returns attributes and not properties\n // (excepting IE8 booleans)\n\n\n support.attributes = assert(function (el) {\n el.className = \"i\";\n return !el.getAttribute(\"className\");\n });\n /* getElement(s)By*\n ---------------------------------------------------------------------- */\n // Check if getElementsByTagName(\"*\") returns only elements\n\n support.getElementsByTagName = assert(function (el) {\n el.appendChild(document.createComment(\"\"));\n return !el.getElementsByTagName(\"*\").length;\n }); // Support: IE<9\n\n support.getElementsByClassName = rnative.test(document.getElementsByClassName); // Support: IE<10\n // Check if getElementById returns elements by name\n // The broken getElementById methods don't pick up programmatically-set names,\n // so use a roundabout getElementsByName test\n\n support.getById = assert(function (el) {\n docElem.appendChild(el).id = expando;\n return !document.getElementsByName || !document.getElementsByName(expando).length;\n }); // ID filter and find\n\n if (support.getById) {\n Expr.filter[\"ID\"] = function (id) {\n var attrId = id.replace(runescape, funescape);\n return function (elem) {\n return elem.getAttribute(\"id\") === attrId;\n };\n };\n\n Expr.find[\"ID\"] = function (id, context) {\n if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n var elem = context.getElementById(id);\n return elem ? [elem] : [];\n }\n };\n } else {\n Expr.filter[\"ID\"] = function (id) {\n var attrId = id.replace(runescape, funescape);\n return function (elem) {\n var node = typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");\n return node && node.value === attrId;\n };\n }; // Support: IE 6 - 7 only\n // getElementById is not reliable as a find shortcut\n\n\n Expr.find[\"ID\"] = function (id, context) {\n if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n var node,\n i,\n elems,\n elem = context.getElementById(id);\n\n if (elem) {\n // Verify the id attribute\n node = elem.getAttributeNode(\"id\");\n\n if (node && node.value === id) {\n return [elem];\n } // Fall back on getElementsByName\n\n\n elems = context.getElementsByName(id);\n i = 0;\n\n while (elem = elems[i++]) {\n node = elem.getAttributeNode(\"id\");\n\n if (node && node.value === id) {\n return [elem];\n }\n }\n }\n\n return [];\n }\n };\n } // Tag\n\n\n Expr.find[\"TAG\"] = support.getElementsByTagName ? function (tag, context) {\n if (typeof context.getElementsByTagName !== \"undefined\") {\n return context.getElementsByTagName(tag); // DocumentFragment nodes don't have gEBTN\n } else if (support.qsa) {\n return context.querySelectorAll(tag);\n }\n } : function (tag, context) {\n var elem,\n tmp = [],\n i = 0,\n // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n results = context.getElementsByTagName(tag); // Filter out possible comments\n\n if (tag === \"*\") {\n while (elem = results[i++]) {\n if (elem.nodeType === 1) {\n tmp.push(elem);\n }\n }\n\n return tmp;\n }\n\n return results;\n }; // Class\n\n Expr.find[\"CLASS\"] = support.getElementsByClassName && function (className, context) {\n if (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n return context.getElementsByClassName(className);\n }\n };\n /* QSA/matchesSelector\n ---------------------------------------------------------------------- */\n // QSA and matchesSelector support\n // matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\n\n rbuggyMatches = []; // qSa(:focus) reports false when true (Chrome 21)\n // We allow this because of a bug in IE8/9 that throws an error\n // whenever `document.activeElement` is accessed on an iframe\n // So, we allow :focus to pass through QSA all the time to avoid the IE error\n // See https://bugs.jquery.com/ticket/13378\n\n rbuggyQSA = [];\n\n if (support.qsa = rnative.test(document.querySelectorAll)) {\n // Build QSA regex\n // Regex strategy adopted from Diego Perini\n assert(function (el) {\n // Select is set to empty string on purpose\n // This is to test IE's treatment of not explicitly\n // setting a boolean content attribute,\n // since its presence should be enough\n // https://bugs.jquery.com/ticket/12359\n docElem.appendChild(el).innerHTML = \"\" + \"\"; // Support: IE8, Opera 11-12.16\n // Nothing should be selected when empty strings follow ^= or $= or *=\n // The test attribute must be unknown in Opera but \"safe\" for WinRT\n // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\n if (el.querySelectorAll(\"[msallowcapture^='']\").length) {\n rbuggyQSA.push(\"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\");\n } // Support: IE8\n // Boolean attributes and \"value\" are not treated correctly\n\n\n if (!el.querySelectorAll(\"[selected]\").length) {\n rbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n } // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\n\n if (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n rbuggyQSA.push(\"~=\");\n } // Webkit/Opera - :checked should return selected option elements\n // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n // IE8 throws error here and will not see later tests\n\n\n if (!el.querySelectorAll(\":checked\").length) {\n rbuggyQSA.push(\":checked\");\n } // Support: Safari 8+, iOS 8+\n // https://bugs.webkit.org/show_bug.cgi?id=136851\n // In-page `selector#id sibling-combinator selector` fails\n\n\n if (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n rbuggyQSA.push(\".#.+[+~]\");\n }\n });\n assert(function (el) {\n el.innerHTML = \"\" + \"\"; // Support: Windows 8 Native Apps\n // The type and name attributes are restricted during .innerHTML assignment\n\n var input = document.createElement(\"input\");\n input.setAttribute(\"type\", \"hidden\");\n el.appendChild(input).setAttribute(\"name\", \"D\"); // Support: IE8\n // Enforce case-sensitivity of name attribute\n\n if (el.querySelectorAll(\"[name=d]\").length) {\n rbuggyQSA.push(\"name\" + whitespace + \"*[*^$|!~]?=\");\n } // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n // IE8 throws error here and will not see later tests\n\n\n if (el.querySelectorAll(\":enabled\").length !== 2) {\n rbuggyQSA.push(\":enabled\", \":disabled\");\n } // Support: IE9-11+\n // IE's :disabled selector does not pick up the children of disabled fieldsets\n\n\n docElem.appendChild(el).disabled = true;\n\n if (el.querySelectorAll(\":disabled\").length !== 2) {\n rbuggyQSA.push(\":enabled\", \":disabled\");\n } // Opera 10-11 does not throw on post-comma invalid pseudos\n\n\n el.querySelectorAll(\"*,:x\");\n rbuggyQSA.push(\",.*:\");\n });\n }\n\n if (support.matchesSelector = rnative.test(matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector)) {\n assert(function (el) {\n // Check to see if it's possible to do matchesSelector\n // on a disconnected node (IE 9)\n support.disconnectedMatch = matches.call(el, \"*\"); // This should fail with an exception\n // Gecko does not error, returns false instead\n\n matches.call(el, \"[s!='']:x\");\n rbuggyMatches.push(\"!=\", pseudos);\n });\n }\n\n rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join(\"|\"));\n /* Contains\n ---------------------------------------------------------------------- */\n\n hasCompare = rnative.test(docElem.compareDocumentPosition); // Element contains another\n // Purposefully self-exclusive\n // As in, an element does not contain itself\n\n contains = hasCompare || rnative.test(docElem.contains) ? function (a, b) {\n var adown = a.nodeType === 9 ? a.documentElement : a,\n bup = b && b.parentNode;\n return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));\n } : function (a, b) {\n if (b) {\n while (b = b.parentNode) {\n if (b === a) {\n return true;\n }\n }\n }\n\n return false;\n };\n /* Sorting\n ---------------------------------------------------------------------- */\n // Document order sorting\n\n sortOrder = hasCompare ? function (a, b) {\n // Flag for duplicate removal\n if (a === b) {\n hasDuplicate = true;\n return 0;\n } // Sort on method existence if only one input has compareDocumentPosition\n\n\n var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\n if (compare) {\n return compare;\n } // Calculate position if both inputs belong to the same document\n\n\n compare = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : // Otherwise we know they are disconnected\n 1; // Disconnected nodes\n\n if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {\n // Choose the first element that is related to our preferred document\n if (a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a)) {\n return -1;\n }\n\n if (b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b)) {\n return 1;\n } // Maintain original order\n\n\n return sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0;\n }\n\n return compare & 4 ? -1 : 1;\n } : function (a, b) {\n // Exit early if the nodes are identical\n if (a === b) {\n hasDuplicate = true;\n return 0;\n }\n\n var cur,\n i = 0,\n aup = a.parentNode,\n bup = b.parentNode,\n ap = [a],\n bp = [b]; // Parentless nodes are either documents or disconnected\n\n if (!aup || !bup) {\n return a === document ? -1 : b === document ? 1 : aup ? -1 : bup ? 1 : sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0; // If the nodes are siblings, we can do a quick check\n } else if (aup === bup) {\n return siblingCheck(a, b);\n } // Otherwise we need full lists of their ancestors for comparison\n\n\n cur = a;\n\n while (cur = cur.parentNode) {\n ap.unshift(cur);\n }\n\n cur = b;\n\n while (cur = cur.parentNode) {\n bp.unshift(cur);\n } // Walk down the tree looking for a discrepancy\n\n\n while (ap[i] === bp[i]) {\n i++;\n }\n\n return i ? // Do a sibling check if the nodes have a common ancestor\n siblingCheck(ap[i], bp[i]) : // Otherwise nodes in our document sort first\n ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0;\n };\n return document;\n };\n\n Sizzle.matches = function (expr, elements) {\n return Sizzle(expr, null, null, elements);\n };\n\n Sizzle.matchesSelector = function (elem, expr) {\n // Set document vars if needed\n if ((elem.ownerDocument || elem) !== document) {\n setDocument(elem);\n }\n\n if (support.matchesSelector && documentIsHTML && !nonnativeSelectorCache[expr + \" \"] && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {\n try {\n var ret = matches.call(elem, expr); // IE 9's matchesSelector returns false on disconnected nodes\n\n if (ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document\n // fragment in IE 9\n elem.document && elem.document.nodeType !== 11) {\n return ret;\n }\n } catch (e) {\n nonnativeSelectorCache(expr, true);\n }\n }\n\n return Sizzle(expr, document, null, [elem]).length > 0;\n };\n\n Sizzle.contains = function (context, elem) {\n // Set document vars if needed\n if ((context.ownerDocument || context) !== document) {\n setDocument(context);\n }\n\n return contains(context, elem);\n };\n\n Sizzle.attr = function (elem, name) {\n // Set document vars if needed\n if ((elem.ownerDocument || elem) !== document) {\n setDocument(elem);\n }\n\n var fn = Expr.attrHandle[name.toLowerCase()],\n // Don't get fooled by Object.prototype properties (jQuery #13807)\n val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;\n return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n };\n\n Sizzle.escape = function (sel) {\n return (sel + \"\").replace(rcssescape, fcssescape);\n };\n\n Sizzle.error = function (msg) {\n throw new Error(\"Syntax error, unrecognized expression: \" + msg);\n };\n /**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\n\n\n Sizzle.uniqueSort = function (results) {\n var elem,\n duplicates = [],\n j = 0,\n i = 0; // Unless we *know* we can detect duplicates, assume their presence\n\n hasDuplicate = !support.detectDuplicates;\n sortInput = !support.sortStable && results.slice(0);\n results.sort(sortOrder);\n\n if (hasDuplicate) {\n while (elem = results[i++]) {\n if (elem === results[i]) {\n j = duplicates.push(i);\n }\n }\n\n while (j--) {\n results.splice(duplicates[j], 1);\n }\n } // Clear input after sorting to release objects\n // See https://github.com/jquery/sizzle/pull/225\n\n\n sortInput = null;\n return results;\n };\n /**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\n\n\n getText = Sizzle.getText = function (elem) {\n var node,\n ret = \"\",\n i = 0,\n nodeType = elem.nodeType;\n\n if (!nodeType) {\n // If no nodeType, this is expected to be an array\n while (node = elem[i++]) {\n // Do not traverse comment nodes\n ret += getText(node);\n }\n } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n // Use textContent for elements\n // innerText usage removed for consistency of new lines (jQuery #11153)\n if (typeof elem.textContent === \"string\") {\n return elem.textContent;\n } else {\n // Traverse its children\n for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n ret += getText(elem);\n }\n }\n } else if (nodeType === 3 || nodeType === 4) {\n return elem.nodeValue;\n } // Do not include comment or processing instruction nodes\n\n\n return ret;\n };\n\n Expr = Sizzle.selectors = {\n // Can be adjusted by the user\n cacheLength: 50,\n createPseudo: markFunction,\n match: matchExpr,\n attrHandle: {},\n find: {},\n relative: {\n \">\": {\n dir: \"parentNode\",\n first: true\n },\n \" \": {\n dir: \"parentNode\"\n },\n \"+\": {\n dir: \"previousSibling\",\n first: true\n },\n \"~\": {\n dir: \"previousSibling\"\n }\n },\n preFilter: {\n \"ATTR\": function ATTR(match) {\n match[1] = match[1].replace(runescape, funescape); // Move the given value to match[3] whether quoted or unquoted\n\n match[3] = (match[3] || match[4] || match[5] || \"\").replace(runescape, funescape);\n\n if (match[2] === \"~=\") {\n match[3] = \" \" + match[3] + \" \";\n }\n\n return match.slice(0, 4);\n },\n \"CHILD\": function CHILD(match) {\n /* matches from matchExpr[\"CHILD\"]\n \t1 type (only|nth|...)\n \t2 what (child|of-type)\n \t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n \t4 xn-component of xn+y argument ([+-]?\\d*n|)\n \t5 sign of xn-component\n \t6 x of xn-component\n \t7 sign of y-component\n \t8 y of y-component\n */\n match[1] = match[1].toLowerCase();\n\n if (match[1].slice(0, 3) === \"nth\") {\n // nth-* requires argument\n if (!match[3]) {\n Sizzle.error(match[0]);\n } // numeric x and y parameters for Expr.filter.CHILD\n // remember that false/true cast respectively to 0/1\n\n\n match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === \"even\" || match[3] === \"odd\"));\n match[5] = +(match[7] + match[8] || match[3] === \"odd\"); // other types prohibit arguments\n } else if (match[3]) {\n Sizzle.error(match[0]);\n }\n\n return match;\n },\n \"PSEUDO\": function PSEUDO(match) {\n var excess,\n unquoted = !match[6] && match[2];\n\n if (matchExpr[\"CHILD\"].test(match[0])) {\n return null;\n } // Accept quoted arguments as-is\n\n\n if (match[3]) {\n match[2] = match[4] || match[5] || \"\"; // Strip excess characters from unquoted arguments\n } else if (unquoted && rpseudo.test(unquoted) && ( // Get excess from tokenize (recursively)\n excess = tokenize(unquoted, true)) && ( // advance to the next closing parenthesis\n excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n // excess is a negative index\n match[0] = match[0].slice(0, excess);\n match[2] = unquoted.slice(0, excess);\n } // Return only captures needed by the pseudo filter method (type and argument)\n\n\n return match.slice(0, 3);\n }\n },\n filter: {\n \"TAG\": function TAG(nodeNameSelector) {\n var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n return nodeNameSelector === \"*\" ? function () {\n return true;\n } : function (elem) {\n return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n };\n },\n \"CLASS\": function CLASS(className) {\n var pattern = classCache[className + \" \"];\n return pattern || (pattern = new RegExp(\"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\")) && classCache(className, function (elem) {\n return pattern.test(typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\");\n });\n },\n \"ATTR\": function ATTR(name, operator, check) {\n return function (elem) {\n var result = Sizzle.attr(elem, name);\n\n if (result == null) {\n return operator === \"!=\";\n }\n\n if (!operator) {\n return true;\n }\n\n result += \"\";\n return operator === \"=\" ? result === check : operator === \"!=\" ? result !== check : operator === \"^=\" ? check && result.indexOf(check) === 0 : operator === \"*=\" ? check && result.indexOf(check) > -1 : operator === \"$=\" ? check && result.slice(-check.length) === check : operator === \"~=\" ? (\" \" + result.replace(rwhitespace, \" \") + \" \").indexOf(check) > -1 : operator === \"|=\" ? result === check || result.slice(0, check.length + 1) === check + \"-\" : false;\n };\n },\n \"CHILD\": function CHILD(type, what, argument, first, last) {\n var simple = type.slice(0, 3) !== \"nth\",\n forward = type.slice(-4) !== \"last\",\n ofType = what === \"of-type\";\n return first === 1 && last === 0 ? // Shortcut for :nth-*(n)\n function (elem) {\n return !!elem.parentNode;\n } : function (elem, context, xml) {\n var cache,\n uniqueCache,\n outerCache,\n node,\n nodeIndex,\n start,\n dir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n parent = elem.parentNode,\n name = ofType && elem.nodeName.toLowerCase(),\n useCache = !xml && !ofType,\n diff = false;\n\n if (parent) {\n // :(first|last|only)-(child|of-type)\n if (simple) {\n while (dir) {\n node = elem;\n\n while (node = node[dir]) {\n if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {\n return false;\n }\n } // Reverse direction for :only-* (if we haven't yet done so)\n\n\n start = dir = type === \"only\" && !start && \"nextSibling\";\n }\n\n return true;\n }\n\n start = [forward ? parent.firstChild : parent.lastChild]; // non-xml :nth-child(...) stores cache data on `parent`\n\n if (forward && useCache) {\n // Seek `elem` from a previously-cached index\n // ...in a gzip-friendly way\n node = parent;\n outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n // Defend against cloned attroperties (jQuery gh-1709)\n\n uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n cache = uniqueCache[type] || [];\n nodeIndex = cache[0] === dirruns && cache[1];\n diff = nodeIndex && cache[2];\n node = nodeIndex && parent.childNodes[nodeIndex];\n\n while (node = ++nodeIndex && node && node[dir] || ( // Fallback to seeking `elem` from the start\n diff = nodeIndex = 0) || start.pop()) {\n // When found, cache indexes on `parent` and break\n if (node.nodeType === 1 && ++diff && node === elem) {\n uniqueCache[type] = [dirruns, nodeIndex, diff];\n break;\n }\n }\n } else {\n // Use previously-cached element index if available\n if (useCache) {\n // ...in a gzip-friendly way\n node = elem;\n outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n // Defend against cloned attroperties (jQuery gh-1709)\n\n uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n cache = uniqueCache[type] || [];\n nodeIndex = cache[0] === dirruns && cache[1];\n diff = nodeIndex;\n } // xml :nth-child(...)\n // or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\n\n if (diff === false) {\n // Use the same loop as above to seek `elem` from the start\n while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {\n // Cache the index of each encountered element\n if (useCache) {\n outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n // Defend against cloned attroperties (jQuery gh-1709)\n\n uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n uniqueCache[type] = [dirruns, diff];\n }\n\n if (node === elem) {\n break;\n }\n }\n }\n }\n } // Incorporate the offset, then check against cycle size\n\n\n diff -= last;\n return diff === first || diff % first === 0 && diff / first >= 0;\n }\n };\n },\n \"PSEUDO\": function PSEUDO(pseudo, argument) {\n // pseudo-class names are case-insensitive\n // http://www.w3.org/TR/selectors/#pseudo-classes\n // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n // Remember that setFilters inherits from pseudos\n var args,\n fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error(\"unsupported pseudo: \" + pseudo); // The user may use createPseudo to indicate that\n // arguments are needed to create the filter function\n // just as Sizzle does\n\n if (fn[expando]) {\n return fn(argument);\n } // But maintain support for old signatures\n\n\n if (fn.length > 1) {\n args = [pseudo, pseudo, \"\", argument];\n return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {\n var idx,\n matched = fn(seed, argument),\n i = matched.length;\n\n while (i--) {\n idx = indexOf(seed, matched[i]);\n seed[idx] = !(matches[idx] = matched[i]);\n }\n }) : function (elem) {\n return fn(elem, 0, args);\n };\n }\n\n return fn;\n }\n },\n pseudos: {\n // Potentially complex pseudos\n \"not\": markFunction(function (selector) {\n // Trim the selector passed to compile\n // to avoid treating leading and trailing\n // spaces as combinators\n var input = [],\n results = [],\n matcher = compile(selector.replace(rtrim, \"$1\"));\n return matcher[expando] ? markFunction(function (seed, matches, context, xml) {\n var elem,\n unmatched = matcher(seed, null, xml, []),\n i = seed.length; // Match elements unmatched by `matcher`\n\n while (i--) {\n if (elem = unmatched[i]) {\n seed[i] = !(matches[i] = elem);\n }\n }\n }) : function (elem, context, xml) {\n input[0] = elem;\n matcher(input, null, xml, results); // Don't keep the element (issue #299)\n\n input[0] = null;\n return !results.pop();\n };\n }),\n \"has\": markFunction(function (selector) {\n return function (elem) {\n return Sizzle(selector, elem).length > 0;\n };\n }),\n \"contains\": markFunction(function (text) {\n text = text.replace(runescape, funescape);\n return function (elem) {\n return (elem.textContent || getText(elem)).indexOf(text) > -1;\n };\n }),\n // \"Whether an element is represented by a :lang() selector\n // is based solely on the element's language value\n // being equal to the identifier C,\n // or beginning with the identifier C immediately followed by \"-\".\n // The matching of C against the element's language value is performed case-insensitively.\n // The identifier C does not have to be a valid language name.\"\n // http://www.w3.org/TR/selectors/#lang-pseudo\n \"lang\": markFunction(function (lang) {\n // lang value must be a valid identifier\n if (!ridentifier.test(lang || \"\")) {\n Sizzle.error(\"unsupported lang: \" + lang);\n }\n\n lang = lang.replace(runescape, funescape).toLowerCase();\n return function (elem) {\n var elemLang;\n\n do {\n if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) {\n elemLang = elemLang.toLowerCase();\n return elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n }\n } while ((elem = elem.parentNode) && elem.nodeType === 1);\n\n return false;\n };\n }),\n // Miscellaneous\n \"target\": function target(elem) {\n var hash = window.location && window.location.hash;\n return hash && hash.slice(1) === elem.id;\n },\n \"root\": function root(elem) {\n return elem === docElem;\n },\n \"focus\": function focus(elem) {\n return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n },\n // Boolean properties\n \"enabled\": createDisabledPseudo(false),\n \"disabled\": createDisabledPseudo(true),\n \"checked\": function checked(elem) {\n // In CSS3, :checked should return both checked and selected elements\n // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n var nodeName = elem.nodeName.toLowerCase();\n return nodeName === \"input\" && !!elem.checked || nodeName === \"option\" && !!elem.selected;\n },\n \"selected\": function selected(elem) {\n // Accessing this property makes selected-by-default\n // options in Safari work properly\n if (elem.parentNode) {\n elem.parentNode.selectedIndex;\n }\n\n return elem.selected === true;\n },\n // Contents\n \"empty\": function empty(elem) {\n // http://www.w3.org/TR/selectors/#empty-pseudo\n // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n // but not by others (comment: 8; processing instruction: 7; etc.)\n // nodeType < 6 works because attributes (2) do not appear as children\n for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n if (elem.nodeType < 6) {\n return false;\n }\n }\n\n return true;\n },\n \"parent\": function parent(elem) {\n return !Expr.pseudos[\"empty\"](elem);\n },\n // Element/input types\n \"header\": function header(elem) {\n return rheader.test(elem.nodeName);\n },\n \"input\": function input(elem) {\n return rinputs.test(elem.nodeName);\n },\n \"button\": function button(elem) {\n var name = elem.nodeName.toLowerCase();\n return name === \"input\" && elem.type === \"button\" || name === \"button\";\n },\n \"text\": function text(elem) {\n var attr;\n return elem.nodeName.toLowerCase() === \"input\" && elem.type === \"text\" && ( // Support: IE<8\n // New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\");\n },\n // Position-in-collection\n \"first\": createPositionalPseudo(function () {\n return [0];\n }),\n \"last\": createPositionalPseudo(function (matchIndexes, length) {\n return [length - 1];\n }),\n \"eq\": createPositionalPseudo(function (matchIndexes, length, argument) {\n return [argument < 0 ? argument + length : argument];\n }),\n \"even\": createPositionalPseudo(function (matchIndexes, length) {\n var i = 0;\n\n for (; i < length; i += 2) {\n matchIndexes.push(i);\n }\n\n return matchIndexes;\n }),\n \"odd\": createPositionalPseudo(function (matchIndexes, length) {\n var i = 1;\n\n for (; i < length; i += 2) {\n matchIndexes.push(i);\n }\n\n return matchIndexes;\n }),\n \"lt\": createPositionalPseudo(function (matchIndexes, length, argument) {\n var i = argument < 0 ? argument + length : argument > length ? length : argument;\n\n for (; --i >= 0;) {\n matchIndexes.push(i);\n }\n\n return matchIndexes;\n }),\n \"gt\": createPositionalPseudo(function (matchIndexes, length, argument) {\n var i = argument < 0 ? argument + length : argument;\n\n for (; ++i < length;) {\n matchIndexes.push(i);\n }\n\n return matchIndexes;\n })\n }\n };\n Expr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"]; // Add button/input type pseudos\n\n for (i in {\n radio: true,\n checkbox: true,\n file: true,\n password: true,\n image: true\n }) {\n Expr.pseudos[i] = createInputPseudo(i);\n }\n\n for (i in {\n submit: true,\n reset: true\n }) {\n Expr.pseudos[i] = createButtonPseudo(i);\n } // Easy API for creating new setFilters\n\n\n function setFilters() {}\n\n setFilters.prototype = Expr.filters = Expr.pseudos;\n Expr.setFilters = new setFilters();\n\n tokenize = Sizzle.tokenize = function (selector, parseOnly) {\n var matched,\n match,\n tokens,\n type,\n soFar,\n groups,\n preFilters,\n cached = tokenCache[selector + \" \"];\n\n if (cached) {\n return parseOnly ? 0 : cached.slice(0);\n }\n\n soFar = selector;\n groups = [];\n preFilters = Expr.preFilter;\n\n while (soFar) {\n // Comma and first run\n if (!matched || (match = rcomma.exec(soFar))) {\n if (match) {\n // Don't consume trailing commas as valid\n soFar = soFar.slice(match[0].length) || soFar;\n }\n\n groups.push(tokens = []);\n }\n\n matched = false; // Combinators\n\n if (match = rcombinators.exec(soFar)) {\n matched = match.shift();\n tokens.push({\n value: matched,\n // Cast descendant combinators to space\n type: match[0].replace(rtrim, \" \")\n });\n soFar = soFar.slice(matched.length);\n } // Filters\n\n\n for (type in Expr.filter) {\n if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {\n matched = match.shift();\n tokens.push({\n value: matched,\n type: type,\n matches: match\n });\n soFar = soFar.slice(matched.length);\n }\n }\n\n if (!matched) {\n break;\n }\n } // Return the length of the invalid excess\n // if we're just parsing\n // Otherwise, throw an error or return tokens\n\n\n return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : // Cache the tokens\n tokenCache(selector, groups).slice(0);\n };\n\n function toSelector(tokens) {\n var i = 0,\n len = tokens.length,\n selector = \"\";\n\n for (; i < len; i++) {\n selector += tokens[i].value;\n }\n\n return selector;\n }\n\n function addCombinator(matcher, combinator, base) {\n var dir = combinator.dir,\n skip = combinator.next,\n key = skip || dir,\n checkNonElements = base && key === \"parentNode\",\n doneName = done++;\n return combinator.first ? // Check against closest ancestor/preceding element\n function (elem, context, xml) {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n return matcher(elem, context, xml);\n }\n }\n\n return false;\n } : // Check against all ancestor/preceding elements\n function (elem, context, xml) {\n var oldCache,\n uniqueCache,\n outerCache,\n newCache = [dirruns, doneName]; // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\n if (xml) {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n if (matcher(elem, context, xml)) {\n return true;\n }\n }\n }\n } else {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n outerCache = elem[expando] || (elem[expando] = {}); // Support: IE <9 only\n // Defend against cloned attroperties (jQuery gh-1709)\n\n uniqueCache = outerCache[elem.uniqueID] || (outerCache[elem.uniqueID] = {});\n\n if (skip && skip === elem.nodeName.toLowerCase()) {\n elem = elem[dir] || elem;\n } else if ((oldCache = uniqueCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) {\n // Assign to newCache so results back-propagate to previous elements\n return newCache[2] = oldCache[2];\n } else {\n // Reuse newcache so results back-propagate to previous elements\n uniqueCache[key] = newCache; // A match means we're done; a fail means we have to keep checking\n\n if (newCache[2] = matcher(elem, context, xml)) {\n return true;\n }\n }\n }\n }\n }\n\n return false;\n };\n }\n\n function elementMatcher(matchers) {\n return matchers.length > 1 ? function (elem, context, xml) {\n var i = matchers.length;\n\n while (i--) {\n if (!matchers[i](elem, context, xml)) {\n return false;\n }\n }\n\n return true;\n } : matchers[0];\n }\n\n function multipleContexts(selector, contexts, results) {\n var i = 0,\n len = contexts.length;\n\n for (; i < len; i++) {\n Sizzle(selector, contexts[i], results);\n }\n\n return results;\n }\n\n function condense(unmatched, map, filter, context, xml) {\n var elem,\n newUnmatched = [],\n i = 0,\n len = unmatched.length,\n mapped = map != null;\n\n for (; i < len; i++) {\n if (elem = unmatched[i]) {\n if (!filter || filter(elem, context, xml)) {\n newUnmatched.push(elem);\n\n if (mapped) {\n map.push(i);\n }\n }\n }\n }\n\n return newUnmatched;\n }\n\n function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n if (postFilter && !postFilter[expando]) {\n postFilter = setMatcher(postFilter);\n }\n\n if (postFinder && !postFinder[expando]) {\n postFinder = setMatcher(postFinder, postSelector);\n }\n\n return markFunction(function (seed, results, context, xml) {\n var temp,\n i,\n elem,\n preMap = [],\n postMap = [],\n preexisting = results.length,\n // Get initial elements from seed or context\n elems = seed || multipleContexts(selector || \"*\", context.nodeType ? [context] : context, []),\n // Prefilter to get matcher input, preserving a map for seed-results synchronization\n matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems,\n matcherOut = matcher ? // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n postFinder || (seed ? preFilter : preexisting || postFilter) ? // ...intermediate processing is necessary\n [] : // ...otherwise use results directly\n results : matcherIn; // Find primary matches\n\n if (matcher) {\n matcher(matcherIn, matcherOut, context, xml);\n } // Apply postFilter\n\n\n if (postFilter) {\n temp = condense(matcherOut, postMap);\n postFilter(temp, [], context, xml); // Un-match failing elements by moving them back to matcherIn\n\n i = temp.length;\n\n while (i--) {\n if (elem = temp[i]) {\n matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n }\n }\n }\n\n if (seed) {\n if (postFinder || preFilter) {\n if (postFinder) {\n // Get the final matcherOut by condensing this intermediate into postFinder contexts\n temp = [];\n i = matcherOut.length;\n\n while (i--) {\n if (elem = matcherOut[i]) {\n // Restore matcherIn since elem is not yet a final match\n temp.push(matcherIn[i] = elem);\n }\n }\n\n postFinder(null, matcherOut = [], temp, xml);\n } // Move matched elements from seed to results to keep them synchronized\n\n\n i = matcherOut.length;\n\n while (i--) {\n if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf(seed, elem) : preMap[i]) > -1) {\n seed[temp] = !(results[temp] = elem);\n }\n }\n } // Add elements to results, through postFinder if defined\n\n } else {\n matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);\n\n if (postFinder) {\n postFinder(null, results, matcherOut, xml);\n } else {\n push.apply(results, matcherOut);\n }\n }\n });\n }\n\n function matcherFromTokens(tokens) {\n var checkContext,\n matcher,\n j,\n len = tokens.length,\n leadingRelative = Expr.relative[tokens[0].type],\n implicitRelative = leadingRelative || Expr.relative[\" \"],\n i = leadingRelative ? 1 : 0,\n // The foundational matcher ensures that elements are reachable from top-level context(s)\n matchContext = addCombinator(function (elem) {\n return elem === checkContext;\n }, implicitRelative, true),\n matchAnyContext = addCombinator(function (elem) {\n return indexOf(checkContext, elem) > -1;\n }, implicitRelative, true),\n matchers = [function (elem, context, xml) {\n var ret = !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml)); // Avoid hanging onto element (issue #299)\n\n checkContext = null;\n return ret;\n }];\n\n for (; i < len; i++) {\n if (matcher = Expr.relative[tokens[i].type]) {\n matchers = [addCombinator(elementMatcher(matchers), matcher)];\n } else {\n matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches); // Return special upon seeing a positional matcher\n\n if (matcher[expando]) {\n // Find the next relative operator (if any) for proper handling\n j = ++i;\n\n for (; j < len; j++) {\n if (Expr.relative[tokens[j].type]) {\n break;\n }\n }\n\n return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector( // If the preceding token was a descendant combinator, insert an implicit any-element `*`\n tokens.slice(0, i - 1).concat({\n value: tokens[i - 2].type === \" \" ? \"*\" : \"\"\n })).replace(rtrim, \"$1\"), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));\n }\n\n matchers.push(matcher);\n }\n }\n\n return elementMatcher(matchers);\n }\n\n function matcherFromGroupMatchers(elementMatchers, setMatchers) {\n var bySet = setMatchers.length > 0,\n byElement = elementMatchers.length > 0,\n superMatcher = function superMatcher(seed, context, xml, results, outermost) {\n var elem,\n j,\n matcher,\n matchedCount = 0,\n i = \"0\",\n unmatched = seed && [],\n setMatched = [],\n contextBackup = outermostContext,\n // We must always have either seed elements or outermost context\n elems = seed || byElement && Expr.find[\"TAG\"](\"*\", outermost),\n // Use integer dirruns iff this is the outermost matcher\n dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1,\n len = elems.length;\n\n if (outermost) {\n outermostContext = context === document || context || outermost;\n } // Add elements passing elementMatchers directly to results\n // Support: IE<9, Safari\n // Tolerate NodeList properties (IE: \"length\"; Safari: ) matching elements by id\n\n\n for (; i !== len && (elem = elems[i]) != null; i++) {\n if (byElement && elem) {\n j = 0;\n\n if (!context && elem.ownerDocument !== document) {\n setDocument(elem);\n xml = !documentIsHTML;\n }\n\n while (matcher = elementMatchers[j++]) {\n if (matcher(elem, context || document, xml)) {\n results.push(elem);\n break;\n }\n }\n\n if (outermost) {\n dirruns = dirrunsUnique;\n }\n } // Track unmatched elements for set filters\n\n\n if (bySet) {\n // They will have gone through all possible matchers\n if (elem = !matcher && elem) {\n matchedCount--;\n } // Lengthen the array for every element, matched or not\n\n\n if (seed) {\n unmatched.push(elem);\n }\n }\n } // `i` is now the count of elements visited above, and adding it to `matchedCount`\n // makes the latter nonnegative.\n\n\n matchedCount += i; // Apply set filters to unmatched elements\n // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n // equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n // no element matchers and no seed.\n // Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n // case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n // numerically zero.\n\n if (bySet && i !== matchedCount) {\n j = 0;\n\n while (matcher = setMatchers[j++]) {\n matcher(unmatched, setMatched, context, xml);\n }\n\n if (seed) {\n // Reintegrate element matches to eliminate the need for sorting\n if (matchedCount > 0) {\n while (i--) {\n if (!(unmatched[i] || setMatched[i])) {\n setMatched[i] = pop.call(results);\n }\n }\n } // Discard index placeholder values to get only actual matches\n\n\n setMatched = condense(setMatched);\n } // Add matches to results\n\n\n push.apply(results, setMatched); // Seedless set matches succeeding multiple successful matchers stipulate sorting\n\n if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {\n Sizzle.uniqueSort(results);\n }\n } // Override manipulation of globals by nested matchers\n\n\n if (outermost) {\n dirruns = dirrunsUnique;\n outermostContext = contextBackup;\n }\n\n return unmatched;\n };\n\n return bySet ? markFunction(superMatcher) : superMatcher;\n }\n\n compile = Sizzle.compile = function (selector, match\n /* Internal Use Only */\n ) {\n var i,\n setMatchers = [],\n elementMatchers = [],\n cached = compilerCache[selector + \" \"];\n\n if (!cached) {\n // Generate a function of recursive functions that can be used to check each element\n if (!match) {\n match = tokenize(selector);\n }\n\n i = match.length;\n\n while (i--) {\n cached = matcherFromTokens(match[i]);\n\n if (cached[expando]) {\n setMatchers.push(cached);\n } else {\n elementMatchers.push(cached);\n }\n } // Cache the compiled function\n\n\n cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers)); // Save selector and tokenization\n\n cached.selector = selector;\n }\n\n return cached;\n };\n /**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\n\n\n select = Sizzle.select = function (selector, context, results, seed) {\n var i,\n tokens,\n token,\n type,\n find,\n compiled = typeof selector === \"function\" && selector,\n match = !seed && tokenize(selector = compiled.selector || selector);\n results = results || []; // Try to minimize operations if there is only one selector in the list and no seed\n // (the latter of which guarantees us context)\n\n if (match.length === 1) {\n // Reduce context if the leading compound selector is an ID\n tokens = match[0] = match[0].slice(0);\n\n if (tokens.length > 2 && (token = tokens[0]).type === \"ID\" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n context = (Expr.find[\"ID\"](token.matches[0].replace(runescape, funescape), context) || [])[0];\n\n if (!context) {\n return results; // Precompiled matchers will still verify ancestry, so step up a level\n } else if (compiled) {\n context = context.parentNode;\n }\n\n selector = selector.slice(tokens.shift().value.length);\n } // Fetch a seed set for right-to-left matching\n\n\n i = matchExpr[\"needsContext\"].test(selector) ? 0 : tokens.length;\n\n while (i--) {\n token = tokens[i]; // Abort if we hit a combinator\n\n if (Expr.relative[type = token.type]) {\n break;\n }\n\n if (find = Expr.find[type]) {\n // Search, expanding context for leading sibling combinators\n if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {\n // If seed is empty or no tokens remain, we can return early\n tokens.splice(i, 1);\n selector = seed.length && toSelector(tokens);\n\n if (!selector) {\n push.apply(results, seed);\n return results;\n }\n\n break;\n }\n }\n }\n } // Compile and execute a filtering function if one is not provided\n // Provide `match` to avoid retokenization if we modified the selector above\n\n\n (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, !context || rsibling.test(selector) && testContext(context.parentNode) || context);\n return results;\n }; // One-time assignments\n // Sort stability\n\n\n support.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando; // Support: Chrome 14-35+\n // Always assume duplicates if they aren't passed to the comparison function\n\n support.detectDuplicates = !!hasDuplicate; // Initialize against the default document\n\n setDocument(); // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n // Detached nodes confoundingly follow *each other*\n\n support.sortDetached = assert(function (el) {\n // Should return 1, but returns 4 (following)\n return el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n }); // Support: IE<8\n // Prevent attribute/property \"interpolation\"\n // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\n\n if (!assert(function (el) {\n el.innerHTML = \"\";\n return el.firstChild.getAttribute(\"href\") === \"#\";\n })) {\n addHandle(\"type|href|height|width\", function (elem, name, isXML) {\n if (!isXML) {\n return elem.getAttribute(name, name.toLowerCase() === \"type\" ? 1 : 2);\n }\n });\n } // Support: IE<9\n // Use defaultValue in place of getAttribute(\"value\")\n\n\n if (!support.attributes || !assert(function (el) {\n el.innerHTML = \"\";\n el.firstChild.setAttribute(\"value\", \"\");\n return el.firstChild.getAttribute(\"value\") === \"\";\n })) {\n addHandle(\"value\", function (elem, name, isXML) {\n if (!isXML && elem.nodeName.toLowerCase() === \"input\") {\n return elem.defaultValue;\n }\n });\n } // Support: IE<9\n // Use getAttributeNode to fetch booleans when getAttribute lies\n\n\n if (!assert(function (el) {\n return el.getAttribute(\"disabled\") == null;\n })) {\n addHandle(booleans, function (elem, name, isXML) {\n var val;\n\n if (!isXML) {\n return elem[name] === true ? name.toLowerCase() : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n }\n });\n }\n\n return Sizzle;\n }(window);\n\n jQuery.find = Sizzle;\n jQuery.expr = Sizzle.selectors; // Deprecated\n\n jQuery.expr[\":\"] = jQuery.expr.pseudos;\n jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\n jQuery.text = Sizzle.getText;\n jQuery.isXMLDoc = Sizzle.isXML;\n jQuery.contains = Sizzle.contains;\n jQuery.escapeSelector = Sizzle.escape;\n\n var dir = function dir(elem, _dir, until) {\n var matched = [],\n truncate = until !== undefined;\n\n while ((elem = elem[_dir]) && elem.nodeType !== 9) {\n if (elem.nodeType === 1) {\n if (truncate && jQuery(elem).is(until)) {\n break;\n }\n\n matched.push(elem);\n }\n }\n\n return matched;\n };\n\n var _siblings = function siblings(n, elem) {\n var matched = [];\n\n for (; n; n = n.nextSibling) {\n if (n.nodeType === 1 && n !== elem) {\n matched.push(n);\n }\n }\n\n return matched;\n };\n\n var rneedsContext = jQuery.expr.match.needsContext;\n\n function nodeName(elem, name) {\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n }\n\n ;\n var rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i; // Implement the identical functionality for filter and not\n\n function winnow(elements, qualifier, not) {\n if (isFunction(qualifier)) {\n return jQuery.grep(elements, function (elem, i) {\n return !!qualifier.call(elem, i, elem) !== not;\n });\n } // Single element\n\n\n if (qualifier.nodeType) {\n return jQuery.grep(elements, function (elem) {\n return elem === qualifier !== not;\n });\n } // Arraylike of elements (jQuery, arguments, Array)\n\n\n if (typeof qualifier !== \"string\") {\n return jQuery.grep(elements, function (elem) {\n return indexOf.call(qualifier, elem) > -1 !== not;\n });\n } // Filtered directly for both simple and complex selectors\n\n\n return jQuery.filter(qualifier, elements, not);\n }\n\n jQuery.filter = function (expr, elems, not) {\n var elem = elems[0];\n\n if (not) {\n expr = \":not(\" + expr + \")\";\n }\n\n if (elems.length === 1 && elem.nodeType === 1) {\n return jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n }\n\n return jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n return elem.nodeType === 1;\n }));\n };\n\n jQuery.fn.extend({\n find: function find(selector) {\n var i,\n ret,\n len = this.length,\n self = this;\n\n if (typeof selector !== \"string\") {\n return this.pushStack(jQuery(selector).filter(function () {\n for (i = 0; i < len; i++) {\n if (jQuery.contains(self[i], this)) {\n return true;\n }\n }\n }));\n }\n\n ret = this.pushStack([]);\n\n for (i = 0; i < len; i++) {\n jQuery.find(selector, self[i], ret);\n }\n\n return len > 1 ? jQuery.uniqueSort(ret) : ret;\n },\n filter: function filter(selector) {\n return this.pushStack(winnow(this, selector || [], false));\n },\n not: function not(selector) {\n return this.pushStack(winnow(this, selector || [], true));\n },\n is: function is(selector) {\n return !!winnow(this, // If this is a positional/relative selector, check membership in the returned set\n // so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n typeof selector === \"string\" && rneedsContext.test(selector) ? jQuery(selector) : selector || [], false).length;\n }\n }); // Initialize a jQuery object\n // A central reference to the root jQuery(document)\n\n var rootjQuery,\n // A simple way to check for HTML strings\n // Prioritize #id over to avoid XSS via location.hash (#9521)\n // Strict HTML recognition (#11290: must start with <)\n // Shortcut simple #id case for speed\n rquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n init = jQuery.fn.init = function (selector, context, root) {\n var match, elem; // HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\n if (!selector) {\n return this;\n } // Method init() accepts an alternate rootjQuery\n // so migrate can support jQuery.sub (gh-2101)\n\n\n root = root || rootjQuery; // Handle HTML strings\n\n if (typeof selector === \"string\") {\n if (selector[0] === \"<\" && selector[selector.length - 1] === \">\" && selector.length >= 3) {\n // Assume that strings that start and end with <> are HTML and skip the regex check\n match = [null, selector, null];\n } else {\n match = rquickExpr.exec(selector);\n } // Match html or make sure no context is specified for #id\n\n\n if (match && (match[1] || !context)) {\n // HANDLE: $(html) -> $(array)\n if (match[1]) {\n context = context instanceof jQuery ? context[0] : context; // Option to run scripts is true for back-compat\n // Intentionally let the error be thrown if parseHTML is not present\n\n jQuery.merge(this, jQuery.parseHTML(match[1], context && context.nodeType ? context.ownerDocument || context : document, true)); // HANDLE: $(html, props)\n\n if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n for (match in context) {\n // Properties of context are called as methods if possible\n if (isFunction(this[match])) {\n this[match](context[match]); // ...and otherwise set as attributes\n } else {\n this.attr(match, context[match]);\n }\n }\n }\n\n return this; // HANDLE: $(#id)\n } else {\n elem = document.getElementById(match[2]);\n\n if (elem) {\n // Inject the element directly into the jQuery object\n this[0] = elem;\n this.length = 1;\n }\n\n return this;\n } // HANDLE: $(expr, $(...))\n\n } else if (!context || context.jquery) {\n return (context || root).find(selector); // HANDLE: $(expr, context)\n // (which is just equivalent to: $(context).find(expr)\n } else {\n return this.constructor(context).find(selector);\n } // HANDLE: $(DOMElement)\n\n } else if (selector.nodeType) {\n this[0] = selector;\n this.length = 1;\n return this; // HANDLE: $(function)\n // Shortcut for document ready\n } else if (isFunction(selector)) {\n return root.ready !== undefined ? root.ready(selector) : // Execute immediately if ready is not present\n selector(jQuery);\n }\n\n return jQuery.makeArray(selector, this);\n }; // Give the init function the jQuery prototype for later instantiation\n\n\n init.prototype = jQuery.fn; // Initialize central reference\n\n rootjQuery = jQuery(document);\n var rparentsprev = /^(?:parents|prev(?:Until|All))/,\n // Methods guaranteed to produce a unique set when starting from a unique set\n guaranteedUnique = {\n children: true,\n contents: true,\n next: true,\n prev: true\n };\n jQuery.fn.extend({\n has: function has(target) {\n var targets = jQuery(target, this),\n l = targets.length;\n return this.filter(function () {\n var i = 0;\n\n for (; i < l; i++) {\n if (jQuery.contains(this, targets[i])) {\n return true;\n }\n }\n });\n },\n closest: function closest(selectors, context) {\n var cur,\n i = 0,\n l = this.length,\n matched = [],\n targets = typeof selectors !== \"string\" && jQuery(selectors); // Positional selectors never match, since there's no _selection_ context\n\n if (!rneedsContext.test(selectors)) {\n for (; i < l; i++) {\n for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n // Always skip document fragments\n if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 : // Don't pass non-elements to Sizzle\n cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors))) {\n matched.push(cur);\n break;\n }\n }\n }\n }\n\n return this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n },\n // Determine the position of an element within the set\n index: function index(elem) {\n // No argument, return index in parent\n if (!elem) {\n return this[0] && this[0].parentNode ? this.first().prevAll().length : -1;\n } // Index in selector\n\n\n if (typeof elem === \"string\") {\n return indexOf.call(jQuery(elem), this[0]);\n } // Locate the position of the desired element\n\n\n return indexOf.call(this, // If it receives a jQuery object, the first element is used\n elem.jquery ? elem[0] : elem);\n },\n add: function add(selector, context) {\n return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(), jQuery(selector, context))));\n },\n addBack: function addBack(selector) {\n return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector));\n }\n });\n\n function sibling(cur, dir) {\n while ((cur = cur[dir]) && cur.nodeType !== 1) {}\n\n return cur;\n }\n\n jQuery.each({\n parent: function parent(elem) {\n var parent = elem.parentNode;\n return parent && parent.nodeType !== 11 ? parent : null;\n },\n parents: function parents(elem) {\n return dir(elem, \"parentNode\");\n },\n parentsUntil: function parentsUntil(elem, i, until) {\n return dir(elem, \"parentNode\", until);\n },\n next: function next(elem) {\n return sibling(elem, \"nextSibling\");\n },\n prev: function prev(elem) {\n return sibling(elem, \"previousSibling\");\n },\n nextAll: function nextAll(elem) {\n return dir(elem, \"nextSibling\");\n },\n prevAll: function prevAll(elem) {\n return dir(elem, \"previousSibling\");\n },\n nextUntil: function nextUntil(elem, i, until) {\n return dir(elem, \"nextSibling\", until);\n },\n prevUntil: function prevUntil(elem, i, until) {\n return dir(elem, \"previousSibling\", until);\n },\n siblings: function siblings(elem) {\n return _siblings((elem.parentNode || {}).firstChild, elem);\n },\n children: function children(elem) {\n return _siblings(elem.firstChild);\n },\n contents: function contents(elem) {\n if (typeof elem.contentDocument !== \"undefined\") {\n return elem.contentDocument;\n } // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n // Treat the template element as a regular one in browsers that\n // don't support it.\n\n\n if (nodeName(elem, \"template\")) {\n elem = elem.content || elem;\n }\n\n return jQuery.merge([], elem.childNodes);\n }\n }, function (name, fn) {\n jQuery.fn[name] = function (until, selector) {\n var matched = jQuery.map(this, fn, until);\n\n if (name.slice(-5) !== \"Until\") {\n selector = until;\n }\n\n if (selector && typeof selector === \"string\") {\n matched = jQuery.filter(selector, matched);\n }\n\n if (this.length > 1) {\n // Remove duplicates\n if (!guaranteedUnique[name]) {\n jQuery.uniqueSort(matched);\n } // Reverse order for parents* and prev-derivatives\n\n\n if (rparentsprev.test(name)) {\n matched.reverse();\n }\n }\n\n return this.pushStack(matched);\n };\n });\n var rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g; // Convert String-formatted options into Object-formatted ones\n\n function createOptions(options) {\n var object = {};\n jQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n object[flag] = true;\n });\n return object;\n }\n /*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\n\n\n jQuery.Callbacks = function (options) {\n // Convert options from String-formatted to Object-formatted if needed\n // (we check in cache first)\n options = typeof options === \"string\" ? createOptions(options) : jQuery.extend({}, options);\n\n var // Flag to know if list is currently firing\n firing,\n // Last fire value for non-forgettable lists\n memory,\n // Flag to know if list was already fired\n _fired,\n // Flag to prevent firing\n _locked,\n // Actual callback list\n list = [],\n // Queue of execution data for repeatable lists\n queue = [],\n // Index of currently firing callback (modified by add/remove as needed)\n firingIndex = -1,\n // Fire callbacks\n fire = function fire() {\n // Enforce single-firing\n _locked = _locked || options.once; // Execute callbacks for all pending executions,\n // respecting firingIndex overrides and runtime changes\n\n _fired = firing = true;\n\n for (; queue.length; firingIndex = -1) {\n memory = queue.shift();\n\n while (++firingIndex < list.length) {\n // Run callback and check for early termination\n if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) {\n // Jump to end and forget the data so .add doesn't re-fire\n firingIndex = list.length;\n memory = false;\n }\n }\n } // Forget the data if we're done with it\n\n\n if (!options.memory) {\n memory = false;\n }\n\n firing = false; // Clean up if we're done firing for good\n\n if (_locked) {\n // Keep an empty list if we have data for future add calls\n if (memory) {\n list = []; // Otherwise, this object is spent\n } else {\n list = \"\";\n }\n }\n },\n // Actual Callbacks object\n self = {\n // Add a callback or a collection of callbacks to the list\n add: function add() {\n if (list) {\n // If we have memory from a past run, we should fire after adding\n if (memory && !firing) {\n firingIndex = list.length - 1;\n queue.push(memory);\n }\n\n (function add(args) {\n jQuery.each(args, function (_, arg) {\n if (isFunction(arg)) {\n if (!options.unique || !self.has(arg)) {\n list.push(arg);\n }\n } else if (arg && arg.length && toType(arg) !== \"string\") {\n // Inspect recursively\n add(arg);\n }\n });\n })(arguments);\n\n if (memory && !firing) {\n fire();\n }\n }\n\n return this;\n },\n // Remove a callback from the list\n remove: function remove() {\n jQuery.each(arguments, function (_, arg) {\n var index;\n\n while ((index = jQuery.inArray(arg, list, index)) > -1) {\n list.splice(index, 1); // Handle firing indexes\n\n if (index <= firingIndex) {\n firingIndex--;\n }\n }\n });\n return this;\n },\n // Check if a given callback is in the list.\n // If no argument is given, return whether or not list has callbacks attached.\n has: function has(fn) {\n return fn ? jQuery.inArray(fn, list) > -1 : list.length > 0;\n },\n // Remove all callbacks from the list\n empty: function empty() {\n if (list) {\n list = [];\n }\n\n return this;\n },\n // Disable .fire and .add\n // Abort any current/pending executions\n // Clear all callbacks and values\n disable: function disable() {\n _locked = queue = [];\n list = memory = \"\";\n return this;\n },\n disabled: function disabled() {\n return !list;\n },\n // Disable .fire\n // Also disable .add unless we have memory (since it would have no effect)\n // Abort any pending executions\n lock: function lock() {\n _locked = queue = [];\n\n if (!memory && !firing) {\n list = memory = \"\";\n }\n\n return this;\n },\n locked: function locked() {\n return !!_locked;\n },\n // Call all callbacks with the given context and arguments\n fireWith: function fireWith(context, args) {\n if (!_locked) {\n args = args || [];\n args = [context, args.slice ? args.slice() : args];\n queue.push(args);\n\n if (!firing) {\n fire();\n }\n }\n\n return this;\n },\n // Call all the callbacks with the given arguments\n fire: function fire() {\n self.fireWith(this, arguments);\n return this;\n },\n // To know if the callbacks have already been called at least once\n fired: function fired() {\n return !!_fired;\n }\n };\n\n return self;\n };\n\n function Identity(v) {\n return v;\n }\n\n function Thrower(ex) {\n throw ex;\n }\n\n function adoptValue(value, resolve, reject, noValue) {\n var method;\n\n try {\n // Check for promise aspect first to privilege synchronous behavior\n if (value && isFunction(method = value.promise)) {\n method.call(value).done(resolve).fail(reject); // Other thenables\n } else if (value && isFunction(method = value.then)) {\n method.call(value, resolve, reject); // Other non-thenables\n } else {\n // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n // * false: [ value ].slice( 0 ) => resolve( value )\n // * true: [ value ].slice( 1 ) => resolve()\n resolve.apply(undefined, [value].slice(noValue));\n } // For Promises/A+, convert exceptions into rejections\n // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n // Deferred#then to conditionally suppress rejection.\n\n } catch (value) {\n // Support: Android 4.0 only\n // Strict mode functions invoked without .call/.apply get global-object context\n reject.apply(undefined, [value]);\n }\n }\n\n jQuery.extend({\n Deferred: function Deferred(func) {\n var tuples = [// action, add listener, callbacks,\n // ... .then handlers, argument index, [final state]\n [\"notify\", \"progress\", jQuery.Callbacks(\"memory\"), jQuery.Callbacks(\"memory\"), 2], [\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), jQuery.Callbacks(\"once memory\"), 0, \"resolved\"], [\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), jQuery.Callbacks(\"once memory\"), 1, \"rejected\"]],\n _state = \"pending\",\n _promise = {\n state: function state() {\n return _state;\n },\n always: function always() {\n deferred.done(arguments).fail(arguments);\n return this;\n },\n \"catch\": function _catch(fn) {\n return _promise.then(null, fn);\n },\n // Keep pipe for back-compat\n pipe: function pipe()\n /* fnDone, fnFail, fnProgress */\n {\n var fns = arguments;\n return jQuery.Deferred(function (newDefer) {\n jQuery.each(tuples, function (i, tuple) {\n // Map tuples (progress, done, fail) to arguments (done, fail, progress)\n var fn = isFunction(fns[tuple[4]]) && fns[tuple[4]]; // deferred.progress(function() { bind to newDefer or newDefer.notify })\n // deferred.done(function() { bind to newDefer or newDefer.resolve })\n // deferred.fail(function() { bind to newDefer or newDefer.reject })\n\n deferred[tuple[1]](function () {\n var returned = fn && fn.apply(this, arguments);\n\n if (returned && isFunction(returned.promise)) {\n returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);\n } else {\n newDefer[tuple[0] + \"With\"](this, fn ? [returned] : arguments);\n }\n });\n });\n fns = null;\n }).promise();\n },\n then: function then(onFulfilled, onRejected, onProgress) {\n var maxDepth = 0;\n\n function resolve(depth, deferred, handler, special) {\n return function () {\n var that = this,\n args = arguments,\n mightThrow = function mightThrow() {\n var returned, then; // Support: Promises/A+ section 2.3.3.3.3\n // https://promisesaplus.com/#point-59\n // Ignore double-resolution attempts\n\n if (depth < maxDepth) {\n return;\n }\n\n returned = handler.apply(that, args); // Support: Promises/A+ section 2.3.1\n // https://promisesaplus.com/#point-48\n\n if (returned === deferred.promise()) {\n throw new TypeError(\"Thenable self-resolution\");\n } // Support: Promises/A+ sections 2.3.3.1, 3.5\n // https://promisesaplus.com/#point-54\n // https://promisesaplus.com/#point-75\n // Retrieve `then` only once\n\n\n then = returned && ( // Support: Promises/A+ section 2.3.4\n // https://promisesaplus.com/#point-64\n // Only check objects and functions for thenability\n _typeof(returned) === \"object\" || typeof returned === \"function\") && returned.then; // Handle a returned thenable\n\n if (isFunction(then)) {\n // Special processors (notify) just wait for resolution\n if (special) {\n then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special)); // Normal processors (resolve) also hook into progress\n } else {\n // ...and disregard older resolution values\n maxDepth++;\n then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special), resolve(maxDepth, deferred, Identity, deferred.notifyWith));\n } // Handle all other returned values\n\n } else {\n // Only substitute handlers pass on context\n // and multiple values (non-spec behavior)\n if (handler !== Identity) {\n that = undefined;\n args = [returned];\n } // Process the value(s)\n // Default process is resolve\n\n\n (special || deferred.resolveWith)(that, args);\n }\n },\n // Only normal processors (resolve) catch and reject exceptions\n process = special ? mightThrow : function () {\n try {\n mightThrow();\n } catch (e) {\n if (jQuery.Deferred.exceptionHook) {\n jQuery.Deferred.exceptionHook(e, process.stackTrace);\n } // Support: Promises/A+ section 2.3.3.3.4.1\n // https://promisesaplus.com/#point-61\n // Ignore post-resolution exceptions\n\n\n if (depth + 1 >= maxDepth) {\n // Only substitute handlers pass on context\n // and multiple values (non-spec behavior)\n if (handler !== Thrower) {\n that = undefined;\n args = [e];\n }\n\n deferred.rejectWith(that, args);\n }\n }\n }; // Support: Promises/A+ section 2.3.3.3.1\n // https://promisesaplus.com/#point-57\n // Re-resolve promises immediately to dodge false rejection from\n // subsequent errors\n\n\n if (depth) {\n process();\n } else {\n // Call an optional hook to record the stack, in case of exception\n // since it's otherwise lost when execution goes async\n if (jQuery.Deferred.getStackHook) {\n process.stackTrace = jQuery.Deferred.getStackHook();\n }\n\n window.setTimeout(process);\n }\n };\n }\n\n return jQuery.Deferred(function (newDefer) {\n // progress_handlers.add( ... )\n tuples[0][3].add(resolve(0, newDefer, isFunction(onProgress) ? onProgress : Identity, newDefer.notifyWith)); // fulfilled_handlers.add( ... )\n\n tuples[1][3].add(resolve(0, newDefer, isFunction(onFulfilled) ? onFulfilled : Identity)); // rejected_handlers.add( ... )\n\n tuples[2][3].add(resolve(0, newDefer, isFunction(onRejected) ? onRejected : Thrower));\n }).promise();\n },\n // Get a promise for this deferred\n // If obj is provided, the promise aspect is added to the object\n promise: function promise(obj) {\n return obj != null ? jQuery.extend(obj, _promise) : _promise;\n }\n },\n deferred = {}; // Add list-specific methods\n\n jQuery.each(tuples, function (i, tuple) {\n var list = tuple[2],\n stateString = tuple[5]; // promise.progress = list.add\n // promise.done = list.add\n // promise.fail = list.add\n\n _promise[tuple[1]] = list.add; // Handle state\n\n if (stateString) {\n list.add(function () {\n // state = \"resolved\" (i.e., fulfilled)\n // state = \"rejected\"\n _state = stateString;\n }, // rejected_callbacks.disable\n // fulfilled_callbacks.disable\n tuples[3 - i][2].disable, // rejected_handlers.disable\n // fulfilled_handlers.disable\n tuples[3 - i][3].disable, // progress_callbacks.lock\n tuples[0][2].lock, // progress_handlers.lock\n tuples[0][3].lock);\n } // progress_handlers.fire\n // fulfilled_handlers.fire\n // rejected_handlers.fire\n\n\n list.add(tuple[3].fire); // deferred.notify = function() { deferred.notifyWith(...) }\n // deferred.resolve = function() { deferred.resolveWith(...) }\n // deferred.reject = function() { deferred.rejectWith(...) }\n\n deferred[tuple[0]] = function () {\n deferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n return this;\n }; // deferred.notifyWith = list.fireWith\n // deferred.resolveWith = list.fireWith\n // deferred.rejectWith = list.fireWith\n\n\n deferred[tuple[0] + \"With\"] = list.fireWith;\n }); // Make the deferred a promise\n\n _promise.promise(deferred); // Call given func if any\n\n\n if (func) {\n func.call(deferred, deferred);\n } // All done!\n\n\n return deferred;\n },\n // Deferred helper\n when: function when(singleValue) {\n var // count of uncompleted subordinates\n remaining = arguments.length,\n // count of unprocessed arguments\n i = remaining,\n // subordinate fulfillment data\n resolveContexts = Array(i),\n resolveValues = _slice.call(arguments),\n // the master Deferred\n master = jQuery.Deferred(),\n // subordinate callback factory\n updateFunc = function updateFunc(i) {\n return function (value) {\n resolveContexts[i] = this;\n resolveValues[i] = arguments.length > 1 ? _slice.call(arguments) : value;\n\n if (! --remaining) {\n master.resolveWith(resolveContexts, resolveValues);\n }\n };\n }; // Single- and empty arguments are adopted like Promise.resolve\n\n\n if (remaining <= 1) {\n adoptValue(singleValue, master.done(updateFunc(i)).resolve, master.reject, !remaining); // Use .then() to unwrap secondary thenables (cf. gh-3000)\n\n if (master.state() === \"pending\" || isFunction(resolveValues[i] && resolveValues[i].then)) {\n return master.then();\n }\n } // Multiple arguments are aggregated like Promise.all array elements\n\n\n while (i--) {\n adoptValue(resolveValues[i], updateFunc(i), master.reject);\n }\n\n return master.promise();\n }\n }); // These usually indicate a programmer mistake during development,\n // warn about them ASAP rather than swallowing them by default.\n\n var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n jQuery.Deferred.exceptionHook = function (error, stack) {\n // Support: IE 8 - 9 only\n // Console exists when dev tools are open, which can happen at any time\n if (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n window.console.warn(\"jQuery.Deferred exception: \" + error.message, error.stack, stack);\n }\n };\n\n jQuery.readyException = function (error) {\n window.setTimeout(function () {\n throw error;\n });\n }; // The deferred used on DOM ready\n\n\n var readyList = jQuery.Deferred();\n\n jQuery.fn.ready = function (fn) {\n readyList.then(fn) // Wrap jQuery.readyException in a function so that the lookup\n // happens at the time of error handling instead of callback\n // registration.\n [\"catch\"](function (error) {\n jQuery.readyException(error);\n });\n return this;\n };\n\n jQuery.extend({\n // Is the DOM ready to be used? Set to true once it occurs.\n isReady: false,\n // A counter to track how many items to wait for before\n // the ready event fires. See #6781\n readyWait: 1,\n // Handle when the DOM is ready\n ready: function ready(wait) {\n // Abort if there are pending holds or we're already ready\n if (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n return;\n } // Remember that the DOM is ready\n\n\n jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be\n\n if (wait !== true && --jQuery.readyWait > 0) {\n return;\n } // If there are functions bound, to execute\n\n\n readyList.resolveWith(document, [jQuery]);\n }\n });\n jQuery.ready.then = readyList.then; // The ready event handler and self cleanup method\n\n function completed() {\n document.removeEventListener(\"DOMContentLoaded\", completed);\n window.removeEventListener(\"load\", completed);\n jQuery.ready();\n } // Catch cases where $(document).ready() is called\n // after the browser event has already occurred.\n // Support: IE <=9 - 10 only\n // Older IE sometimes signals \"interactive\" too soon\n\n\n if (document.readyState === \"complete\" || document.readyState !== \"loading\" && !document.documentElement.doScroll) {\n // Handle it asynchronously to allow scripts the opportunity to delay ready\n window.setTimeout(jQuery.ready);\n } else {\n // Use the handy event callback\n document.addEventListener(\"DOMContentLoaded\", completed); // A fallback to window.onload, that will always work\n\n window.addEventListener(\"load\", completed);\n } // Multifunctional method to get and set values of a collection\n // The value/s can optionally be executed if it's a function\n\n\n var access = function access(elems, fn, key, value, chainable, emptyGet, raw) {\n var i = 0,\n len = elems.length,\n bulk = key == null; // Sets many values\n\n if (toType(key) === \"object\") {\n chainable = true;\n\n for (i in key) {\n access(elems, fn, i, key[i], true, emptyGet, raw);\n } // Sets one value\n\n } else if (value !== undefined) {\n chainable = true;\n\n if (!isFunction(value)) {\n raw = true;\n }\n\n if (bulk) {\n // Bulk operations run against the entire set\n if (raw) {\n fn.call(elems, value);\n fn = null; // ...except when executing function values\n } else {\n bulk = fn;\n\n fn = function fn(elem, key, value) {\n return bulk.call(jQuery(elem), value);\n };\n }\n }\n\n if (fn) {\n for (; i < len; i++) {\n fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key)));\n }\n }\n }\n\n if (chainable) {\n return elems;\n } // Gets\n\n\n if (bulk) {\n return fn.call(elems);\n }\n\n return len ? fn(elems[0], key) : emptyGet;\n }; // Matches dashed string for camelizing\n\n\n var rmsPrefix = /^-ms-/,\n rdashAlpha = /-([a-z])/g; // Used by camelCase as callback to replace()\n\n function fcamelCase(all, letter) {\n return letter.toUpperCase();\n } // Convert dashed to camelCase; used by the css and data modules\n // Support: IE <=9 - 11, Edge 12 - 15\n // Microsoft forgot to hump their vendor prefix (#9572)\n\n\n function camelCase(string) {\n return string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n }\n\n var acceptData = function acceptData(owner) {\n // Accepts only:\n // - Node\n // - Node.ELEMENT_NODE\n // - Node.DOCUMENT_NODE\n // - Object\n // - Any\n return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType;\n };\n\n function Data() {\n this.expando = jQuery.expando + Data.uid++;\n }\n\n Data.uid = 1;\n Data.prototype = {\n cache: function cache(owner) {\n // Check if the owner object already has a cache\n var value = owner[this.expando]; // If not, create one\n\n if (!value) {\n value = {}; // We can accept data for non-element nodes in modern browsers,\n // but we should not, see #8335.\n // Always return an empty object.\n\n if (acceptData(owner)) {\n // If it is a node unlikely to be stringify-ed or looped over\n // use plain assignment\n if (owner.nodeType) {\n owner[this.expando] = value; // Otherwise secure it in a non-enumerable property\n // configurable must be true to allow the property to be\n // deleted when data is removed\n } else {\n Object.defineProperty(owner, this.expando, {\n value: value,\n configurable: true\n });\n }\n }\n }\n\n return value;\n },\n set: function set(owner, data, value) {\n var prop,\n cache = this.cache(owner); // Handle: [ owner, key, value ] args\n // Always use camelCase key (gh-2257)\n\n if (typeof data === \"string\") {\n cache[camelCase(data)] = value; // Handle: [ owner, { properties } ] args\n } else {\n // Copy the properties one-by-one to the cache object\n for (prop in data) {\n cache[camelCase(prop)] = data[prop];\n }\n }\n\n return cache;\n },\n get: function get(owner, key) {\n return key === undefined ? this.cache(owner) : // Always use camelCase key (gh-2257)\n owner[this.expando] && owner[this.expando][camelCase(key)];\n },\n access: function access(owner, key, value) {\n // In cases where either:\n //\n // 1. No key was specified\n // 2. A string key was specified, but no value provided\n //\n // Take the \"read\" path and allow the get method to determine\n // which value to return, respectively either:\n //\n // 1. The entire cache object\n // 2. The data stored at the key\n //\n if (key === undefined || key && typeof key === \"string\" && value === undefined) {\n return this.get(owner, key);\n } // When the key is not a string, or both a key and value\n // are specified, set or extend (existing objects) with either:\n //\n // 1. An object of properties\n // 2. A key and value\n //\n\n\n this.set(owner, key, value); // Since the \"set\" path can have two possible entry points\n // return the expected data based on which path was taken[*]\n\n return value !== undefined ? value : key;\n },\n remove: function remove(owner, key) {\n var i,\n cache = owner[this.expando];\n\n if (cache === undefined) {\n return;\n }\n\n if (key !== undefined) {\n // Support array or space separated string of keys\n if (Array.isArray(key)) {\n // If key is an array of keys...\n // We always set camelCase keys, so remove that.\n key = key.map(camelCase);\n } else {\n key = camelCase(key); // If a key with the spaces exists, use it.\n // Otherwise, create an array by matching non-whitespace\n\n key = key in cache ? [key] : key.match(rnothtmlwhite) || [];\n }\n\n i = key.length;\n\n while (i--) {\n delete cache[key[i]];\n }\n } // Remove the expando if there's no more data\n\n\n if (key === undefined || jQuery.isEmptyObject(cache)) {\n // Support: Chrome <=35 - 45\n // Webkit & Blink performance suffers when deleting properties\n // from DOM nodes, so set to undefined instead\n // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n if (owner.nodeType) {\n owner[this.expando] = undefined;\n } else {\n delete owner[this.expando];\n }\n }\n },\n hasData: function hasData(owner) {\n var cache = owner[this.expando];\n return cache !== undefined && !jQuery.isEmptyObject(cache);\n }\n };\n var dataPriv = new Data();\n var dataUser = new Data(); //\tImplementation Summary\n //\n //\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n //\t2. Improve the module's maintainability by reducing the storage\n //\t\tpaths to a single mechanism.\n //\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n //\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n //\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n //\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n var rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n rmultiDash = /[A-Z]/g;\n\n function getData(data) {\n if (data === \"true\") {\n return true;\n }\n\n if (data === \"false\") {\n return false;\n }\n\n if (data === \"null\") {\n return null;\n } // Only convert to a number if it doesn't change the string\n\n\n if (data === +data + \"\") {\n return +data;\n }\n\n if (rbrace.test(data)) {\n return JSON.parse(data);\n }\n\n return data;\n }\n\n function dataAttr(elem, key, data) {\n var name; // If nothing was found internally, try to fetch any\n // data from the HTML5 data-* attribute\n\n if (data === undefined && elem.nodeType === 1) {\n name = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n data = elem.getAttribute(name);\n\n if (typeof data === \"string\") {\n try {\n data = getData(data);\n } catch (e) {} // Make sure we set the data so it isn't changed later\n\n\n dataUser.set(elem, key, data);\n } else {\n data = undefined;\n }\n }\n\n return data;\n }\n\n jQuery.extend({\n hasData: function hasData(elem) {\n return dataUser.hasData(elem) || dataPriv.hasData(elem);\n },\n data: function data(elem, name, _data) {\n return dataUser.access(elem, name, _data);\n },\n removeData: function removeData(elem, name) {\n dataUser.remove(elem, name);\n },\n // TODO: Now that all calls to _data and _removeData have been replaced\n // with direct calls to dataPriv methods, these can be deprecated.\n _data: function _data(elem, name, data) {\n return dataPriv.access(elem, name, data);\n },\n _removeData: function _removeData(elem, name) {\n dataPriv.remove(elem, name);\n }\n });\n jQuery.fn.extend({\n data: function data(key, value) {\n var i,\n name,\n data,\n elem = this[0],\n attrs = elem && elem.attributes; // Gets all values\n\n if (key === undefined) {\n if (this.length) {\n data = dataUser.get(elem);\n\n if (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n i = attrs.length;\n\n while (i--) {\n // Support: IE 11 only\n // The attrs elements can be null (#14894)\n if (attrs[i]) {\n name = attrs[i].name;\n\n if (name.indexOf(\"data-\") === 0) {\n name = camelCase(name.slice(5));\n dataAttr(elem, name, data[name]);\n }\n }\n }\n\n dataPriv.set(elem, \"hasDataAttrs\", true);\n }\n }\n\n return data;\n } // Sets multiple values\n\n\n if (_typeof(key) === \"object\") {\n return this.each(function () {\n dataUser.set(this, key);\n });\n }\n\n return access(this, function (value) {\n var data; // The calling jQuery object (element matches) is not empty\n // (and therefore has an element appears at this[ 0 ]) and the\n // `value` parameter was not undefined. An empty jQuery object\n // will result in `undefined` for elem = this[ 0 ] which will\n // throw an exception if an attempt to read a data cache is made.\n\n if (elem && value === undefined) {\n // Attempt to get data from the cache\n // The key will always be camelCased in Data\n data = dataUser.get(elem, key);\n\n if (data !== undefined) {\n return data;\n } // Attempt to \"discover\" the data in\n // HTML5 custom data-* attrs\n\n\n data = dataAttr(elem, key);\n\n if (data !== undefined) {\n return data;\n } // We tried really hard, but the data doesn't exist.\n\n\n return;\n } // Set the data...\n\n\n this.each(function () {\n // We always store the camelCased key\n dataUser.set(this, key, value);\n });\n }, null, value, arguments.length > 1, null, true);\n },\n removeData: function removeData(key) {\n return this.each(function () {\n dataUser.remove(this, key);\n });\n }\n });\n jQuery.extend({\n queue: function queue(elem, type, data) {\n var queue;\n\n if (elem) {\n type = (type || \"fx\") + \"queue\";\n queue = dataPriv.get(elem, type); // Speed up dequeue by getting out quickly if this is just a lookup\n\n if (data) {\n if (!queue || Array.isArray(data)) {\n queue = dataPriv.access(elem, type, jQuery.makeArray(data));\n } else {\n queue.push(data);\n }\n }\n\n return queue || [];\n }\n },\n dequeue: function dequeue(elem, type) {\n type = type || \"fx\";\n\n var queue = jQuery.queue(elem, type),\n startLength = queue.length,\n fn = queue.shift(),\n hooks = jQuery._queueHooks(elem, type),\n next = function next() {\n jQuery.dequeue(elem, type);\n }; // If the fx queue is dequeued, always remove the progress sentinel\n\n\n if (fn === \"inprogress\") {\n fn = queue.shift();\n startLength--;\n }\n\n if (fn) {\n // Add a progress sentinel to prevent the fx queue from being\n // automatically dequeued\n if (type === \"fx\") {\n queue.unshift(\"inprogress\");\n } // Clear up the last queue stop function\n\n\n delete hooks.stop;\n fn.call(elem, next, hooks);\n }\n\n if (!startLength && hooks) {\n hooks.empty.fire();\n }\n },\n // Not public - generate a queueHooks object, or return the current one\n _queueHooks: function _queueHooks(elem, type) {\n var key = type + \"queueHooks\";\n return dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n empty: jQuery.Callbacks(\"once memory\").add(function () {\n dataPriv.remove(elem, [type + \"queue\", key]);\n })\n });\n }\n });\n jQuery.fn.extend({\n queue: function queue(type, data) {\n var setter = 2;\n\n if (typeof type !== \"string\") {\n data = type;\n type = \"fx\";\n setter--;\n }\n\n if (arguments.length < setter) {\n return jQuery.queue(this[0], type);\n }\n\n return data === undefined ? this : this.each(function () {\n var queue = jQuery.queue(this, type, data); // Ensure a hooks for this queue\n\n jQuery._queueHooks(this, type);\n\n if (type === \"fx\" && queue[0] !== \"inprogress\") {\n jQuery.dequeue(this, type);\n }\n });\n },\n dequeue: function dequeue(type) {\n return this.each(function () {\n jQuery.dequeue(this, type);\n });\n },\n clearQueue: function clearQueue(type) {\n return this.queue(type || \"fx\", []);\n },\n // Get a promise resolved when queues of a certain type\n // are emptied (fx is the type by default)\n promise: function promise(type, obj) {\n var tmp,\n count = 1,\n defer = jQuery.Deferred(),\n elements = this,\n i = this.length,\n resolve = function resolve() {\n if (! --count) {\n defer.resolveWith(elements, [elements]);\n }\n };\n\n if (typeof type !== \"string\") {\n obj = type;\n type = undefined;\n }\n\n type = type || \"fx\";\n\n while (i--) {\n tmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\n if (tmp && tmp.empty) {\n count++;\n tmp.empty.add(resolve);\n }\n }\n\n resolve();\n return defer.promise(obj);\n }\n });\n var pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n var rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n var cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n var documentElement = document.documentElement;\n\n var isAttached = function isAttached(elem) {\n return jQuery.contains(elem.ownerDocument, elem);\n },\n composed = {\n composed: true\n }; // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n // Check attachment across shadow DOM boundaries when possible (gh-3504)\n // Support: iOS 10.0-10.2 only\n // Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n // leading to errors. We need to check for `getRootNode`.\n\n\n if (documentElement.getRootNode) {\n isAttached = function isAttached(elem) {\n return jQuery.contains(elem.ownerDocument, elem) || elem.getRootNode(composed) === elem.ownerDocument;\n };\n }\n\n var isHiddenWithinTree = function isHiddenWithinTree(elem, el) {\n // isHiddenWithinTree might be called from jQuery#filter function;\n // in that case, element will be second argument\n elem = el || elem; // Inline style trumps all\n\n return elem.style.display === \"none\" || elem.style.display === \"\" && // Otherwise, check computed style\n // Support: Firefox <=43 - 45\n // Disconnected elements can have computed display: none, so first confirm that elem is\n // in the document.\n isAttached(elem) && jQuery.css(elem, \"display\") === \"none\";\n };\n\n var swap = function swap(elem, options, callback, args) {\n var ret,\n name,\n old = {}; // Remember the old values, and insert the new ones\n\n for (name in options) {\n old[name] = elem.style[name];\n elem.style[name] = options[name];\n }\n\n ret = callback.apply(elem, args || []); // Revert the old values\n\n for (name in options) {\n elem.style[name] = old[name];\n }\n\n return ret;\n };\n\n function adjustCSS(elem, prop, valueParts, tween) {\n var adjusted,\n scale,\n maxIterations = 20,\n currentValue = tween ? function () {\n return tween.cur();\n } : function () {\n return jQuery.css(elem, prop, \"\");\n },\n initial = currentValue(),\n unit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n // Starting value computation is required for potential unit mismatches\n initialInUnit = elem.nodeType && (jQuery.cssNumber[prop] || unit !== \"px\" && +initial) && rcssNum.exec(jQuery.css(elem, prop));\n\n if (initialInUnit && initialInUnit[3] !== unit) {\n // Support: Firefox <=54\n // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n initial = initial / 2; // Trust units reported by jQuery.css\n\n unit = unit || initialInUnit[3]; // Iteratively approximate from a nonzero starting point\n\n initialInUnit = +initial || 1;\n\n while (maxIterations--) {\n // Evaluate and update our best guess (doubling guesses that zero out).\n // Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n jQuery.style(elem, prop, initialInUnit + unit);\n\n if ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n maxIterations = 0;\n }\n\n initialInUnit = initialInUnit / scale;\n }\n\n initialInUnit = initialInUnit * 2;\n jQuery.style(elem, prop, initialInUnit + unit); // Make sure we update the tween properties later on\n\n valueParts = valueParts || [];\n }\n\n if (valueParts) {\n initialInUnit = +initialInUnit || +initial || 0; // Apply relative offset (+=/-=) if specified\n\n adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2];\n\n if (tween) {\n tween.unit = unit;\n tween.start = initialInUnit;\n tween.end = adjusted;\n }\n }\n\n return adjusted;\n }\n\n var defaultDisplayMap = {};\n\n function getDefaultDisplay(elem) {\n var temp,\n doc = elem.ownerDocument,\n nodeName = elem.nodeName,\n display = defaultDisplayMap[nodeName];\n\n if (display) {\n return display;\n }\n\n temp = doc.body.appendChild(doc.createElement(nodeName));\n display = jQuery.css(temp, \"display\");\n temp.parentNode.removeChild(temp);\n\n if (display === \"none\") {\n display = \"block\";\n }\n\n defaultDisplayMap[nodeName] = display;\n return display;\n }\n\n function showHide(elements, show) {\n var display,\n elem,\n values = [],\n index = 0,\n length = elements.length; // Determine new display value for elements that need to change\n\n for (; index < length; index++) {\n elem = elements[index];\n\n if (!elem.style) {\n continue;\n }\n\n display = elem.style.display;\n\n if (show) {\n // Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n // check is required in this first loop unless we have a nonempty display value (either\n // inline or about-to-be-restored)\n if (display === \"none\") {\n values[index] = dataPriv.get(elem, \"display\") || null;\n\n if (!values[index]) {\n elem.style.display = \"\";\n }\n }\n\n if (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n values[index] = getDefaultDisplay(elem);\n }\n } else {\n if (display !== \"none\") {\n values[index] = \"none\"; // Remember what we're overwriting\n\n dataPriv.set(elem, \"display\", display);\n }\n }\n } // Set the display of the elements in a second loop to avoid constant reflow\n\n\n for (index = 0; index < length; index++) {\n if (values[index] != null) {\n elements[index].style.display = values[index];\n }\n }\n\n return elements;\n }\n\n jQuery.fn.extend({\n show: function show() {\n return showHide(this, true);\n },\n hide: function hide() {\n return showHide(this);\n },\n toggle: function toggle(state) {\n if (typeof state === \"boolean\") {\n return state ? this.show() : this.hide();\n }\n\n return this.each(function () {\n if (isHiddenWithinTree(this)) {\n jQuery(this).show();\n } else {\n jQuery(this).hide();\n }\n });\n }\n });\n var rcheckableType = /^(?:checkbox|radio)$/i;\n var rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n var rscriptType = /^$|^module$|\\/(?:java|ecma)script/i; // We have to close these tags to support XHTML (#13200)\n\n var wrapMap = {\n // Support: IE <=9 only\n option: [1, \"\"],\n // XHTML parsers do not magically insert elements in the\n // same way that tag soup parsers do. So we cannot shorten\n // this by omitting or other required elements.\n thead: [1, \"\", \"
\"],\n col: [2, \"\", \"
\"],\n tr: [2, \"\", \"
\"],\n td: [3, \"\", \"
\"],\n _default: [0, \"\", \"\"]\n }; // Support: IE <=9 only\n\n wrapMap.optgroup = wrapMap.option;\n wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n wrapMap.th = wrapMap.td;\n\n function getAll(context, tag) {\n // Support: IE <=9 - 11 only\n // Use typeof to avoid zero-argument method invocation on host objects (#15151)\n var ret;\n\n if (typeof context.getElementsByTagName !== \"undefined\") {\n ret = context.getElementsByTagName(tag || \"*\");\n } else if (typeof context.querySelectorAll !== \"undefined\") {\n ret = context.querySelectorAll(tag || \"*\");\n } else {\n ret = [];\n }\n\n if (tag === undefined || tag && nodeName(context, tag)) {\n return jQuery.merge([context], ret);\n }\n\n return ret;\n } // Mark scripts as having already been evaluated\n\n\n function setGlobalEval(elems, refElements) {\n var i = 0,\n l = elems.length;\n\n for (; i < l; i++) {\n dataPriv.set(elems[i], \"globalEval\", !refElements || dataPriv.get(refElements[i], \"globalEval\"));\n }\n }\n\n var rhtml = /<|&#?\\w+;/;\n\n function buildFragment(elems, context, scripts, selection, ignored) {\n var elem,\n tmp,\n tag,\n wrap,\n attached,\n j,\n fragment = context.createDocumentFragment(),\n nodes = [],\n i = 0,\n l = elems.length;\n\n for (; i < l; i++) {\n elem = elems[i];\n\n if (elem || elem === 0) {\n // Add nodes directly\n if (toType(elem) === \"object\") {\n // Support: Android <=4.0 only, PhantomJS 1 only\n // push.apply(_, arraylike) throws on ancient WebKit\n jQuery.merge(nodes, elem.nodeType ? [elem] : elem); // Convert non-html into a text node\n } else if (!rhtml.test(elem)) {\n nodes.push(context.createTextNode(elem)); // Convert html into DOM nodes\n } else {\n tmp = tmp || fragment.appendChild(context.createElement(\"div\")); // Deserialize a standard representation\n\n tag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n wrap = wrapMap[tag] || wrapMap._default;\n tmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2]; // Descend through wrappers to the right content\n\n j = wrap[0];\n\n while (j--) {\n tmp = tmp.lastChild;\n } // Support: Android <=4.0 only, PhantomJS 1 only\n // push.apply(_, arraylike) throws on ancient WebKit\n\n\n jQuery.merge(nodes, tmp.childNodes); // Remember the top-level container\n\n tmp = fragment.firstChild; // Ensure the created nodes are orphaned (#12392)\n\n tmp.textContent = \"\";\n }\n }\n } // Remove wrapper from fragment\n\n\n fragment.textContent = \"\";\n i = 0;\n\n while (elem = nodes[i++]) {\n // Skip elements already in the context collection (trac-4087)\n if (selection && jQuery.inArray(elem, selection) > -1) {\n if (ignored) {\n ignored.push(elem);\n }\n\n continue;\n }\n\n attached = isAttached(elem); // Append to fragment\n\n tmp = getAll(fragment.appendChild(elem), \"script\"); // Preserve script evaluation history\n\n if (attached) {\n setGlobalEval(tmp);\n } // Capture executables\n\n\n if (scripts) {\n j = 0;\n\n while (elem = tmp[j++]) {\n if (rscriptType.test(elem.type || \"\")) {\n scripts.push(elem);\n }\n }\n }\n }\n\n return fragment;\n }\n\n (function () {\n var fragment = document.createDocumentFragment(),\n div = fragment.appendChild(document.createElement(\"div\")),\n input = document.createElement(\"input\"); // Support: Android 4.0 - 4.3 only\n // Check state lost if the name is set (#11217)\n // Support: Windows Web Apps (WWA)\n // `name` and `type` must use .setAttribute for WWA (#14901)\n\n input.setAttribute(\"type\", \"radio\");\n input.setAttribute(\"checked\", \"checked\");\n input.setAttribute(\"name\", \"t\");\n div.appendChild(input); // Support: Android <=4.1 only\n // Older WebKit doesn't clone checked state correctly in fragments\n\n support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked; // Support: IE <=11 only\n // Make sure textarea (and checkbox) defaultValue is properly cloned\n\n div.innerHTML = \"\";\n support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n })();\n\n var rkeyEvent = /^key/,\n rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n function returnTrue() {\n return true;\n }\n\n function returnFalse() {\n return false;\n } // Support: IE <=9 - 11+\n // focus() and blur() are asynchronous, except when they are no-op.\n // So expect focus to be synchronous when the element is already active,\n // and blur to be synchronous when the element is not already active.\n // (focus and blur are always synchronous in other supported browsers,\n // this just defines when we can count on it).\n\n\n function expectSync(elem, type) {\n return elem === safeActiveElement() === (type === \"focus\");\n } // Support: IE <=9 only\n // Accessing document.activeElement can throw unexpectedly\n // https://bugs.jquery.com/ticket/13393\n\n\n function safeActiveElement() {\n try {\n return document.activeElement;\n } catch (err) {}\n }\n\n function _on(elem, types, selector, data, fn, one) {\n var origFn, type; // Types can be a map of types/handlers\n\n if (_typeof(types) === \"object\") {\n // ( types-Object, selector, data )\n if (typeof selector !== \"string\") {\n // ( types-Object, data )\n data = data || selector;\n selector = undefined;\n }\n\n for (type in types) {\n _on(elem, type, selector, data, types[type], one);\n }\n\n return elem;\n }\n\n if (data == null && fn == null) {\n // ( types, fn )\n fn = selector;\n data = selector = undefined;\n } else if (fn == null) {\n if (typeof selector === \"string\") {\n // ( types, selector, fn )\n fn = data;\n data = undefined;\n } else {\n // ( types, data, fn )\n fn = data;\n data = selector;\n selector = undefined;\n }\n }\n\n if (fn === false) {\n fn = returnFalse;\n } else if (!fn) {\n return elem;\n }\n\n if (one === 1) {\n origFn = fn;\n\n fn = function fn(event) {\n // Can use an empty set, since event contains the info\n jQuery().off(event);\n return origFn.apply(this, arguments);\n }; // Use same guid so caller can remove using origFn\n\n\n fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n }\n\n return elem.each(function () {\n jQuery.event.add(this, types, fn, data, selector);\n });\n }\n /*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\n\n\n jQuery.event = {\n global: {},\n add: function add(elem, types, handler, data, selector) {\n var handleObjIn,\n eventHandle,\n tmp,\n events,\n t,\n handleObj,\n special,\n handlers,\n type,\n namespaces,\n origType,\n elemData = dataPriv.get(elem); // Don't attach events to noData or text/comment nodes (but allow plain objects)\n\n if (!elemData) {\n return;\n } // Caller can pass in an object of custom data in lieu of the handler\n\n\n if (handler.handler) {\n handleObjIn = handler;\n handler = handleObjIn.handler;\n selector = handleObjIn.selector;\n } // Ensure that invalid selectors throw exceptions at attach time\n // Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\n\n if (selector) {\n jQuery.find.matchesSelector(documentElement, selector);\n } // Make sure that the handler has a unique ID, used to find/remove it later\n\n\n if (!handler.guid) {\n handler.guid = jQuery.guid++;\n } // Init the element's event structure and main handler, if this is the first\n\n\n if (!(events = elemData.events)) {\n events = elemData.events = {};\n }\n\n if (!(eventHandle = elemData.handle)) {\n eventHandle = elemData.handle = function (e) {\n // Discard the second event of a jQuery.event.trigger() and\n // when an event is called after a page has unloaded\n return typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply(elem, arguments) : undefined;\n };\n } // Handle multiple events separated by a space\n\n\n types = (types || \"\").match(rnothtmlwhite) || [\"\"];\n t = types.length;\n\n while (t--) {\n tmp = rtypenamespace.exec(types[t]) || [];\n type = origType = tmp[1];\n namespaces = (tmp[2] || \"\").split(\".\").sort(); // There *must* be a type, no attaching namespace-only handlers\n\n if (!type) {\n continue;\n } // If event changes its type, use the special event handlers for the changed type\n\n\n special = jQuery.event.special[type] || {}; // If selector defined, determine special event api type, otherwise given type\n\n type = (selector ? special.delegateType : special.bindType) || type; // Update special based on newly reset type\n\n special = jQuery.event.special[type] || {}; // handleObj is passed to all event handlers\n\n handleObj = jQuery.extend({\n type: type,\n origType: origType,\n data: data,\n handler: handler,\n guid: handler.guid,\n selector: selector,\n needsContext: selector && jQuery.expr.match.needsContext.test(selector),\n namespace: namespaces.join(\".\")\n }, handleObjIn); // Init the event handler queue if we're the first\n\n if (!(handlers = events[type])) {\n handlers = events[type] = [];\n handlers.delegateCount = 0; // Only use addEventListener if the special events handler returns false\n\n if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {\n if (elem.addEventListener) {\n elem.addEventListener(type, eventHandle);\n }\n }\n }\n\n if (special.add) {\n special.add.call(elem, handleObj);\n\n if (!handleObj.handler.guid) {\n handleObj.handler.guid = handler.guid;\n }\n } // Add to the element's handler list, delegates in front\n\n\n if (selector) {\n handlers.splice(handlers.delegateCount++, 0, handleObj);\n } else {\n handlers.push(handleObj);\n } // Keep track of which events have ever been used, for event optimization\n\n\n jQuery.event.global[type] = true;\n }\n },\n // Detach an event or set of events from an element\n remove: function remove(elem, types, handler, selector, mappedTypes) {\n var j,\n origCount,\n tmp,\n events,\n t,\n handleObj,\n special,\n handlers,\n type,\n namespaces,\n origType,\n elemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n if (!elemData || !(events = elemData.events)) {\n return;\n } // Once for each type.namespace in types; type may be omitted\n\n\n types = (types || \"\").match(rnothtmlwhite) || [\"\"];\n t = types.length;\n\n while (t--) {\n tmp = rtypenamespace.exec(types[t]) || [];\n type = origType = tmp[1];\n namespaces = (tmp[2] || \"\").split(\".\").sort(); // Unbind all events (on this namespace, if provided) for the element\n\n if (!type) {\n for (type in events) {\n jQuery.event.remove(elem, type + types[t], handler, selector, true);\n }\n\n continue;\n }\n\n special = jQuery.event.special[type] || {};\n type = (selector ? special.delegateType : special.bindType) || type;\n handlers = events[type] || [];\n tmp = tmp[2] && new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\"); // Remove matching events\n\n origCount = j = handlers.length;\n\n while (j--) {\n handleObj = handlers[j];\n\n if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector)) {\n handlers.splice(j, 1);\n\n if (handleObj.selector) {\n handlers.delegateCount--;\n }\n\n if (special.remove) {\n special.remove.call(elem, handleObj);\n }\n }\n } // Remove generic event handler if we removed something and no more handlers exist\n // (avoids potential for endless recursion during removal of special event handlers)\n\n\n if (origCount && !handlers.length) {\n if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {\n jQuery.removeEvent(elem, type, elemData.handle);\n }\n\n delete events[type];\n }\n } // Remove data and the expando if it's no longer used\n\n\n if (jQuery.isEmptyObject(events)) {\n dataPriv.remove(elem, \"handle events\");\n }\n },\n dispatch: function dispatch(nativeEvent) {\n // Make a writable jQuery.Event from the native event object\n var event = jQuery.event.fix(nativeEvent);\n var i,\n j,\n ret,\n matched,\n handleObj,\n handlerQueue,\n args = new Array(arguments.length),\n handlers = (dataPriv.get(this, \"events\") || {})[event.type] || [],\n special = jQuery.event.special[event.type] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event\n\n args[0] = event;\n\n for (i = 1; i < arguments.length; i++) {\n args[i] = arguments[i];\n }\n\n event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired\n\n if (special.preDispatch && special.preDispatch.call(this, event) === false) {\n return;\n } // Determine handlers\n\n\n handlerQueue = jQuery.event.handlers.call(this, event, handlers); // Run delegates first; they may want to stop propagation beneath us\n\n i = 0;\n\n while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n event.currentTarget = matched.elem;\n j = 0;\n\n while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) {\n // If the event is namespaced, then each handler is only invoked if it is\n // specially universal or its namespaces are a superset of the event's.\n if (!event.rnamespace || handleObj.namespace === false || event.rnamespace.test(handleObj.namespace)) {\n event.handleObj = handleObj;\n event.data = handleObj.data;\n ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args);\n\n if (ret !== undefined) {\n if ((event.result = ret) === false) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n }\n }\n } // Call the postDispatch hook for the mapped type\n\n\n if (special.postDispatch) {\n special.postDispatch.call(this, event);\n }\n\n return event.result;\n },\n handlers: function handlers(event, _handlers) {\n var i,\n handleObj,\n sel,\n matchedHandlers,\n matchedSelectors,\n handlerQueue = [],\n delegateCount = _handlers.delegateCount,\n cur = event.target; // Find delegate handlers\n\n if (delegateCount && // Support: IE <=9\n // Black-hole SVG instance trees (trac-13180)\n cur.nodeType && // Support: Firefox <=42\n // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n // Support: IE 11 only\n // ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n !(event.type === \"click\" && event.button >= 1)) {\n for (; cur !== this; cur = cur.parentNode || this) {\n // Don't check non-elements (#13208)\n // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n if (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n matchedHandlers = [];\n matchedSelectors = {};\n\n for (i = 0; i < delegateCount; i++) {\n handleObj = _handlers[i]; // Don't conflict with Object.prototype properties (#13203)\n\n sel = handleObj.selector + \" \";\n\n if (matchedSelectors[sel] === undefined) {\n matchedSelectors[sel] = handleObj.needsContext ? jQuery(sel, this).index(cur) > -1 : jQuery.find(sel, this, null, [cur]).length;\n }\n\n if (matchedSelectors[sel]) {\n matchedHandlers.push(handleObj);\n }\n }\n\n if (matchedHandlers.length) {\n handlerQueue.push({\n elem: cur,\n handlers: matchedHandlers\n });\n }\n }\n }\n } // Add the remaining (directly-bound) handlers\n\n\n cur = this;\n\n if (delegateCount < _handlers.length) {\n handlerQueue.push({\n elem: cur,\n handlers: _handlers.slice(delegateCount)\n });\n }\n\n return handlerQueue;\n },\n addProp: function addProp(name, hook) {\n Object.defineProperty(jQuery.Event.prototype, name, {\n enumerable: true,\n configurable: true,\n get: isFunction(hook) ? function () {\n if (this.originalEvent) {\n return hook(this.originalEvent);\n }\n } : function () {\n if (this.originalEvent) {\n return this.originalEvent[name];\n }\n },\n set: function set(value) {\n Object.defineProperty(this, name, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: value\n });\n }\n });\n },\n fix: function fix(originalEvent) {\n return originalEvent[jQuery.expando] ? originalEvent : new jQuery.Event(originalEvent);\n },\n special: {\n load: {\n // Prevent triggered image.load events from bubbling to window.load\n noBubble: true\n },\n click: {\n // Utilize native event to ensure correct state for checkable inputs\n setup: function setup(data) {\n // For mutual compressibility with _default, replace `this` access with a local var.\n // `|| data` is dead code meant only to preserve the variable through minification.\n var el = this || data; // Claim the first handler\n\n if (rcheckableType.test(el.type) && el.click && nodeName(el, \"input\")) {\n // dataPriv.set( el, \"click\", ... )\n leverageNative(el, \"click\", returnTrue);\n } // Return false to allow normal processing in the caller\n\n\n return false;\n },\n trigger: function trigger(data) {\n // For mutual compressibility with _default, replace `this` access with a local var.\n // `|| data` is dead code meant only to preserve the variable through minification.\n var el = this || data; // Force setup before triggering a click\n\n if (rcheckableType.test(el.type) && el.click && nodeName(el, \"input\")) {\n leverageNative(el, \"click\");\n } // Return non-false to allow normal event-path propagation\n\n\n return true;\n },\n // For cross-browser consistency, suppress native .click() on links\n // Also prevent it if we're currently inside a leveraged native-event stack\n _default: function _default(event) {\n var target = event.target;\n return rcheckableType.test(target.type) && target.click && nodeName(target, \"input\") && dataPriv.get(target, \"click\") || nodeName(target, \"a\");\n }\n },\n beforeunload: {\n postDispatch: function postDispatch(event) {\n // Support: Firefox 20+\n // Firefox doesn't alert if the returnValue field is not set.\n if (event.result !== undefined && event.originalEvent) {\n event.originalEvent.returnValue = event.result;\n }\n }\n }\n }\n }; // Ensure the presence of an event listener that handles manually-triggered\n // synthetic events by interrupting progress until reinvoked in response to\n // *native* events that it fires directly, ensuring that state changes have\n // already occurred before other listeners are invoked.\n\n function leverageNative(el, type, expectSync) {\n // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n if (!expectSync) {\n if (dataPriv.get(el, type) === undefined) {\n jQuery.event.add(el, type, returnTrue);\n }\n\n return;\n } // Register the controller as a special universal handler for all event namespaces\n\n\n dataPriv.set(el, type, false);\n jQuery.event.add(el, type, {\n namespace: false,\n handler: function handler(event) {\n var notAsync,\n result,\n saved = dataPriv.get(this, type);\n\n if (event.isTrigger & 1 && this[type]) {\n // Interrupt processing of the outer synthetic .trigger()ed event\n // Saved data should be false in such cases, but might be a leftover capture object\n // from an async native handler (gh-4350)\n if (!saved.length) {\n // Store arguments for use when handling the inner native event\n // There will always be at least one argument (an event object), so this array\n // will not be confused with a leftover capture object.\n saved = _slice.call(arguments);\n dataPriv.set(this, type, saved); // Trigger the native event and capture its result\n // Support: IE <=9 - 11+\n // focus() and blur() are asynchronous\n\n notAsync = expectSync(this, type);\n this[type]();\n result = dataPriv.get(this, type);\n\n if (saved !== result || notAsync) {\n dataPriv.set(this, type, false);\n } else {\n result = {};\n }\n\n if (saved !== result) {\n // Cancel the outer synthetic event\n event.stopImmediatePropagation();\n event.preventDefault();\n return result.value;\n } // If this is an inner synthetic event for an event with a bubbling surrogate\n // (focus or blur), assume that the surrogate already propagated from triggering the\n // native event and prevent that from happening again here.\n // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n // bubbling surrogate propagates *after* the non-bubbling base), but that seems\n // less bad than duplication.\n\n } else if ((jQuery.event.special[type] || {}).delegateType) {\n event.stopPropagation();\n } // If this is a native event triggered above, everything is now in order\n // Fire an inner synthetic event with the original arguments\n\n } else if (saved.length) {\n // ...and capture the result\n dataPriv.set(this, type, {\n value: jQuery.event.trigger( // Support: IE <=9 - 11+\n // Extend with the prototype to reset the above stopImmediatePropagation()\n jQuery.extend(saved[0], jQuery.Event.prototype), saved.slice(1), this)\n }); // Abort handling of the native event\n\n event.stopImmediatePropagation();\n }\n }\n });\n }\n\n jQuery.removeEvent = function (elem, type, handle) {\n // This \"if\" is needed for plain objects\n if (elem.removeEventListener) {\n elem.removeEventListener(type, handle);\n }\n };\n\n jQuery.Event = function (src, props) {\n // Allow instantiation without the 'new' keyword\n if (!(this instanceof jQuery.Event)) {\n return new jQuery.Event(src, props);\n } // Event object\n\n\n if (src && src.type) {\n this.originalEvent = src;\n this.type = src.type; // Events bubbling up the document may have been marked as prevented\n // by a handler lower down the tree; reflect the correct value.\n\n this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && // Support: Android <=2.3 only\n src.returnValue === false ? returnTrue : returnFalse; // Create target properties\n // Support: Safari <=6 - 7 only\n // Target should not be a text node (#504, #13143)\n\n this.target = src.target && src.target.nodeType === 3 ? src.target.parentNode : src.target;\n this.currentTarget = src.currentTarget;\n this.relatedTarget = src.relatedTarget; // Event type\n } else {\n this.type = src;\n } // Put explicitly provided properties onto the event object\n\n\n if (props) {\n jQuery.extend(this, props);\n } // Create a timestamp if incoming event doesn't have one\n\n\n this.timeStamp = src && src.timeStamp || Date.now(); // Mark it as fixed\n\n this[jQuery.expando] = true;\n }; // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\n\n jQuery.Event.prototype = {\n constructor: jQuery.Event,\n isDefaultPrevented: returnFalse,\n isPropagationStopped: returnFalse,\n isImmediatePropagationStopped: returnFalse,\n isSimulated: false,\n preventDefault: function preventDefault() {\n var e = this.originalEvent;\n this.isDefaultPrevented = returnTrue;\n\n if (e && !this.isSimulated) {\n e.preventDefault();\n }\n },\n stopPropagation: function stopPropagation() {\n var e = this.originalEvent;\n this.isPropagationStopped = returnTrue;\n\n if (e && !this.isSimulated) {\n e.stopPropagation();\n }\n },\n stopImmediatePropagation: function stopImmediatePropagation() {\n var e = this.originalEvent;\n this.isImmediatePropagationStopped = returnTrue;\n\n if (e && !this.isSimulated) {\n e.stopImmediatePropagation();\n }\n\n this.stopPropagation();\n }\n }; // Includes all common event props including KeyEvent and MouseEvent specific props\n\n jQuery.each({\n altKey: true,\n bubbles: true,\n cancelable: true,\n changedTouches: true,\n ctrlKey: true,\n detail: true,\n eventPhase: true,\n metaKey: true,\n pageX: true,\n pageY: true,\n shiftKey: true,\n view: true,\n \"char\": true,\n code: true,\n charCode: true,\n key: true,\n keyCode: true,\n button: true,\n buttons: true,\n clientX: true,\n clientY: true,\n offsetX: true,\n offsetY: true,\n pointerId: true,\n pointerType: true,\n screenX: true,\n screenY: true,\n targetTouches: true,\n toElement: true,\n touches: true,\n which: function which(event) {\n var button = event.button; // Add which for key events\n\n if (event.which == null && rkeyEvent.test(event.type)) {\n return event.charCode != null ? event.charCode : event.keyCode;\n } // Add which for click: 1 === left; 2 === middle; 3 === right\n\n\n if (!event.which && button !== undefined && rmouseEvent.test(event.type)) {\n if (button & 1) {\n return 1;\n }\n\n if (button & 2) {\n return 3;\n }\n\n if (button & 4) {\n return 2;\n }\n\n return 0;\n }\n\n return event.which;\n }\n }, jQuery.event.addProp);\n jQuery.each({\n focus: \"focusin\",\n blur: \"focusout\"\n }, function (type, delegateType) {\n jQuery.event.special[type] = {\n // Utilize native event if possible so blur/focus sequence is correct\n setup: function setup() {\n // Claim the first handler\n // dataPriv.set( this, \"focus\", ... )\n // dataPriv.set( this, \"blur\", ... )\n leverageNative(this, type, expectSync); // Return false to allow normal processing in the caller\n\n return false;\n },\n trigger: function trigger() {\n // Force setup before trigger\n leverageNative(this, type); // Return non-false to allow normal event-path propagation\n\n return true;\n },\n delegateType: delegateType\n };\n }); // Create mouseenter/leave events using mouseover/out and event-time checks\n // so that event delegation works in jQuery.\n // Do the same for pointerenter/pointerleave and pointerover/pointerout\n //\n // Support: Safari 7 only\n // Safari sends mouseenter too often; see:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n // for the description of the bug (it existed in older Chrome versions as well).\n\n jQuery.each({\n mouseenter: \"mouseover\",\n mouseleave: \"mouseout\",\n pointerenter: \"pointerover\",\n pointerleave: \"pointerout\"\n }, function (orig, fix) {\n jQuery.event.special[orig] = {\n delegateType: fix,\n bindType: fix,\n handle: function handle(event) {\n var ret,\n target = this,\n related = event.relatedTarget,\n handleObj = event.handleObj; // For mouseenter/leave call the handler if related is outside the target.\n // NB: No relatedTarget if the mouse left/entered the browser window\n\n if (!related || related !== target && !jQuery.contains(target, related)) {\n event.type = handleObj.origType;\n ret = handleObj.handler.apply(this, arguments);\n event.type = fix;\n }\n\n return ret;\n }\n };\n });\n jQuery.fn.extend({\n on: function on(types, selector, data, fn) {\n return _on(this, types, selector, data, fn);\n },\n one: function one(types, selector, data, fn) {\n return _on(this, types, selector, data, fn, 1);\n },\n off: function off(types, selector, fn) {\n var handleObj, type;\n\n if (types && types.preventDefault && types.handleObj) {\n // ( event ) dispatched jQuery.Event\n handleObj = types.handleObj;\n jQuery(types.delegateTarget).off(handleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler);\n return this;\n }\n\n if (_typeof(types) === \"object\") {\n // ( types-object [, selector] )\n for (type in types) {\n this.off(type, selector, types[type]);\n }\n\n return this;\n }\n\n if (selector === false || typeof selector === \"function\") {\n // ( types [, fn] )\n fn = selector;\n selector = undefined;\n }\n\n if (fn === false) {\n fn = returnFalse;\n }\n\n return this.each(function () {\n jQuery.event.remove(this, types, fn, selector);\n });\n }\n });\n var\n /* eslint-disable max-len */\n // See https://github.com/eslint/eslint/issues/3229\n rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n /* eslint-enable */\n // Support: IE <=10 - 11, Edge 12 - 13 only\n // In IE/Edge using regex groups here causes severe slowdowns.\n // See https://connect.microsoft.com/IE/feedback/details/1736512/\n rnoInnerhtml = /\\s*$/g; // Prefer a tbody over its parent table for containing new rows\n\n function manipulationTarget(elem, content) {\n if (nodeName(elem, \"table\") && nodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n return jQuery(elem).children(\"tbody\")[0] || elem;\n }\n\n return elem;\n } // Replace/restore the type attribute of script elements for safe DOM manipulation\n\n\n function disableScript(elem) {\n elem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n return elem;\n }\n\n function restoreScript(elem) {\n if ((elem.type || \"\").slice(0, 5) === \"true/\") {\n elem.type = elem.type.slice(5);\n } else {\n elem.removeAttribute(\"type\");\n }\n\n return elem;\n }\n\n function cloneCopyEvent(src, dest) {\n var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n if (dest.nodeType !== 1) {\n return;\n } // 1. Copy private data: events, handlers, etc.\n\n\n if (dataPriv.hasData(src)) {\n pdataOld = dataPriv.access(src);\n pdataCur = dataPriv.set(dest, pdataOld);\n events = pdataOld.events;\n\n if (events) {\n delete pdataCur.handle;\n pdataCur.events = {};\n\n for (type in events) {\n for (i = 0, l = events[type].length; i < l; i++) {\n jQuery.event.add(dest, type, events[type][i]);\n }\n }\n }\n } // 2. Copy user data\n\n\n if (dataUser.hasData(src)) {\n udataOld = dataUser.access(src);\n udataCur = jQuery.extend({}, udataOld);\n dataUser.set(dest, udataCur);\n }\n } // Fix IE bugs, see support tests\n\n\n function fixInput(src, dest) {\n var nodeName = dest.nodeName.toLowerCase(); // Fails to persist the checked state of a cloned checkbox or radio button.\n\n if (nodeName === \"input\" && rcheckableType.test(src.type)) {\n dest.checked = src.checked; // Fails to return the selected option to the default selected state when cloning options\n } else if (nodeName === \"input\" || nodeName === \"textarea\") {\n dest.defaultValue = src.defaultValue;\n }\n }\n\n function domManip(collection, args, callback, ignored) {\n // Flatten any nested arrays\n args = concat.apply([], args);\n var fragment,\n first,\n scripts,\n hasScripts,\n node,\n doc,\n i = 0,\n l = collection.length,\n iNoClone = l - 1,\n value = args[0],\n valueIsFunction = isFunction(value); // We can't cloneNode fragments that contain checked, in WebKit\n\n if (valueIsFunction || l > 1 && typeof value === \"string\" && !support.checkClone && rchecked.test(value)) {\n return collection.each(function (index) {\n var self = collection.eq(index);\n\n if (valueIsFunction) {\n args[0] = value.call(this, index, self.html());\n }\n\n domManip(self, args, callback, ignored);\n });\n }\n\n if (l) {\n fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n first = fragment.firstChild;\n\n if (fragment.childNodes.length === 1) {\n fragment = first;\n } // Require either new content or an interest in ignored elements to invoke the callback\n\n\n if (first || ignored) {\n scripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n hasScripts = scripts.length; // Use the original fragment for the last item\n // instead of the first because it can end up\n // being emptied incorrectly in certain situations (#8070).\n\n for (; i < l; i++) {\n node = fragment;\n\n if (i !== iNoClone) {\n node = jQuery.clone(node, true, true); // Keep references to cloned scripts for later restoration\n\n if (hasScripts) {\n // Support: Android <=4.0 only, PhantomJS 1 only\n // push.apply(_, arraylike) throws on ancient WebKit\n jQuery.merge(scripts, getAll(node, \"script\"));\n }\n }\n\n callback.call(collection[i], node, i);\n }\n\n if (hasScripts) {\n doc = scripts[scripts.length - 1].ownerDocument; // Reenable scripts\n\n jQuery.map(scripts, restoreScript); // Evaluate executable scripts on first document insertion\n\n for (i = 0; i < hasScripts; i++) {\n node = scripts[i];\n\n if (rscriptType.test(node.type || \"\") && !dataPriv.access(node, \"globalEval\") && jQuery.contains(doc, node)) {\n if (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n // Optional AJAX dependency, but won't run scripts if not present\n if (jQuery._evalUrl && !node.noModule) {\n jQuery._evalUrl(node.src, {\n nonce: node.nonce || node.getAttribute(\"nonce\")\n });\n }\n } else {\n DOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n }\n }\n }\n }\n }\n }\n\n return collection;\n }\n\n function _remove(elem, selector, keepData) {\n var node,\n nodes = selector ? jQuery.filter(selector, elem) : elem,\n i = 0;\n\n for (; (node = nodes[i]) != null; i++) {\n if (!keepData && node.nodeType === 1) {\n jQuery.cleanData(getAll(node));\n }\n\n if (node.parentNode) {\n if (keepData && isAttached(node)) {\n setGlobalEval(getAll(node, \"script\"));\n }\n\n node.parentNode.removeChild(node);\n }\n }\n\n return elem;\n }\n\n jQuery.extend({\n htmlPrefilter: function htmlPrefilter(html) {\n return html.replace(rxhtmlTag, \"<$1>\");\n },\n clone: function clone(elem, dataAndEvents, deepDataAndEvents) {\n var i,\n l,\n srcElements,\n destElements,\n clone = elem.cloneNode(true),\n inPage = isAttached(elem); // Fix IE cloning issues\n\n if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) {\n // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n destElements = getAll(clone);\n srcElements = getAll(elem);\n\n for (i = 0, l = srcElements.length; i < l; i++) {\n fixInput(srcElements[i], destElements[i]);\n }\n } // Copy the events from the original to the clone\n\n\n if (dataAndEvents) {\n if (deepDataAndEvents) {\n srcElements = srcElements || getAll(elem);\n destElements = destElements || getAll(clone);\n\n for (i = 0, l = srcElements.length; i < l; i++) {\n cloneCopyEvent(srcElements[i], destElements[i]);\n }\n } else {\n cloneCopyEvent(elem, clone);\n }\n } // Preserve script evaluation history\n\n\n destElements = getAll(clone, \"script\");\n\n if (destElements.length > 0) {\n setGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n } // Return the cloned set\n\n\n return clone;\n },\n cleanData: function cleanData(elems) {\n var data,\n elem,\n type,\n special = jQuery.event.special,\n i = 0;\n\n for (; (elem = elems[i]) !== undefined; i++) {\n if (acceptData(elem)) {\n if (data = elem[dataPriv.expando]) {\n if (data.events) {\n for (type in data.events) {\n if (special[type]) {\n jQuery.event.remove(elem, type); // This is a shortcut to avoid jQuery.event.remove's overhead\n } else {\n jQuery.removeEvent(elem, type, data.handle);\n }\n }\n } // Support: Chrome <=35 - 45+\n // Assign undefined instead of using delete, see Data#remove\n\n\n elem[dataPriv.expando] = undefined;\n }\n\n if (elem[dataUser.expando]) {\n // Support: Chrome <=35 - 45+\n // Assign undefined instead of using delete, see Data#remove\n elem[dataUser.expando] = undefined;\n }\n }\n }\n }\n });\n jQuery.fn.extend({\n detach: function detach(selector) {\n return _remove(this, selector, true);\n },\n remove: function remove(selector) {\n return _remove(this, selector);\n },\n text: function text(value) {\n return access(this, function (value) {\n return value === undefined ? jQuery.text(this) : this.empty().each(function () {\n if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n this.textContent = value;\n }\n });\n }, null, value, arguments.length);\n },\n append: function append() {\n return domManip(this, arguments, function (elem) {\n if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n var target = manipulationTarget(this, elem);\n target.appendChild(elem);\n }\n });\n },\n prepend: function prepend() {\n return domManip(this, arguments, function (elem) {\n if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n var target = manipulationTarget(this, elem);\n target.insertBefore(elem, target.firstChild);\n }\n });\n },\n before: function before() {\n return domManip(this, arguments, function (elem) {\n if (this.parentNode) {\n this.parentNode.insertBefore(elem, this);\n }\n });\n },\n after: function after() {\n return domManip(this, arguments, function (elem) {\n if (this.parentNode) {\n this.parentNode.insertBefore(elem, this.nextSibling);\n }\n });\n },\n empty: function empty() {\n var elem,\n i = 0;\n\n for (; (elem = this[i]) != null; i++) {\n if (elem.nodeType === 1) {\n // Prevent memory leaks\n jQuery.cleanData(getAll(elem, false)); // Remove any remaining nodes\n\n elem.textContent = \"\";\n }\n }\n\n return this;\n },\n clone: function clone(dataAndEvents, deepDataAndEvents) {\n dataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n return this.map(function () {\n return jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n });\n },\n html: function html(value) {\n return access(this, function (value) {\n var elem = this[0] || {},\n i = 0,\n l = this.length;\n\n if (value === undefined && elem.nodeType === 1) {\n return elem.innerHTML;\n } // See if we can take a shortcut and just use innerHTML\n\n\n if (typeof value === \"string\" && !rnoInnerhtml.test(value) && !wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n value = jQuery.htmlPrefilter(value);\n\n try {\n for (; i < l; i++) {\n elem = this[i] || {}; // Remove element nodes and prevent memory leaks\n\n if (elem.nodeType === 1) {\n jQuery.cleanData(getAll(elem, false));\n elem.innerHTML = value;\n }\n }\n\n elem = 0; // If using innerHTML throws an exception, use the fallback method\n } catch (e) {}\n }\n\n if (elem) {\n this.empty().append(value);\n }\n }, null, value, arguments.length);\n },\n replaceWith: function replaceWith() {\n var ignored = []; // Make the changes, replacing each non-ignored context element with the new content\n\n return domManip(this, arguments, function (elem) {\n var parent = this.parentNode;\n\n if (jQuery.inArray(this, ignored) < 0) {\n jQuery.cleanData(getAll(this));\n\n if (parent) {\n parent.replaceChild(elem, this);\n }\n } // Force callback invocation\n\n }, ignored);\n }\n });\n jQuery.each({\n appendTo: \"append\",\n prependTo: \"prepend\",\n insertBefore: \"before\",\n insertAfter: \"after\",\n replaceAll: \"replaceWith\"\n }, function (name, original) {\n jQuery.fn[name] = function (selector) {\n var elems,\n ret = [],\n insert = jQuery(selector),\n last = insert.length - 1,\n i = 0;\n\n for (; i <= last; i++) {\n elems = i === last ? this : this.clone(true);\n jQuery(insert[i])[original](elems); // Support: Android <=4.0 only, PhantomJS 1 only\n // .get() because push.apply(_, arraylike) throws on ancient WebKit\n\n push.apply(ret, elems.get());\n }\n\n return this.pushStack(ret);\n };\n });\n var rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n var getStyles = function getStyles(elem) {\n // Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n // IE throws on elements created in popups\n // FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n var view = elem.ownerDocument.defaultView;\n\n if (!view || !view.opener) {\n view = window;\n }\n\n return view.getComputedStyle(elem);\n };\n\n var rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n (function () {\n // Executing both pixelPosition & boxSizingReliable tests require only one layout\n // so they're executed at the same time to save the second computation.\n function computeStyleTests() {\n // This is a singleton, we need to execute it only once\n if (!div) {\n return;\n }\n\n container.style.cssText = \"position:absolute;left:-11111px;width:60px;\" + \"margin-top:1px;padding:0;border:0\";\n div.style.cssText = \"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" + \"margin:auto;border:1px;padding:1px;\" + \"width:60%;top:1%\";\n documentElement.appendChild(container).appendChild(div);\n var divStyle = window.getComputedStyle(div);\n pixelPositionVal = divStyle.top !== \"1%\"; // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\n reliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12; // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n // Some styles come back with percentage values, even though they shouldn't\n\n div.style.right = \"60%\";\n pixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36; // Support: IE 9 - 11 only\n // Detect misreporting of content dimensions for box-sizing:border-box elements\n\n boxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36; // Support: IE 9 only\n // Detect overflow:scroll screwiness (gh-3699)\n // Support: Chrome <=64\n // Don't get tricked when zoom affects offsetWidth (gh-4029)\n\n div.style.position = \"absolute\";\n scrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n documentElement.removeChild(container); // Nullify the div so it wouldn't be stored in the memory and\n // it will also be a sign that checks already performed\n\n div = null;\n }\n\n function roundPixelMeasures(measure) {\n return Math.round(parseFloat(measure));\n }\n\n var pixelPositionVal,\n boxSizingReliableVal,\n scrollboxSizeVal,\n pixelBoxStylesVal,\n reliableMarginLeftVal,\n container = document.createElement(\"div\"),\n div = document.createElement(\"div\"); // Finish early in limited (non-browser) environments\n\n if (!div.style) {\n return;\n } // Support: IE <=9 - 11 only\n // Style of cloned element affects source element cloned (#8908)\n\n\n div.style.backgroundClip = \"content-box\";\n div.cloneNode(true).style.backgroundClip = \"\";\n support.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n jQuery.extend(support, {\n boxSizingReliable: function boxSizingReliable() {\n computeStyleTests();\n return boxSizingReliableVal;\n },\n pixelBoxStyles: function pixelBoxStyles() {\n computeStyleTests();\n return pixelBoxStylesVal;\n },\n pixelPosition: function pixelPosition() {\n computeStyleTests();\n return pixelPositionVal;\n },\n reliableMarginLeft: function reliableMarginLeft() {\n computeStyleTests();\n return reliableMarginLeftVal;\n },\n scrollboxSize: function scrollboxSize() {\n computeStyleTests();\n return scrollboxSizeVal;\n }\n });\n })();\n\n function curCSS(elem, name, computed) {\n var width,\n minWidth,\n maxWidth,\n ret,\n // Support: Firefox 51+\n // Retrieving style before computed somehow\n // fixes an issue with getting wrong values\n // on detached elements\n style = elem.style;\n computed = computed || getStyles(elem); // getPropertyValue is needed for:\n // .css('filter') (IE 9 only, #12537)\n // .css('--customProperty) (#3144)\n\n if (computed) {\n ret = computed.getPropertyValue(name) || computed[name];\n\n if (ret === \"\" && !isAttached(elem)) {\n ret = jQuery.style(elem, name);\n } // A tribute to the \"awesome hack by Dean Edwards\"\n // Android Browser returns percentage for some values,\n // but width seems to be reliably pixels.\n // This is against the CSSOM draft spec:\n // https://drafts.csswg.org/cssom/#resolved-values\n\n\n if (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n // Remember the original values\n width = style.width;\n minWidth = style.minWidth;\n maxWidth = style.maxWidth; // Put in the new values to get a computed value out\n\n style.minWidth = style.maxWidth = style.width = ret;\n ret = computed.width; // Revert the changed values\n\n style.width = width;\n style.minWidth = minWidth;\n style.maxWidth = maxWidth;\n }\n }\n\n return ret !== undefined ? // Support: IE <=9 - 11 only\n // IE returns zIndex value as an integer.\n ret + \"\" : ret;\n }\n\n function addGetHookIf(conditionFn, hookFn) {\n // Define the hook, we'll check on the first run if it's really needed.\n return {\n get: function get() {\n if (conditionFn()) {\n // Hook not needed (or it's not possible to use it due\n // to missing dependency), remove it.\n delete this.get;\n return;\n } // Hook needed; redefine it so that the support test is not executed again.\n\n\n return (this.get = hookFn).apply(this, arguments);\n }\n };\n }\n\n var cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n emptyStyle = document.createElement(\"div\").style,\n vendorProps = {}; // Return a vendor-prefixed property or undefined\n\n function vendorPropName(name) {\n // Check for vendor prefixed names\n var capName = name[0].toUpperCase() + name.slice(1),\n i = cssPrefixes.length;\n\n while (i--) {\n name = cssPrefixes[i] + capName;\n\n if (name in emptyStyle) {\n return name;\n }\n }\n } // Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\n\n function finalPropName(name) {\n var _final = jQuery.cssProps[name] || vendorProps[name];\n\n if (_final) {\n return _final;\n }\n\n if (name in emptyStyle) {\n return name;\n }\n\n return vendorProps[name] = vendorPropName(name) || name;\n }\n\n var // Swappable if display is none or starts with table\n // except \"table\", \"table-cell\", or \"table-caption\"\n // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n rdisplayswap = /^(none|table(?!-c[ea]).+)/,\n rcustomProp = /^--/,\n cssShow = {\n position: \"absolute\",\n visibility: \"hidden\",\n display: \"block\"\n },\n cssNormalTransform = {\n letterSpacing: \"0\",\n fontWeight: \"400\"\n };\n\n function setPositiveNumber(elem, value, subtract) {\n // Any relative (+/-) values have already been\n // normalized at this point\n var matches = rcssNum.exec(value);\n return matches ? // Guard against undefined \"subtract\", e.g., when used as in cssHooks\n Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") : value;\n }\n\n function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n var i = dimension === \"width\" ? 1 : 0,\n extra = 0,\n delta = 0; // Adjustment may not be necessary\n\n if (box === (isBorderBox ? \"border\" : \"content\")) {\n return 0;\n }\n\n for (; i < 4; i += 2) {\n // Both box models exclude margin\n if (box === \"margin\") {\n delta += jQuery.css(elem, box + cssExpand[i], true, styles);\n } // If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\n\n if (!isBorderBox) {\n // Add padding\n delta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles); // For \"border\" or \"margin\", add border\n\n if (box !== \"padding\") {\n delta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles); // But still keep track of it otherwise\n } else {\n extra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n } // If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n // \"padding\" or \"margin\"\n\n } else {\n // For \"content\", subtract padding\n if (box === \"content\") {\n delta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n } // For \"content\" or \"padding\", subtract border\n\n\n if (box !== \"margin\") {\n delta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n }\n }\n } // Account for positive content-box scroll gutter when requested by providing computedVal\n\n\n if (!isBorderBox && computedVal >= 0) {\n // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n // Assuming integer scroll gutter, subtract the rest and round down\n delta += Math.max(0, Math.ceil(elem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] - computedVal - delta - extra - 0.5 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n // Use an explicit zero to avoid NaN (gh-3964)\n )) || 0;\n }\n\n return delta;\n }\n\n function getWidthOrHeight(elem, dimension, extra) {\n // Start with computed style\n var styles = getStyles(elem),\n // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n // Fake content-box until we know it's needed to know the true value.\n boxSizingNeeded = !support.boxSizingReliable() || extra,\n isBorderBox = boxSizingNeeded && jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n valueIsBorderBox = isBorderBox,\n val = curCSS(elem, dimension, styles),\n offsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1); // Support: Firefox <=54\n // Return a confounding non-pixel value or feign ignorance, as appropriate.\n\n if (rnumnonpx.test(val)) {\n if (!extra) {\n return val;\n }\n\n val = \"auto\";\n } // Fall back to offsetWidth/offsetHeight when value is \"auto\"\n // This happens for inline elements with no explicit setting (gh-3571)\n // Support: Android <=4.1 - 4.3 only\n // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n // Support: IE 9-11 only\n // Also use offsetWidth/offsetHeight for when box sizing is unreliable\n // We use getClientRects() to check for hidden/disconnected.\n // In those cases, the computed value can be trusted to be border-box\n\n\n if ((!support.boxSizingReliable() && isBorderBox || val === \"auto\" || !parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") && elem.getClientRects().length) {\n isBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\"; // Where available, offsetWidth/offsetHeight approximate border box dimensions.\n // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n // retrieved value as a content box dimension.\n\n valueIsBorderBox = offsetProp in elem;\n\n if (valueIsBorderBox) {\n val = elem[offsetProp];\n }\n } // Normalize \"\" and auto\n\n\n val = parseFloat(val) || 0; // Adjust for the element's box model\n\n return val + boxModelAdjustment(elem, dimension, extra || (isBorderBox ? \"border\" : \"content\"), valueIsBorderBox, styles, // Provide the current computed size to request scroll gutter calculation (gh-3589)\n val) + \"px\";\n }\n\n jQuery.extend({\n // Add in style property hooks for overriding the default\n // behavior of getting and setting a style property\n cssHooks: {\n opacity: {\n get: function get(elem, computed) {\n if (computed) {\n // We should always get a number back from opacity\n var ret = curCSS(elem, \"opacity\");\n return ret === \"\" ? \"1\" : ret;\n }\n }\n }\n },\n // Don't automatically add \"px\" to these possibly-unitless properties\n cssNumber: {\n \"animationIterationCount\": true,\n \"columnCount\": true,\n \"fillOpacity\": true,\n \"flexGrow\": true,\n \"flexShrink\": true,\n \"fontWeight\": true,\n \"gridArea\": true,\n \"gridColumn\": true,\n \"gridColumnEnd\": true,\n \"gridColumnStart\": true,\n \"gridRow\": true,\n \"gridRowEnd\": true,\n \"gridRowStart\": true,\n \"lineHeight\": true,\n \"opacity\": true,\n \"order\": true,\n \"orphans\": true,\n \"widows\": true,\n \"zIndex\": true,\n \"zoom\": true\n },\n // Add in properties whose names you wish to fix before\n // setting or getting the value\n cssProps: {},\n // Get and set the style property on a DOM Node\n style: function style(elem, name, value, extra) {\n // Don't set styles on text and comment nodes\n if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n return;\n } // Make sure that we're working with the right name\n\n\n var ret,\n type,\n hooks,\n origName = camelCase(name),\n isCustomProp = rcustomProp.test(name),\n style = elem.style; // Make sure that we're working with the right name. We don't\n // want to query the value if it is a CSS custom property\n // since they are user-defined.\n\n if (!isCustomProp) {\n name = finalPropName(origName);\n } // Gets hook for the prefixed version, then unprefixed version\n\n\n hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // Check if we're setting a value\n\n if (value !== undefined) {\n type = _typeof(value); // Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\n if (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n value = adjustCSS(elem, name, ret); // Fixes bug #9237\n\n type = \"number\";\n } // Make sure that null and NaN values aren't set (#7116)\n\n\n if (value == null || value !== value) {\n return;\n } // If a number was passed in, add the unit (except for certain CSS properties)\n // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n // \"px\" to a few hardcoded values.\n\n\n if (type === \"number\" && !isCustomProp) {\n value += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n } // background-* props affect original clone's values\n\n\n if (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n style[name] = \"inherit\";\n } // If a hook was provided, use that value, otherwise just set the specified value\n\n\n if (!hooks || !(\"set\" in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {\n if (isCustomProp) {\n style.setProperty(name, value);\n } else {\n style[name] = value;\n }\n }\n } else {\n // If a hook was provided get the non-computed value from there\n if (hooks && \"get\" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) {\n return ret;\n } // Otherwise just get the value from the style object\n\n\n return style[name];\n }\n },\n css: function css(elem, name, extra, styles) {\n var val,\n num,\n hooks,\n origName = camelCase(name),\n isCustomProp = rcustomProp.test(name); // Make sure that we're working with the right name. We don't\n // want to modify the value if it is a CSS custom property\n // since they are user-defined.\n\n if (!isCustomProp) {\n name = finalPropName(origName);\n } // Try prefixed name followed by the unprefixed name\n\n\n hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // If a hook was provided get the computed value from there\n\n if (hooks && \"get\" in hooks) {\n val = hooks.get(elem, true, extra);\n } // Otherwise, if a way to get the computed value exists, use that\n\n\n if (val === undefined) {\n val = curCSS(elem, name, styles);\n } // Convert \"normal\" to computed value\n\n\n if (val === \"normal\" && name in cssNormalTransform) {\n val = cssNormalTransform[name];\n } // Make numeric if forced or a qualifier was provided and val looks numeric\n\n\n if (extra === \"\" || extra) {\n num = parseFloat(val);\n return extra === true || isFinite(num) ? num || 0 : val;\n }\n\n return val;\n }\n });\n jQuery.each([\"height\", \"width\"], function (i, dimension) {\n jQuery.cssHooks[dimension] = {\n get: function get(elem, computed, extra) {\n if (computed) {\n // Certain elements can have dimension info if we invisibly show them\n // but it must have a current display style that would benefit\n return rdisplayswap.test(jQuery.css(elem, \"display\")) && ( // Support: Safari 8+\n // Table columns in Safari have non-zero offsetWidth & zero\n // getBoundingClientRect().width unless display is changed.\n // Support: IE <=11 only\n // Running getBoundingClientRect on a disconnected node\n // in IE throws an error.\n !elem.getClientRects().length || !elem.getBoundingClientRect().width) ? swap(elem, cssShow, function () {\n return getWidthOrHeight(elem, dimension, extra);\n }) : getWidthOrHeight(elem, dimension, extra);\n }\n },\n set: function set(elem, value, extra) {\n var matches,\n styles = getStyles(elem),\n // Only read styles.position if the test has a chance to fail\n // to avoid forcing a reflow.\n scrollboxSizeBuggy = !support.scrollboxSize() && styles.position === \"absolute\",\n // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n boxSizingNeeded = scrollboxSizeBuggy || extra,\n isBorderBox = boxSizingNeeded && jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n subtract = extra ? boxModelAdjustment(elem, dimension, extra, isBorderBox, styles) : 0; // Account for unreliable border-box dimensions by comparing offset* to computed and\n // faking a content-box to get border and padding (gh-3699)\n\n if (isBorderBox && scrollboxSizeBuggy) {\n subtract -= Math.ceil(elem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] - parseFloat(styles[dimension]) - boxModelAdjustment(elem, dimension, \"border\", false, styles) - 0.5);\n } // Convert to pixels if value adjustment is needed\n\n\n if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || \"px\") !== \"px\") {\n elem.style[dimension] = value;\n value = jQuery.css(elem, dimension);\n }\n\n return setPositiveNumber(elem, value, subtract);\n }\n };\n });\n jQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft, function (elem, computed) {\n if (computed) {\n return (parseFloat(curCSS(elem, \"marginLeft\")) || elem.getBoundingClientRect().left - swap(elem, {\n marginLeft: 0\n }, function () {\n return elem.getBoundingClientRect().left;\n })) + \"px\";\n }\n }); // These hooks are used by animate to expand properties\n\n jQuery.each({\n margin: \"\",\n padding: \"\",\n border: \"Width\"\n }, function (prefix, suffix) {\n jQuery.cssHooks[prefix + suffix] = {\n expand: function expand(value) {\n var i = 0,\n expanded = {},\n // Assumes a single number if not a string\n parts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n for (; i < 4; i++) {\n expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];\n }\n\n return expanded;\n }\n };\n\n if (prefix !== \"margin\") {\n jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n }\n });\n jQuery.fn.extend({\n css: function css(name, value) {\n return access(this, function (elem, name, value) {\n var styles,\n len,\n map = {},\n i = 0;\n\n if (Array.isArray(name)) {\n styles = getStyles(elem);\n len = name.length;\n\n for (; i < len; i++) {\n map[name[i]] = jQuery.css(elem, name[i], false, styles);\n }\n\n return map;\n }\n\n return value !== undefined ? jQuery.style(elem, name, value) : jQuery.css(elem, name);\n }, name, value, arguments.length > 1);\n }\n });\n\n function Tween(elem, options, prop, end, easing) {\n return new Tween.prototype.init(elem, options, prop, end, easing);\n }\n\n jQuery.Tween = Tween;\n Tween.prototype = {\n constructor: Tween,\n init: function init(elem, options, prop, end, easing, unit) {\n this.elem = elem;\n this.prop = prop;\n this.easing = easing || jQuery.easing._default;\n this.options = options;\n this.start = this.now = this.cur();\n this.end = end;\n this.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n },\n cur: function cur() {\n var hooks = Tween.propHooks[this.prop];\n return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this);\n },\n run: function run(percent) {\n var eased,\n hooks = Tween.propHooks[this.prop];\n\n if (this.options.duration) {\n this.pos = eased = jQuery.easing[this.easing](percent, this.options.duration * percent, 0, 1, this.options.duration);\n } else {\n this.pos = eased = percent;\n }\n\n this.now = (this.end - this.start) * eased + this.start;\n\n if (this.options.step) {\n this.options.step.call(this.elem, this.now, this);\n }\n\n if (hooks && hooks.set) {\n hooks.set(this);\n } else {\n Tween.propHooks._default.set(this);\n }\n\n return this;\n }\n };\n Tween.prototype.init.prototype = Tween.prototype;\n Tween.propHooks = {\n _default: {\n get: function get(tween) {\n var result; // Use a property on the element directly when it is not a DOM element,\n // or when there is no matching style property that exists.\n\n if (tween.elem.nodeType !== 1 || tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n return tween.elem[tween.prop];\n } // Passing an empty string as a 3rd parameter to .css will automatically\n // attempt a parseFloat and fallback to a string if the parse fails.\n // Simple values such as \"10px\" are parsed to Float;\n // complex values such as \"rotate(1rad)\" are returned as-is.\n\n\n result = jQuery.css(tween.elem, tween.prop, \"\"); // Empty strings, null, undefined and \"auto\" are converted to 0.\n\n return !result || result === \"auto\" ? 0 : result;\n },\n set: function set(tween) {\n // Use step hook for back compat.\n // Use cssHook if its there.\n // Use .style if available and use plain properties where available.\n if (jQuery.fx.step[tween.prop]) {\n jQuery.fx.step[tween.prop](tween);\n } else if (tween.elem.nodeType === 1 && (jQuery.cssHooks[tween.prop] || tween.elem.style[finalPropName(tween.prop)] != null)) {\n jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n } else {\n tween.elem[tween.prop] = tween.now;\n }\n }\n }\n }; // Support: IE <=9 only\n // Panic based approach to setting things on disconnected nodes\n\n Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n set: function set(tween) {\n if (tween.elem.nodeType && tween.elem.parentNode) {\n tween.elem[tween.prop] = tween.now;\n }\n }\n };\n jQuery.easing = {\n linear: function linear(p) {\n return p;\n },\n swing: function swing(p) {\n return 0.5 - Math.cos(p * Math.PI) / 2;\n },\n _default: \"swing\"\n };\n jQuery.fx = Tween.prototype.init; // Back compat <1.8 extension point\n\n jQuery.fx.step = {};\n var fxNow,\n inProgress,\n rfxtypes = /^(?:toggle|show|hide)$/,\n rrun = /queueHooks$/;\n\n function schedule() {\n if (inProgress) {\n if (document.hidden === false && window.requestAnimationFrame) {\n window.requestAnimationFrame(schedule);\n } else {\n window.setTimeout(schedule, jQuery.fx.interval);\n }\n\n jQuery.fx.tick();\n }\n } // Animations created synchronously will run synchronously\n\n\n function createFxNow() {\n window.setTimeout(function () {\n fxNow = undefined;\n });\n return fxNow = Date.now();\n } // Generate parameters to create a standard animation\n\n\n function genFx(type, includeWidth) {\n var which,\n i = 0,\n attrs = {\n height: type\n }; // If we include width, step value is 1 to do all cssExpand values,\n // otherwise step value is 2 to skip over Left and Right\n\n includeWidth = includeWidth ? 1 : 0;\n\n for (; i < 4; i += 2 - includeWidth) {\n which = cssExpand[i];\n attrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n }\n\n if (includeWidth) {\n attrs.opacity = attrs.width = type;\n }\n\n return attrs;\n }\n\n function createTween(value, prop, animation) {\n var tween,\n collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n index = 0,\n length = collection.length;\n\n for (; index < length; index++) {\n if (tween = collection[index].call(animation, prop, value)) {\n // We're done with this property\n return tween;\n }\n }\n }\n\n function defaultPrefilter(elem, props, opts) {\n var prop,\n value,\n toggle,\n hooks,\n oldfire,\n propTween,\n restoreDisplay,\n display,\n isBox = \"width\" in props || \"height\" in props,\n anim = this,\n orig = {},\n style = elem.style,\n hidden = elem.nodeType && isHiddenWithinTree(elem),\n dataShow = dataPriv.get(elem, \"fxshow\"); // Queue-skipping animations hijack the fx hooks\n\n if (!opts.queue) {\n hooks = jQuery._queueHooks(elem, \"fx\");\n\n if (hooks.unqueued == null) {\n hooks.unqueued = 0;\n oldfire = hooks.empty.fire;\n\n hooks.empty.fire = function () {\n if (!hooks.unqueued) {\n oldfire();\n }\n };\n }\n\n hooks.unqueued++;\n anim.always(function () {\n // Ensure the complete handler is called before this completes\n anim.always(function () {\n hooks.unqueued--;\n\n if (!jQuery.queue(elem, \"fx\").length) {\n hooks.empty.fire();\n }\n });\n });\n } // Detect show/hide animations\n\n\n for (prop in props) {\n value = props[prop];\n\n if (rfxtypes.test(value)) {\n delete props[prop];\n toggle = toggle || value === \"toggle\";\n\n if (value === (hidden ? \"hide\" : \"show\")) {\n // Pretend to be hidden if this is a \"show\" and\n // there is still data from a stopped show/hide\n if (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n hidden = true; // Ignore all other no-op show/hide data\n } else {\n continue;\n }\n }\n\n orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n }\n } // Bail out if this is a no-op like .hide().hide()\n\n\n propTween = !jQuery.isEmptyObject(props);\n\n if (!propTween && jQuery.isEmptyObject(orig)) {\n return;\n } // Restrict \"overflow\" and \"display\" styles during box animations\n\n\n if (isBox && elem.nodeType === 1) {\n // Support: IE <=9 - 11, Edge 12 - 15\n // Record all 3 overflow attributes because IE does not infer the shorthand\n // from identically-valued overflowX and overflowY and Edge just mirrors\n // the overflowX value there.\n opts.overflow = [style.overflow, style.overflowX, style.overflowY]; // Identify a display type, preferring old show/hide data over the CSS cascade\n\n restoreDisplay = dataShow && dataShow.display;\n\n if (restoreDisplay == null) {\n restoreDisplay = dataPriv.get(elem, \"display\");\n }\n\n display = jQuery.css(elem, \"display\");\n\n if (display === \"none\") {\n if (restoreDisplay) {\n display = restoreDisplay;\n } else {\n // Get nonempty value(s) by temporarily forcing visibility\n showHide([elem], true);\n restoreDisplay = elem.style.display || restoreDisplay;\n display = jQuery.css(elem, \"display\");\n showHide([elem]);\n }\n } // Animate inline elements as inline-block\n\n\n if (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n if (jQuery.css(elem, \"float\") === \"none\") {\n // Restore the original display value at the end of pure show/hide animations\n if (!propTween) {\n anim.done(function () {\n style.display = restoreDisplay;\n });\n\n if (restoreDisplay == null) {\n display = style.display;\n restoreDisplay = display === \"none\" ? \"\" : display;\n }\n }\n\n style.display = \"inline-block\";\n }\n }\n }\n\n if (opts.overflow) {\n style.overflow = \"hidden\";\n anim.always(function () {\n style.overflow = opts.overflow[0];\n style.overflowX = opts.overflow[1];\n style.overflowY = opts.overflow[2];\n });\n } // Implement show/hide animations\n\n\n propTween = false;\n\n for (prop in orig) {\n // General show/hide setup for this element animation\n if (!propTween) {\n if (dataShow) {\n if (\"hidden\" in dataShow) {\n hidden = dataShow.hidden;\n }\n } else {\n dataShow = dataPriv.access(elem, \"fxshow\", {\n display: restoreDisplay\n });\n } // Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\n\n if (toggle) {\n dataShow.hidden = !hidden;\n } // Show elements before animating them\n\n\n if (hidden) {\n showHide([elem], true);\n }\n /* eslint-disable no-loop-func */\n\n\n anim.done(function () {\n /* eslint-enable no-loop-func */\n // The final step of a \"hide\" animation is actually hiding the element\n if (!hidden) {\n showHide([elem]);\n }\n\n dataPriv.remove(elem, \"fxshow\");\n\n for (prop in orig) {\n jQuery.style(elem, prop, orig[prop]);\n }\n });\n } // Per-property setup\n\n\n propTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\n if (!(prop in dataShow)) {\n dataShow[prop] = propTween.start;\n\n if (hidden) {\n propTween.end = propTween.start;\n propTween.start = 0;\n }\n }\n }\n }\n\n function propFilter(props, specialEasing) {\n var index, name, easing, value, hooks; // camelCase, specialEasing and expand cssHook pass\n\n for (index in props) {\n name = camelCase(index);\n easing = specialEasing[name];\n value = props[index];\n\n if (Array.isArray(value)) {\n easing = value[1];\n value = props[index] = value[0];\n }\n\n if (index !== name) {\n props[name] = value;\n delete props[index];\n }\n\n hooks = jQuery.cssHooks[name];\n\n if (hooks && \"expand\" in hooks) {\n value = hooks.expand(value);\n delete props[name]; // Not quite $.extend, this won't overwrite existing keys.\n // Reusing 'index' because we have the correct \"name\"\n\n for (index in value) {\n if (!(index in props)) {\n props[index] = value[index];\n specialEasing[index] = easing;\n }\n }\n } else {\n specialEasing[name] = easing;\n }\n }\n }\n\n function Animation(elem, properties, options) {\n var result,\n stopped,\n index = 0,\n length = Animation.prefilters.length,\n deferred = jQuery.Deferred().always(function () {\n // Don't match elem in the :animated selector\n delete tick.elem;\n }),\n tick = function tick() {\n if (stopped) {\n return false;\n }\n\n var currentTime = fxNow || createFxNow(),\n remaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n // Support: Android 2.3 only\n // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n temp = remaining / animation.duration || 0,\n percent = 1 - temp,\n index = 0,\n length = animation.tweens.length;\n\n for (; index < length; index++) {\n animation.tweens[index].run(percent);\n }\n\n deferred.notifyWith(elem, [animation, percent, remaining]); // If there's more to do, yield\n\n if (percent < 1 && length) {\n return remaining;\n } // If this was an empty animation, synthesize a final progress notification\n\n\n if (!length) {\n deferred.notifyWith(elem, [animation, 1, 0]);\n } // Resolve the animation and report its conclusion\n\n\n deferred.resolveWith(elem, [animation]);\n return false;\n },\n animation = deferred.promise({\n elem: elem,\n props: jQuery.extend({}, properties),\n opts: jQuery.extend(true, {\n specialEasing: {},\n easing: jQuery.easing._default\n }, options),\n originalProperties: properties,\n originalOptions: options,\n startTime: fxNow || createFxNow(),\n duration: options.duration,\n tweens: [],\n createTween: function createTween(prop, end) {\n var tween = jQuery.Tween(elem, animation.opts, prop, end, animation.opts.specialEasing[prop] || animation.opts.easing);\n animation.tweens.push(tween);\n return tween;\n },\n stop: function stop(gotoEnd) {\n var index = 0,\n // If we are going to the end, we want to run all the tweens\n // otherwise we skip this part\n length = gotoEnd ? animation.tweens.length : 0;\n\n if (stopped) {\n return this;\n }\n\n stopped = true;\n\n for (; index < length; index++) {\n animation.tweens[index].run(1);\n } // Resolve when we played the last frame; otherwise, reject\n\n\n if (gotoEnd) {\n deferred.notifyWith(elem, [animation, 1, 0]);\n deferred.resolveWith(elem, [animation, gotoEnd]);\n } else {\n deferred.rejectWith(elem, [animation, gotoEnd]);\n }\n\n return this;\n }\n }),\n props = animation.props;\n\n propFilter(props, animation.opts.specialEasing);\n\n for (; index < length; index++) {\n result = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\n if (result) {\n if (isFunction(result.stop)) {\n jQuery._queueHooks(animation.elem, animation.opts.queue).stop = result.stop.bind(result);\n }\n\n return result;\n }\n }\n\n jQuery.map(props, createTween, animation);\n\n if (isFunction(animation.opts.start)) {\n animation.opts.start.call(elem, animation);\n } // Attach callbacks from options\n\n\n animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);\n jQuery.fx.timer(jQuery.extend(tick, {\n elem: elem,\n anim: animation,\n queue: animation.opts.queue\n }));\n return animation;\n }\n\n jQuery.Animation = jQuery.extend(Animation, {\n tweeners: {\n \"*\": [function (prop, value) {\n var tween = this.createTween(prop, value);\n adjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n return tween;\n }]\n },\n tweener: function tweener(props, callback) {\n if (isFunction(props)) {\n callback = props;\n props = [\"*\"];\n } else {\n props = props.match(rnothtmlwhite);\n }\n\n var prop,\n index = 0,\n length = props.length;\n\n for (; index < length; index++) {\n prop = props[index];\n Animation.tweeners[prop] = Animation.tweeners[prop] || [];\n Animation.tweeners[prop].unshift(callback);\n }\n },\n prefilters: [defaultPrefilter],\n prefilter: function prefilter(callback, prepend) {\n if (prepend) {\n Animation.prefilters.unshift(callback);\n } else {\n Animation.prefilters.push(callback);\n }\n }\n });\n\n jQuery.speed = function (speed, easing, fn) {\n var opt = speed && _typeof(speed) === \"object\" ? jQuery.extend({}, speed) : {\n complete: fn || !fn && easing || isFunction(speed) && speed,\n duration: speed,\n easing: fn && easing || easing && !isFunction(easing) && easing\n }; // Go to the end state if fx are off\n\n if (jQuery.fx.off) {\n opt.duration = 0;\n } else {\n if (typeof opt.duration !== \"number\") {\n if (opt.duration in jQuery.fx.speeds) {\n opt.duration = jQuery.fx.speeds[opt.duration];\n } else {\n opt.duration = jQuery.fx.speeds._default;\n }\n }\n } // Normalize opt.queue - true/undefined/null -> \"fx\"\n\n\n if (opt.queue == null || opt.queue === true) {\n opt.queue = \"fx\";\n } // Queueing\n\n\n opt.old = opt.complete;\n\n opt.complete = function () {\n if (isFunction(opt.old)) {\n opt.old.call(this);\n }\n\n if (opt.queue) {\n jQuery.dequeue(this, opt.queue);\n }\n };\n\n return opt;\n };\n\n jQuery.fn.extend({\n fadeTo: function fadeTo(speed, to, easing, callback) {\n // Show any hidden elements after setting opacity to 0\n return this.filter(isHiddenWithinTree).css(\"opacity\", 0).show() // Animate to the value specified\n .end().animate({\n opacity: to\n }, speed, easing, callback);\n },\n animate: function animate(prop, speed, easing, callback) {\n var empty = jQuery.isEmptyObject(prop),\n optall = jQuery.speed(speed, easing, callback),\n doAnimation = function doAnimation() {\n // Operate on a copy of prop so per-property easing won't be lost\n var anim = Animation(this, jQuery.extend({}, prop), optall); // Empty animations, or finishing resolves immediately\n\n if (empty || dataPriv.get(this, \"finish\")) {\n anim.stop(true);\n }\n };\n\n doAnimation.finish = doAnimation;\n return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation);\n },\n stop: function stop(type, clearQueue, gotoEnd) {\n var stopQueue = function stopQueue(hooks) {\n var stop = hooks.stop;\n delete hooks.stop;\n stop(gotoEnd);\n };\n\n if (typeof type !== \"string\") {\n gotoEnd = clearQueue;\n clearQueue = type;\n type = undefined;\n }\n\n if (clearQueue && type !== false) {\n this.queue(type || \"fx\", []);\n }\n\n return this.each(function () {\n var dequeue = true,\n index = type != null && type + \"queueHooks\",\n timers = jQuery.timers,\n data = dataPriv.get(this);\n\n if (index) {\n if (data[index] && data[index].stop) {\n stopQueue(data[index]);\n }\n } else {\n for (index in data) {\n if (data[index] && data[index].stop && rrun.test(index)) {\n stopQueue(data[index]);\n }\n }\n }\n\n for (index = timers.length; index--;) {\n if (timers[index].elem === this && (type == null || timers[index].queue === type)) {\n timers[index].anim.stop(gotoEnd);\n dequeue = false;\n timers.splice(index, 1);\n }\n } // Start the next in the queue if the last step wasn't forced.\n // Timers currently will call their complete callbacks, which\n // will dequeue but only if they were gotoEnd.\n\n\n if (dequeue || !gotoEnd) {\n jQuery.dequeue(this, type);\n }\n });\n },\n finish: function finish(type) {\n if (type !== false) {\n type = type || \"fx\";\n }\n\n return this.each(function () {\n var index,\n data = dataPriv.get(this),\n queue = data[type + \"queue\"],\n hooks = data[type + \"queueHooks\"],\n timers = jQuery.timers,\n length = queue ? queue.length : 0; // Enable finishing flag on private data\n\n data.finish = true; // Empty the queue first\n\n jQuery.queue(this, type, []);\n\n if (hooks && hooks.stop) {\n hooks.stop.call(this, true);\n } // Look for any active animations, and finish them\n\n\n for (index = timers.length; index--;) {\n if (timers[index].elem === this && timers[index].queue === type) {\n timers[index].anim.stop(true);\n timers.splice(index, 1);\n }\n } // Look for any animations in the old queue and finish them\n\n\n for (index = 0; index < length; index++) {\n if (queue[index] && queue[index].finish) {\n queue[index].finish.call(this);\n }\n } // Turn off finishing flag\n\n\n delete data.finish;\n });\n }\n });\n jQuery.each([\"toggle\", \"show\", \"hide\"], function (i, name) {\n var cssFn = jQuery.fn[name];\n\n jQuery.fn[name] = function (speed, easing, callback) {\n return speed == null || typeof speed === \"boolean\" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback);\n };\n }); // Generate shortcuts for custom animations\n\n jQuery.each({\n slideDown: genFx(\"show\"),\n slideUp: genFx(\"hide\"),\n slideToggle: genFx(\"toggle\"),\n fadeIn: {\n opacity: \"show\"\n },\n fadeOut: {\n opacity: \"hide\"\n },\n fadeToggle: {\n opacity: \"toggle\"\n }\n }, function (name, props) {\n jQuery.fn[name] = function (speed, easing, callback) {\n return this.animate(props, speed, easing, callback);\n };\n });\n jQuery.timers = [];\n\n jQuery.fx.tick = function () {\n var timer,\n i = 0,\n timers = jQuery.timers;\n fxNow = Date.now();\n\n for (; i < timers.length; i++) {\n timer = timers[i]; // Run the timer and safely remove it when done (allowing for external removal)\n\n if (!timer() && timers[i] === timer) {\n timers.splice(i--, 1);\n }\n }\n\n if (!timers.length) {\n jQuery.fx.stop();\n }\n\n fxNow = undefined;\n };\n\n jQuery.fx.timer = function (timer) {\n jQuery.timers.push(timer);\n jQuery.fx.start();\n };\n\n jQuery.fx.interval = 13;\n\n jQuery.fx.start = function () {\n if (inProgress) {\n return;\n }\n\n inProgress = true;\n schedule();\n };\n\n jQuery.fx.stop = function () {\n inProgress = null;\n };\n\n jQuery.fx.speeds = {\n slow: 600,\n fast: 200,\n // Default speed\n _default: 400\n }; // Based off of the plugin by Clint Helfers, with permission.\n // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\n\n jQuery.fn.delay = function (time, type) {\n time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n type = type || \"fx\";\n return this.queue(type, function (next, hooks) {\n var timeout = window.setTimeout(next, time);\n\n hooks.stop = function () {\n window.clearTimeout(timeout);\n };\n });\n };\n\n (function () {\n var input = document.createElement(\"input\"),\n select = document.createElement(\"select\"),\n opt = select.appendChild(document.createElement(\"option\"));\n input.type = \"checkbox\"; // Support: Android <=4.3 only\n // Default value for a checkbox should be \"on\"\n\n support.checkOn = input.value !== \"\"; // Support: IE <=11 only\n // Must access selectedIndex to make default options select\n\n support.optSelected = opt.selected; // Support: IE <=11 only\n // An input loses its value after becoming a radio\n\n input = document.createElement(\"input\");\n input.value = \"t\";\n input.type = \"radio\";\n support.radioValue = input.value === \"t\";\n })();\n\n var boolHook,\n attrHandle = jQuery.expr.attrHandle;\n jQuery.fn.extend({\n attr: function attr(name, value) {\n return access(this, jQuery.attr, name, value, arguments.length > 1);\n },\n removeAttr: function removeAttr(name) {\n return this.each(function () {\n jQuery.removeAttr(this, name);\n });\n }\n });\n jQuery.extend({\n attr: function attr(elem, name, value) {\n var ret,\n hooks,\n nType = elem.nodeType; // Don't get/set attributes on text, comment and attribute nodes\n\n if (nType === 3 || nType === 8 || nType === 2) {\n return;\n } // Fallback to prop when attributes are not supported\n\n\n if (typeof elem.getAttribute === \"undefined\") {\n return jQuery.prop(elem, name, value);\n } // Attribute hooks are determined by the lowercase version\n // Grab necessary hook if one is defined\n\n\n if (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n hooks = jQuery.attrHooks[name.toLowerCase()] || (jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n }\n\n if (value !== undefined) {\n if (value === null) {\n jQuery.removeAttr(elem, name);\n return;\n }\n\n if (hooks && \"set\" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {\n return ret;\n }\n\n elem.setAttribute(name, value + \"\");\n return value;\n }\n\n if (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n return ret;\n }\n\n ret = jQuery.find.attr(elem, name); // Non-existent attributes return null, we normalize to undefined\n\n return ret == null ? undefined : ret;\n },\n attrHooks: {\n type: {\n set: function set(elem, value) {\n if (!support.radioValue && value === \"radio\" && nodeName(elem, \"input\")) {\n var val = elem.value;\n elem.setAttribute(\"type\", value);\n\n if (val) {\n elem.value = val;\n }\n\n return value;\n }\n }\n }\n },\n removeAttr: function removeAttr(elem, value) {\n var name,\n i = 0,\n // Attribute names can contain non-HTML whitespace characters\n // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n attrNames = value && value.match(rnothtmlwhite);\n\n if (attrNames && elem.nodeType === 1) {\n while (name = attrNames[i++]) {\n elem.removeAttribute(name);\n }\n }\n }\n }); // Hooks for boolean attributes\n\n boolHook = {\n set: function set(elem, value, name) {\n if (value === false) {\n // Remove boolean attributes when set to false\n jQuery.removeAttr(elem, name);\n } else {\n elem.setAttribute(name, name);\n }\n\n return name;\n }\n };\n jQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (i, name) {\n var getter = attrHandle[name] || jQuery.find.attr;\n\n attrHandle[name] = function (elem, name, isXML) {\n var ret,\n handle,\n lowercaseName = name.toLowerCase();\n\n if (!isXML) {\n // Avoid an infinite loop by temporarily removing this function from the getter\n handle = attrHandle[lowercaseName];\n attrHandle[lowercaseName] = ret;\n ret = getter(elem, name, isXML) != null ? lowercaseName : null;\n attrHandle[lowercaseName] = handle;\n }\n\n return ret;\n };\n });\n var rfocusable = /^(?:input|select|textarea|button)$/i,\n rclickable = /^(?:a|area)$/i;\n jQuery.fn.extend({\n prop: function prop(name, value) {\n return access(this, jQuery.prop, name, value, arguments.length > 1);\n },\n removeProp: function removeProp(name) {\n return this.each(function () {\n delete this[jQuery.propFix[name] || name];\n });\n }\n });\n jQuery.extend({\n prop: function prop(elem, name, value) {\n var ret,\n hooks,\n nType = elem.nodeType; // Don't get/set properties on text, comment and attribute nodes\n\n if (nType === 3 || nType === 8 || nType === 2) {\n return;\n }\n\n if (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n // Fix name and attach hooks\n name = jQuery.propFix[name] || name;\n hooks = jQuery.propHooks[name];\n }\n\n if (value !== undefined) {\n if (hooks && \"set\" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {\n return ret;\n }\n\n return elem[name] = value;\n }\n\n if (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n return ret;\n }\n\n return elem[name];\n },\n propHooks: {\n tabIndex: {\n get: function get(elem) {\n // Support: IE <=9 - 11 only\n // elem.tabIndex doesn't always return the\n // correct value when it hasn't been explicitly set\n // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n // Use proper attribute retrieval(#12072)\n var tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n if (tabindex) {\n return parseInt(tabindex, 10);\n }\n\n if (rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href) {\n return 0;\n }\n\n return -1;\n }\n }\n },\n propFix: {\n \"for\": \"htmlFor\",\n \"class\": \"className\"\n }\n }); // Support: IE <=11 only\n // Accessing the selectedIndex property\n // forces the browser to respect setting selected\n // on the option\n // The getter ensures a default option is selected\n // when in an optgroup\n // eslint rule \"no-unused-expressions\" is disabled for this code\n // since it considers such accessions noop\n\n if (!support.optSelected) {\n jQuery.propHooks.selected = {\n get: function get(elem) {\n /* eslint no-unused-expressions: \"off\" */\n var parent = elem.parentNode;\n\n if (parent && parent.parentNode) {\n parent.parentNode.selectedIndex;\n }\n\n return null;\n },\n set: function set(elem) {\n /* eslint no-unused-expressions: \"off\" */\n var parent = elem.parentNode;\n\n if (parent) {\n parent.selectedIndex;\n\n if (parent.parentNode) {\n parent.parentNode.selectedIndex;\n }\n }\n }\n };\n }\n\n jQuery.each([\"tabIndex\", \"readOnly\", \"maxLength\", \"cellSpacing\", \"cellPadding\", \"rowSpan\", \"colSpan\", \"useMap\", \"frameBorder\", \"contentEditable\"], function () {\n jQuery.propFix[this.toLowerCase()] = this;\n }); // Strip and collapse whitespace according to HTML spec\n // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\n function stripAndCollapse(value) {\n var tokens = value.match(rnothtmlwhite) || [];\n return tokens.join(\" \");\n }\n\n function getClass(elem) {\n return elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n }\n\n function classesToArray(value) {\n if (Array.isArray(value)) {\n return value;\n }\n\n if (typeof value === \"string\") {\n return value.match(rnothtmlwhite) || [];\n }\n\n return [];\n }\n\n jQuery.fn.extend({\n addClass: function addClass(value) {\n var classes,\n elem,\n cur,\n curValue,\n clazz,\n j,\n finalValue,\n i = 0;\n\n if (isFunction(value)) {\n return this.each(function (j) {\n jQuery(this).addClass(value.call(this, j, getClass(this)));\n });\n }\n\n classes = classesToArray(value);\n\n if (classes.length) {\n while (elem = this[i++]) {\n curValue = getClass(elem);\n cur = elem.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";\n\n if (cur) {\n j = 0;\n\n while (clazz = classes[j++]) {\n if (cur.indexOf(\" \" + clazz + \" \") < 0) {\n cur += clazz + \" \";\n }\n } // Only assign if different to avoid unneeded rendering.\n\n\n finalValue = stripAndCollapse(cur);\n\n if (curValue !== finalValue) {\n elem.setAttribute(\"class\", finalValue);\n }\n }\n }\n }\n\n return this;\n },\n removeClass: function removeClass(value) {\n var classes,\n elem,\n cur,\n curValue,\n clazz,\n j,\n finalValue,\n i = 0;\n\n if (isFunction(value)) {\n return this.each(function (j) {\n jQuery(this).removeClass(value.call(this, j, getClass(this)));\n });\n }\n\n if (!arguments.length) {\n return this.attr(\"class\", \"\");\n }\n\n classes = classesToArray(value);\n\n if (classes.length) {\n while (elem = this[i++]) {\n curValue = getClass(elem); // This expression is here for better compressibility (see addClass)\n\n cur = elem.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";\n\n if (cur) {\n j = 0;\n\n while (clazz = classes[j++]) {\n // Remove *all* instances\n while (cur.indexOf(\" \" + clazz + \" \") > -1) {\n cur = cur.replace(\" \" + clazz + \" \", \" \");\n }\n } // Only assign if different to avoid unneeded rendering.\n\n\n finalValue = stripAndCollapse(cur);\n\n if (curValue !== finalValue) {\n elem.setAttribute(\"class\", finalValue);\n }\n }\n }\n }\n\n return this;\n },\n toggleClass: function toggleClass(value, stateVal) {\n var type = _typeof(value),\n isValidValue = type === \"string\" || Array.isArray(value);\n\n if (typeof stateVal === \"boolean\" && isValidValue) {\n return stateVal ? this.addClass(value) : this.removeClass(value);\n }\n\n if (isFunction(value)) {\n return this.each(function (i) {\n jQuery(this).toggleClass(value.call(this, i, getClass(this), stateVal), stateVal);\n });\n }\n\n return this.each(function () {\n var className, i, self, classNames;\n\n if (isValidValue) {\n // Toggle individual class names\n i = 0;\n self = jQuery(this);\n classNames = classesToArray(value);\n\n while (className = classNames[i++]) {\n // Check each className given, space separated list\n if (self.hasClass(className)) {\n self.removeClass(className);\n } else {\n self.addClass(className);\n }\n } // Toggle whole class name\n\n } else if (value === undefined || type === \"boolean\") {\n className = getClass(this);\n\n if (className) {\n // Store className if set\n dataPriv.set(this, \"__className__\", className);\n } // If the element has a class name or if we're passed `false`,\n // then remove the whole classname (if there was one, the above saved it).\n // Otherwise bring back whatever was previously saved (if anything),\n // falling back to the empty string if nothing was stored.\n\n\n if (this.setAttribute) {\n this.setAttribute(\"class\", className || value === false ? \"\" : dataPriv.get(this, \"__className__\") || \"\");\n }\n }\n });\n },\n hasClass: function hasClass(selector) {\n var className,\n elem,\n i = 0;\n className = \" \" + selector + \" \";\n\n while (elem = this[i++]) {\n if (elem.nodeType === 1 && (\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n return true;\n }\n }\n\n return false;\n }\n });\n var rreturn = /\\r/g;\n jQuery.fn.extend({\n val: function val(value) {\n var hooks,\n ret,\n valueIsFunction,\n elem = this[0];\n\n if (!arguments.length) {\n if (elem) {\n hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];\n\n if (hooks && \"get\" in hooks && (ret = hooks.get(elem, \"value\")) !== undefined) {\n return ret;\n }\n\n ret = elem.value; // Handle most common string cases\n\n if (typeof ret === \"string\") {\n return ret.replace(rreturn, \"\");\n } // Handle cases where value is null/undef or number\n\n\n return ret == null ? \"\" : ret;\n }\n\n return;\n }\n\n valueIsFunction = isFunction(value);\n return this.each(function (i) {\n var val;\n\n if (this.nodeType !== 1) {\n return;\n }\n\n if (valueIsFunction) {\n val = value.call(this, i, jQuery(this).val());\n } else {\n val = value;\n } // Treat null/undefined as \"\"; convert numbers to string\n\n\n if (val == null) {\n val = \"\";\n } else if (typeof val === \"number\") {\n val += \"\";\n } else if (Array.isArray(val)) {\n val = jQuery.map(val, function (value) {\n return value == null ? \"\" : value + \"\";\n });\n }\n\n hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()]; // If set returns undefined, fall back to normal setting\n\n if (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n this.value = val;\n }\n });\n }\n });\n jQuery.extend({\n valHooks: {\n option: {\n get: function get(elem) {\n var val = jQuery.find.attr(elem, \"value\");\n return val != null ? val : // Support: IE <=10 - 11 only\n // option.text throws exceptions (#14686, #14858)\n // Strip and collapse whitespace\n // https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n stripAndCollapse(jQuery.text(elem));\n }\n },\n select: {\n get: function get(elem) {\n var value,\n option,\n i,\n options = elem.options,\n index = elem.selectedIndex,\n one = elem.type === \"select-one\",\n values = one ? null : [],\n max = one ? index + 1 : options.length;\n\n if (index < 0) {\n i = max;\n } else {\n i = one ? index : 0;\n } // Loop through all the selected options\n\n\n for (; i < max; i++) {\n option = options[i]; // Support: IE <=9 only\n // IE8-9 doesn't update selected after form reset (#2551)\n\n if ((option.selected || i === index) && // Don't return options that are disabled or in a disabled optgroup\n !option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, \"optgroup\"))) {\n // Get the specific value for the option\n value = jQuery(option).val(); // We don't need an array for one selects\n\n if (one) {\n return value;\n } // Multi-Selects return an array\n\n\n values.push(value);\n }\n }\n\n return values;\n },\n set: function set(elem, value) {\n var optionSet,\n option,\n options = elem.options,\n values = jQuery.makeArray(value),\n i = options.length;\n\n while (i--) {\n option = options[i];\n /* eslint-disable no-cond-assign */\n\n if (option.selected = jQuery.inArray(jQuery.valHooks.option.get(option), values) > -1) {\n optionSet = true;\n }\n /* eslint-enable no-cond-assign */\n\n } // Force browsers to behave consistently when non-matching value is set\n\n\n if (!optionSet) {\n elem.selectedIndex = -1;\n }\n\n return values;\n }\n }\n }\n }); // Radios and checkboxes getter/setter\n\n jQuery.each([\"radio\", \"checkbox\"], function () {\n jQuery.valHooks[this] = {\n set: function set(elem, value) {\n if (Array.isArray(value)) {\n return elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1;\n }\n }\n };\n\n if (!support.checkOn) {\n jQuery.valHooks[this].get = function (elem) {\n return elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n };\n }\n }); // Return jQuery for attributes-only inclusion\n\n support.focusin = \"onfocusin\" in window;\n\n var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n stopPropagationCallback = function stopPropagationCallback(e) {\n e.stopPropagation();\n };\n\n jQuery.extend(jQuery.event, {\n trigger: function trigger(event, data, elem, onlyHandlers) {\n var i,\n cur,\n tmp,\n bubbleType,\n ontype,\n handle,\n special,\n lastElement,\n eventPath = [elem || document],\n type = hasOwn.call(event, \"type\") ? event.type : event,\n namespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n cur = lastElement = tmp = elem = elem || document; // Don't do events on text and comment nodes\n\n if (elem.nodeType === 3 || elem.nodeType === 8) {\n return;\n } // focus/blur morphs to focusin/out; ensure we're not firing them right now\n\n\n if (rfocusMorph.test(type + jQuery.event.triggered)) {\n return;\n }\n\n if (type.indexOf(\".\") > -1) {\n // Namespaced trigger; create a regexp to match event type in handle()\n namespaces = type.split(\".\");\n type = namespaces.shift();\n namespaces.sort();\n }\n\n ontype = type.indexOf(\":\") < 0 && \"on\" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string\n\n event = event[jQuery.expando] ? event : new jQuery.Event(type, _typeof(event) === \"object\" && event); // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\n event.isTrigger = onlyHandlers ? 2 : 3;\n event.namespace = namespaces.join(\".\");\n event.rnamespace = event.namespace ? new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") : null; // Clean up the event in case it is being reused\n\n event.result = undefined;\n\n if (!event.target) {\n event.target = elem;\n } // Clone any incoming data and prepend the event, creating the handler arg list\n\n\n data = data == null ? [event] : jQuery.makeArray(data, [event]); // Allow special events to draw outside the lines\n\n special = jQuery.event.special[type] || {};\n\n if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n return;\n } // Determine event propagation path in advance, per W3C events spec (#9951)\n // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\n\n if (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n bubbleType = special.delegateType || type;\n\n if (!rfocusMorph.test(bubbleType + type)) {\n cur = cur.parentNode;\n }\n\n for (; cur; cur = cur.parentNode) {\n eventPath.push(cur);\n tmp = cur;\n } // Only add window if we got to document (e.g., not plain obj or detached DOM)\n\n\n if (tmp === (elem.ownerDocument || document)) {\n eventPath.push(tmp.defaultView || tmp.parentWindow || window);\n }\n } // Fire handlers on the event path\n\n\n i = 0;\n\n while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n lastElement = cur;\n event.type = i > 1 ? bubbleType : special.bindType || type; // jQuery handler\n\n handle = (dataPriv.get(cur, \"events\") || {})[event.type] && dataPriv.get(cur, \"handle\");\n\n if (handle) {\n handle.apply(cur, data);\n } // Native handler\n\n\n handle = ontype && cur[ontype];\n\n if (handle && handle.apply && acceptData(cur)) {\n event.result = handle.apply(cur, data);\n\n if (event.result === false) {\n event.preventDefault();\n }\n }\n }\n\n event.type = type; // If nobody prevented the default action, do it now\n\n if (!onlyHandlers && !event.isDefaultPrevented()) {\n if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) {\n // Call a native DOM method on the target with the same name as the event.\n // Don't do default actions on window, that's where global variables be (#6170)\n if (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n // Don't re-trigger an onFOO event when we call its FOO() method\n tmp = elem[ontype];\n\n if (tmp) {\n elem[ontype] = null;\n } // Prevent re-triggering of the same event, since we already bubbled it above\n\n\n jQuery.event.triggered = type;\n\n if (event.isPropagationStopped()) {\n lastElement.addEventListener(type, stopPropagationCallback);\n }\n\n elem[type]();\n\n if (event.isPropagationStopped()) {\n lastElement.removeEventListener(type, stopPropagationCallback);\n }\n\n jQuery.event.triggered = undefined;\n\n if (tmp) {\n elem[ontype] = tmp;\n }\n }\n }\n }\n\n return event.result;\n },\n // Piggyback on a donor event to simulate a different one\n // Used only for `focus(in | out)` events\n simulate: function simulate(type, elem, event) {\n var e = jQuery.extend(new jQuery.Event(), event, {\n type: type,\n isSimulated: true\n });\n jQuery.event.trigger(e, null, elem);\n }\n });\n jQuery.fn.extend({\n trigger: function trigger(type, data) {\n return this.each(function () {\n jQuery.event.trigger(type, data, this);\n });\n },\n triggerHandler: function triggerHandler(type, data) {\n var elem = this[0];\n\n if (elem) {\n return jQuery.event.trigger(type, data, elem, true);\n }\n }\n }); // Support: Firefox <=44\n // Firefox doesn't have focus(in | out) events\n // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n //\n // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n // focus(in | out) events fire after focus & blur events,\n // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\n if (!support.focusin) {\n jQuery.each({\n focus: \"focusin\",\n blur: \"focusout\"\n }, function (orig, fix) {\n // Attach a single capturing handler on the document while someone wants focusin/focusout\n var handler = function handler(event) {\n jQuery.event.simulate(fix, event.target, jQuery.event.fix(event));\n };\n\n jQuery.event.special[fix] = {\n setup: function setup() {\n var doc = this.ownerDocument || this,\n attaches = dataPriv.access(doc, fix);\n\n if (!attaches) {\n doc.addEventListener(orig, handler, true);\n }\n\n dataPriv.access(doc, fix, (attaches || 0) + 1);\n },\n teardown: function teardown() {\n var doc = this.ownerDocument || this,\n attaches = dataPriv.access(doc, fix) - 1;\n\n if (!attaches) {\n doc.removeEventListener(orig, handler, true);\n dataPriv.remove(doc, fix);\n } else {\n dataPriv.access(doc, fix, attaches);\n }\n }\n };\n });\n }\n\n var location = window.location;\n var nonce = Date.now();\n var rquery = /\\?/; // Cross-browser xml parsing\n\n jQuery.parseXML = function (data) {\n var xml;\n\n if (!data || typeof data !== \"string\") {\n return null;\n } // Support: IE 9 - 11 only\n // IE throws on parseFromString with invalid input.\n\n\n try {\n xml = new window.DOMParser().parseFromString(data, \"text/xml\");\n } catch (e) {\n xml = undefined;\n }\n\n if (!xml || xml.getElementsByTagName(\"parsererror\").length) {\n jQuery.error(\"Invalid XML: \" + data);\n }\n\n return xml;\n };\n\n var rbracket = /\\[\\]$/,\n rCRLF = /\\r?\\n/g,\n rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n rsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n function buildParams(prefix, obj, traditional, add) {\n var name;\n\n if (Array.isArray(obj)) {\n // Serialize array item.\n jQuery.each(obj, function (i, v) {\n if (traditional || rbracket.test(prefix)) {\n // Treat each array item as a scalar.\n add(prefix, v);\n } else {\n // Item is non-scalar (array or object), encode its numeric index.\n buildParams(prefix + \"[\" + (_typeof(v) === \"object\" && v != null ? i : \"\") + \"]\", v, traditional, add);\n }\n });\n } else if (!traditional && toType(obj) === \"object\") {\n // Serialize object item.\n for (name in obj) {\n buildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n }\n } else {\n // Serialize scalar item.\n add(prefix, obj);\n }\n } // Serialize an array of form elements or a set of\n // key/values into a query string\n\n\n jQuery.param = function (a, traditional) {\n var prefix,\n s = [],\n add = function add(key, valueOrFunction) {\n // If value is a function, invoke it and use its return value\n var value = isFunction(valueOrFunction) ? valueOrFunction() : valueOrFunction;\n s[s.length] = encodeURIComponent(key) + \"=\" + encodeURIComponent(value == null ? \"\" : value);\n };\n\n if (a == null) {\n return \"\";\n } // If an array was passed in, assume that it is an array of form elements.\n\n\n if (Array.isArray(a) || a.jquery && !jQuery.isPlainObject(a)) {\n // Serialize the form elements\n jQuery.each(a, function () {\n add(this.name, this.value);\n });\n } else {\n // If traditional, encode the \"old\" way (the way 1.3.2 or older\n // did it), otherwise encode params recursively.\n for (prefix in a) {\n buildParams(prefix, a[prefix], traditional, add);\n }\n } // Return the resulting serialization\n\n\n return s.join(\"&\");\n };\n\n jQuery.fn.extend({\n serialize: function serialize() {\n return jQuery.param(this.serializeArray());\n },\n serializeArray: function serializeArray() {\n return this.map(function () {\n // Can add propHook for \"elements\" to filter or add form elements\n var elements = jQuery.prop(this, \"elements\");\n return elements ? jQuery.makeArray(elements) : this;\n }).filter(function () {\n var type = this.type; // Use .is( \":disabled\" ) so that fieldset[disabled] works\n\n return this.name && !jQuery(this).is(\":disabled\") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type));\n }).map(function (i, elem) {\n var val = jQuery(this).val();\n\n if (val == null) {\n return null;\n }\n\n if (Array.isArray(val)) {\n return jQuery.map(val, function (val) {\n return {\n name: elem.name,\n value: val.replace(rCRLF, \"\\r\\n\")\n };\n });\n }\n\n return {\n name: elem.name,\n value: val.replace(rCRLF, \"\\r\\n\")\n };\n }).get();\n }\n });\n var r20 = /%20/g,\n rhash = /#.*$/,\n rantiCache = /([?&])_=[^&]*/,\n rheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n // #7653, #8125, #8152: local protocol detection\n rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n rnoContent = /^(?:GET|HEAD)$/,\n rprotocol = /^\\/\\//,\n\n /* Prefilters\n * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n * 2) These are called:\n * - BEFORE asking for a transport\n * - AFTER param serialization (s.data is a string if s.processData is true)\n * 3) key is the dataType\n * 4) the catchall symbol \"*\" can be used\n * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n */\n prefilters = {},\n\n /* Transports bindings\n * 1) key is the dataType\n * 2) the catchall symbol \"*\" can be used\n * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n */\n transports = {},\n // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n allTypes = \"*/\".concat(\"*\"),\n // Anchor tag for parsing the document origin\n originAnchor = document.createElement(\"a\");\n originAnchor.href = location.href; // Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\n function addToPrefiltersOrTransports(structure) {\n // dataTypeExpression is optional and defaults to \"*\"\n return function (dataTypeExpression, func) {\n if (typeof dataTypeExpression !== \"string\") {\n func = dataTypeExpression;\n dataTypeExpression = \"*\";\n }\n\n var dataType,\n i = 0,\n dataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n if (isFunction(func)) {\n // For each dataType in the dataTypeExpression\n while (dataType = dataTypes[i++]) {\n // Prepend if requested\n if (dataType[0] === \"+\") {\n dataType = dataType.slice(1) || \"*\";\n (structure[dataType] = structure[dataType] || []).unshift(func); // Otherwise append\n } else {\n (structure[dataType] = structure[dataType] || []).push(func);\n }\n }\n }\n };\n } // Base inspection function for prefilters and transports\n\n\n function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n var inspected = {},\n seekingTransport = structure === transports;\n\n function inspect(dataType) {\n var selected;\n inspected[dataType] = true;\n jQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\n if (typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[dataTypeOrTransport]) {\n options.dataTypes.unshift(dataTypeOrTransport);\n inspect(dataTypeOrTransport);\n return false;\n } else if (seekingTransport) {\n return !(selected = dataTypeOrTransport);\n }\n });\n return selected;\n }\n\n return inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n } // A special extend for ajax options\n // that takes \"flat\" options (not to be deep extended)\n // Fixes #9887\n\n\n function ajaxExtend(target, src) {\n var key,\n deep,\n flatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n for (key in src) {\n if (src[key] !== undefined) {\n (flatOptions[key] ? target : deep || (deep = {}))[key] = src[key];\n }\n }\n\n if (deep) {\n jQuery.extend(true, target, deep);\n }\n\n return target;\n }\n /* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\n\n\n function ajaxHandleResponses(s, jqXHR, responses) {\n var ct,\n type,\n finalDataType,\n firstDataType,\n contents = s.contents,\n dataTypes = s.dataTypes; // Remove auto dataType and get content-type in the process\n\n while (dataTypes[0] === \"*\") {\n dataTypes.shift();\n\n if (ct === undefined) {\n ct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n }\n } // Check if we're dealing with a known content-type\n\n\n if (ct) {\n for (type in contents) {\n if (contents[type] && contents[type].test(ct)) {\n dataTypes.unshift(type);\n break;\n }\n }\n } // Check to see if we have a response for the expected dataType\n\n\n if (dataTypes[0] in responses) {\n finalDataType = dataTypes[0];\n } else {\n // Try convertible dataTypes\n for (type in responses) {\n if (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n finalDataType = type;\n break;\n }\n\n if (!firstDataType) {\n firstDataType = type;\n }\n } // Or just use first one\n\n\n finalDataType = finalDataType || firstDataType;\n } // If we found a dataType\n // We add the dataType to the list if needed\n // and return the corresponding response\n\n\n if (finalDataType) {\n if (finalDataType !== dataTypes[0]) {\n dataTypes.unshift(finalDataType);\n }\n\n return responses[finalDataType];\n }\n }\n /* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\n\n\n function ajaxConvert(s, response, jqXHR, isSuccess) {\n var conv2,\n current,\n conv,\n tmp,\n prev,\n converters = {},\n // Work with a copy of dataTypes in case we need to modify it for conversion\n dataTypes = s.dataTypes.slice(); // Create converters map with lowercased keys\n\n if (dataTypes[1]) {\n for (conv in s.converters) {\n converters[conv.toLowerCase()] = s.converters[conv];\n }\n }\n\n current = dataTypes.shift(); // Convert to each sequential dataType\n\n while (current) {\n if (s.responseFields[current]) {\n jqXHR[s.responseFields[current]] = response;\n } // Apply the dataFilter if provided\n\n\n if (!prev && isSuccess && s.dataFilter) {\n response = s.dataFilter(response, s.dataType);\n }\n\n prev = current;\n current = dataTypes.shift();\n\n if (current) {\n // There's only work to do if current dataType is non-auto\n if (current === \"*\") {\n current = prev; // Convert response if prev dataType is non-auto and differs from current\n } else if (prev !== \"*\" && prev !== current) {\n // Seek a direct converter\n conv = converters[prev + \" \" + current] || converters[\"* \" + current]; // If none found, seek a pair\n\n if (!conv) {\n for (conv2 in converters) {\n // If conv2 outputs current\n tmp = conv2.split(\" \");\n\n if (tmp[1] === current) {\n // If prev can be converted to accepted input\n conv = converters[prev + \" \" + tmp[0]] || converters[\"* \" + tmp[0]];\n\n if (conv) {\n // Condense equivalence converters\n if (conv === true) {\n conv = converters[conv2]; // Otherwise, insert the intermediate dataType\n } else if (converters[conv2] !== true) {\n current = tmp[0];\n dataTypes.unshift(tmp[1]);\n }\n\n break;\n }\n }\n }\n } // Apply converter (if not an equivalence)\n\n\n if (conv !== true) {\n // Unless errors are allowed to bubble, catch and return them\n if (conv && s[\"throws\"]) {\n response = conv(response);\n } else {\n try {\n response = conv(response);\n } catch (e) {\n return {\n state: \"parsererror\",\n error: conv ? e : \"No conversion from \" + prev + \" to \" + current\n };\n }\n }\n }\n }\n }\n }\n\n return {\n state: \"success\",\n data: response\n };\n }\n\n jQuery.extend({\n // Counter for holding the number of active queries\n active: 0,\n // Last-Modified header cache for next request\n lastModified: {},\n etag: {},\n ajaxSettings: {\n url: location.href,\n type: \"GET\",\n isLocal: rlocalProtocol.test(location.protocol),\n global: true,\n processData: true,\n async: true,\n contentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n /*\n timeout: 0,\n data: null,\n dataType: null,\n username: null,\n password: null,\n cache: null,\n throws: false,\n traditional: false,\n headers: {},\n */\n accepts: {\n \"*\": allTypes,\n text: \"text/plain\",\n html: \"text/html\",\n xml: \"application/xml, text/xml\",\n json: \"application/json, text/javascript\"\n },\n contents: {\n xml: /\\bxml\\b/,\n html: /\\bhtml/,\n json: /\\bjson\\b/\n },\n responseFields: {\n xml: \"responseXML\",\n text: \"responseText\",\n json: \"responseJSON\"\n },\n // Data converters\n // Keys separate source (or catchall \"*\") and destination types with a single space\n converters: {\n // Convert anything to text\n \"* text\": String,\n // Text to html (true = no transformation)\n \"text html\": true,\n // Evaluate text as a json expression\n \"text json\": JSON.parse,\n // Parse text as xml\n \"text xml\": jQuery.parseXML\n },\n // For options that shouldn't be deep extended:\n // you can add your own custom options here if\n // and when you create one that shouldn't be\n // deep extended (see ajaxExtend)\n flatOptions: {\n url: true,\n context: true\n }\n },\n // Creates a full fledged settings object into target\n // with both ajaxSettings and settings fields.\n // If target is omitted, writes into ajaxSettings.\n ajaxSetup: function ajaxSetup(target, settings) {\n return settings ? // Building a settings object\n ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) : // Extending ajaxSettings\n ajaxExtend(jQuery.ajaxSettings, target);\n },\n ajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n ajaxTransport: addToPrefiltersOrTransports(transports),\n // Main method\n ajax: function ajax(url, options) {\n // If url is an object, simulate pre-1.5 signature\n if (_typeof(url) === \"object\") {\n options = url;\n url = undefined;\n } // Force options to be an object\n\n\n options = options || {};\n\n var transport,\n // URL without anti-cache param\n cacheURL,\n // Response headers\n responseHeadersString,\n responseHeaders,\n // timeout handle\n timeoutTimer,\n // Url cleanup var\n urlAnchor,\n // Request state (becomes false upon send and true upon completion)\n completed,\n // To know if global events are to be dispatched\n fireGlobals,\n // Loop variable\n i,\n // uncached part of the url\n uncached,\n // Create the final options object\n s = jQuery.ajaxSetup({}, options),\n // Callbacks context\n callbackContext = s.context || s,\n // Context for global events is callbackContext if it is a DOM node or jQuery collection\n globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? jQuery(callbackContext) : jQuery.event,\n // Deferreds\n deferred = jQuery.Deferred(),\n completeDeferred = jQuery.Callbacks(\"once memory\"),\n // Status-dependent callbacks\n _statusCode = s.statusCode || {},\n // Headers (they are sent all at once)\n requestHeaders = {},\n requestHeadersNames = {},\n // Default abort message\n strAbort = \"canceled\",\n // Fake xhr\n jqXHR = {\n readyState: 0,\n // Builds headers hashtable if needed\n getResponseHeader: function getResponseHeader(key) {\n var match;\n\n if (completed) {\n if (!responseHeaders) {\n responseHeaders = {};\n\n while (match = rheaders.exec(responseHeadersString)) {\n responseHeaders[match[1].toLowerCase() + \" \"] = (responseHeaders[match[1].toLowerCase() + \" \"] || []).concat(match[2]);\n }\n }\n\n match = responseHeaders[key.toLowerCase() + \" \"];\n }\n\n return match == null ? null : match.join(\", \");\n },\n // Raw string\n getAllResponseHeaders: function getAllResponseHeaders() {\n return completed ? responseHeadersString : null;\n },\n // Caches the header\n setRequestHeader: function setRequestHeader(name, value) {\n if (completed == null) {\n name = requestHeadersNames[name.toLowerCase()] = requestHeadersNames[name.toLowerCase()] || name;\n requestHeaders[name] = value;\n }\n\n return this;\n },\n // Overrides response content-type header\n overrideMimeType: function overrideMimeType(type) {\n if (completed == null) {\n s.mimeType = type;\n }\n\n return this;\n },\n // Status-dependent callbacks\n statusCode: function statusCode(map) {\n var code;\n\n if (map) {\n if (completed) {\n // Execute the appropriate callbacks\n jqXHR.always(map[jqXHR.status]);\n } else {\n // Lazy-add the new callbacks in a way that preserves old ones\n for (code in map) {\n _statusCode[code] = [_statusCode[code], map[code]];\n }\n }\n }\n\n return this;\n },\n // Cancel the request\n abort: function abort(statusText) {\n var finalText = statusText || strAbort;\n\n if (transport) {\n transport.abort(finalText);\n }\n\n done(0, finalText);\n return this;\n }\n }; // Attach deferreds\n\n\n deferred.promise(jqXHR); // Add protocol if not provided (prefilters might expect it)\n // Handle falsy url in the settings object (#10093: consistency with old signature)\n // We also use the url parameter if available\n\n s.url = ((url || s.url || location.href) + \"\").replace(rprotocol, location.protocol + \"//\"); // Alias method option to type as per ticket #12004\n\n s.type = options.method || options.type || s.method || s.type; // Extract dataTypes list\n\n s.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"]; // A cross-domain request is in order when the origin doesn't match the current origin.\n\n if (s.crossDomain == null) {\n urlAnchor = document.createElement(\"a\"); // Support: IE <=8 - 11, Edge 12 - 15\n // IE throws exception on accessing the href property if url is malformed,\n // e.g. http://example.com:80x/\n\n try {\n urlAnchor.href = s.url; // Support: IE <=8 - 11 only\n // Anchor's host property isn't correctly set when s.url is relative\n\n urlAnchor.href = urlAnchor.href;\n s.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !== urlAnchor.protocol + \"//\" + urlAnchor.host;\n } catch (e) {\n // If there is an error parsing the URL, assume it is crossDomain,\n // it can be rejected by the transport if it is invalid\n s.crossDomain = true;\n }\n } // Convert data if not already a string\n\n\n if (s.data && s.processData && typeof s.data !== \"string\") {\n s.data = jQuery.param(s.data, s.traditional);\n } // Apply prefilters\n\n\n inspectPrefiltersOrTransports(prefilters, s, options, jqXHR); // If request was aborted inside a prefilter, stop there\n\n if (completed) {\n return jqXHR;\n } // We can fire global events as of now if asked to\n // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\n\n fireGlobals = jQuery.event && s.global; // Watch for a new set of requests\n\n if (fireGlobals && jQuery.active++ === 0) {\n jQuery.event.trigger(\"ajaxStart\");\n } // Uppercase the type\n\n\n s.type = s.type.toUpperCase(); // Determine if request has content\n\n s.hasContent = !rnoContent.test(s.type); // Save the URL in case we're toying with the If-Modified-Since\n // and/or If-None-Match header later on\n // Remove hash to simplify url manipulation\n\n cacheURL = s.url.replace(rhash, \"\"); // More options handling for requests with no content\n\n if (!s.hasContent) {\n // Remember the hash so we can put it back\n uncached = s.url.slice(cacheURL.length); // If data is available and should be processed, append data to url\n\n if (s.data && (s.processData || typeof s.data === \"string\")) {\n cacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data; // #9682: remove data so that it's not used in an eventual retry\n\n delete s.data;\n } // Add or update anti-cache param if needed\n\n\n if (s.cache === false) {\n cacheURL = cacheURL.replace(rantiCache, \"$1\");\n uncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + nonce++ + uncached;\n } // Put hash and anti-cache on the URL that will be requested (gh-1732)\n\n\n s.url = cacheURL + uncached; // Change '%20' to '+' if this is encoded form body content (gh-2658)\n } else if (s.data && s.processData && (s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n s.data = s.data.replace(r20, \"+\");\n } // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\n\n if (s.ifModified) {\n if (jQuery.lastModified[cacheURL]) {\n jqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n }\n\n if (jQuery.etag[cacheURL]) {\n jqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n }\n } // Set the correct header, if data is being sent\n\n\n if (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n jqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n } // Set the Accepts header for the server, depending on the dataType\n\n\n jqXHR.setRequestHeader(\"Accept\", s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") : s.accepts[\"*\"]); // Check for headers option\n\n for (i in s.headers) {\n jqXHR.setRequestHeader(i, s.headers[i]);\n } // Allow custom headers/mimetypes and early abort\n\n\n if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n // Abort if not done already and return\n return jqXHR.abort();\n } // Aborting is no longer a cancellation\n\n\n strAbort = \"abort\"; // Install callbacks on deferreds\n\n completeDeferred.add(s.complete);\n jqXHR.done(s.success);\n jqXHR.fail(s.error); // Get transport\n\n transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR); // If no transport, we auto-abort\n\n if (!transport) {\n done(-1, \"No Transport\");\n } else {\n jqXHR.readyState = 1; // Send global event\n\n if (fireGlobals) {\n globalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n } // If request was aborted inside ajaxSend, stop there\n\n\n if (completed) {\n return jqXHR;\n } // Timeout\n\n\n if (s.async && s.timeout > 0) {\n timeoutTimer = window.setTimeout(function () {\n jqXHR.abort(\"timeout\");\n }, s.timeout);\n }\n\n try {\n completed = false;\n transport.send(requestHeaders, done);\n } catch (e) {\n // Rethrow post-completion exceptions\n if (completed) {\n throw e;\n } // Propagate others as results\n\n\n done(-1, e);\n }\n } // Callback for when everything is done\n\n\n function done(status, nativeStatusText, responses, headers) {\n var isSuccess,\n success,\n error,\n response,\n modified,\n statusText = nativeStatusText; // Ignore repeat invocations\n\n if (completed) {\n return;\n }\n\n completed = true; // Clear timeout if it exists\n\n if (timeoutTimer) {\n window.clearTimeout(timeoutTimer);\n } // Dereference transport for early garbage collection\n // (no matter how long the jqXHR object will be used)\n\n\n transport = undefined; // Cache response headers\n\n responseHeadersString = headers || \"\"; // Set readyState\n\n jqXHR.readyState = status > 0 ? 4 : 0; // Determine if successful\n\n isSuccess = status >= 200 && status < 300 || status === 304; // Get response data\n\n if (responses) {\n response = ajaxHandleResponses(s, jqXHR, responses);\n } // Convert no matter what (that way responseXXX fields are always set)\n\n\n response = ajaxConvert(s, response, jqXHR, isSuccess); // If successful, handle type chaining\n\n if (isSuccess) {\n // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n if (s.ifModified) {\n modified = jqXHR.getResponseHeader(\"Last-Modified\");\n\n if (modified) {\n jQuery.lastModified[cacheURL] = modified;\n }\n\n modified = jqXHR.getResponseHeader(\"etag\");\n\n if (modified) {\n jQuery.etag[cacheURL] = modified;\n }\n } // if no content\n\n\n if (status === 204 || s.type === \"HEAD\") {\n statusText = \"nocontent\"; // if not modified\n } else if (status === 304) {\n statusText = \"notmodified\"; // If we have data, let's convert it\n } else {\n statusText = response.state;\n success = response.data;\n error = response.error;\n isSuccess = !error;\n }\n } else {\n // Extract error from statusText and normalize for non-aborts\n error = statusText;\n\n if (status || !statusText) {\n statusText = \"error\";\n\n if (status < 0) {\n status = 0;\n }\n }\n } // Set data for the fake xhr object\n\n\n jqXHR.status = status;\n jqXHR.statusText = (nativeStatusText || statusText) + \"\"; // Success/Error\n\n if (isSuccess) {\n deferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n } else {\n deferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n } // Status-dependent callbacks\n\n\n jqXHR.statusCode(_statusCode);\n _statusCode = undefined;\n\n if (fireGlobals) {\n globalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\", [jqXHR, s, isSuccess ? success : error]);\n } // Complete\n\n\n completeDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n if (fireGlobals) {\n globalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]); // Handle the global AJAX counter\n\n if (! --jQuery.active) {\n jQuery.event.trigger(\"ajaxStop\");\n }\n }\n }\n\n return jqXHR;\n },\n getJSON: function getJSON(url, data, callback) {\n return jQuery.get(url, data, callback, \"json\");\n },\n getScript: function getScript(url, callback) {\n return jQuery.get(url, undefined, callback, \"script\");\n }\n });\n jQuery.each([\"get\", \"post\"], function (i, method) {\n jQuery[method] = function (url, data, callback, type) {\n // Shift arguments if data argument was omitted\n if (isFunction(data)) {\n type = type || callback;\n callback = data;\n data = undefined;\n } // The url can be an options object (which then must have .url)\n\n\n return jQuery.ajax(jQuery.extend({\n url: url,\n type: method,\n dataType: type,\n data: data,\n success: callback\n }, jQuery.isPlainObject(url) && url));\n };\n });\n\n jQuery._evalUrl = function (url, options) {\n return jQuery.ajax({\n url: url,\n // Make this explicit, since user can override this through ajaxSetup (#11264)\n type: \"GET\",\n dataType: \"script\",\n cache: true,\n async: false,\n global: false,\n // Only evaluate the response if it is successful (gh-4126)\n // dataFilter is not invoked for failure responses, so using it instead\n // of the default converter is kludgy but it works.\n converters: {\n \"text script\": function textScript() {}\n },\n dataFilter: function dataFilter(response) {\n jQuery.globalEval(response, options);\n }\n });\n };\n\n jQuery.fn.extend({\n wrapAll: function wrapAll(html) {\n var wrap;\n\n if (this[0]) {\n if (isFunction(html)) {\n html = html.call(this[0]);\n } // The elements to wrap the target around\n\n\n wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n if (this[0].parentNode) {\n wrap.insertBefore(this[0]);\n }\n\n wrap.map(function () {\n var elem = this;\n\n while (elem.firstElementChild) {\n elem = elem.firstElementChild;\n }\n\n return elem;\n }).append(this);\n }\n\n return this;\n },\n wrapInner: function wrapInner(html) {\n if (isFunction(html)) {\n return this.each(function (i) {\n jQuery(this).wrapInner(html.call(this, i));\n });\n }\n\n return this.each(function () {\n var self = jQuery(this),\n contents = self.contents();\n\n if (contents.length) {\n contents.wrapAll(html);\n } else {\n self.append(html);\n }\n });\n },\n wrap: function wrap(html) {\n var htmlIsFunction = isFunction(html);\n return this.each(function (i) {\n jQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n });\n },\n unwrap: function unwrap(selector) {\n this.parent(selector).not(\"body\").each(function () {\n jQuery(this).replaceWith(this.childNodes);\n });\n return this;\n }\n });\n\n jQuery.expr.pseudos.hidden = function (elem) {\n return !jQuery.expr.pseudos.visible(elem);\n };\n\n jQuery.expr.pseudos.visible = function (elem) {\n return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n };\n\n jQuery.ajaxSettings.xhr = function () {\n try {\n return new window.XMLHttpRequest();\n } catch (e) {}\n };\n\n var xhrSuccessStatus = {\n // File protocol always yields status code 0, assume 200\n 0: 200,\n // Support: IE <=9 only\n // #1450: sometimes IE returns 1223 when it should be 204\n 1223: 204\n },\n xhrSupported = jQuery.ajaxSettings.xhr();\n support.cors = !!xhrSupported && \"withCredentials\" in xhrSupported;\n support.ajax = xhrSupported = !!xhrSupported;\n jQuery.ajaxTransport(function (options) {\n var _callback, errorCallback; // Cross domain only allowed if supported through XMLHttpRequest\n\n\n if (support.cors || xhrSupported && !options.crossDomain) {\n return {\n send: function send(headers, complete) {\n var i,\n xhr = options.xhr();\n xhr.open(options.type, options.url, options.async, options.username, options.password); // Apply custom fields if provided\n\n if (options.xhrFields) {\n for (i in options.xhrFields) {\n xhr[i] = options.xhrFields[i];\n }\n } // Override mime type if needed\n\n\n if (options.mimeType && xhr.overrideMimeType) {\n xhr.overrideMimeType(options.mimeType);\n } // X-Requested-With header\n // For cross-domain requests, seeing as conditions for a preflight are\n // akin to a jigsaw puzzle, we simply never set it to be sure.\n // (it can always be set on a per-request basis or even using ajaxSetup)\n // For same-domain requests, won't change header if already provided.\n\n\n if (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n } // Set headers\n\n\n for (i in headers) {\n xhr.setRequestHeader(i, headers[i]);\n } // Callback\n\n\n _callback = function callback(type) {\n return function () {\n if (_callback) {\n _callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = xhr.onreadystatechange = null;\n\n if (type === \"abort\") {\n xhr.abort();\n } else if (type === \"error\") {\n // Support: IE <=9 only\n // On a manual native abort, IE9 throws\n // errors on any property access that is not readyState\n if (typeof xhr.status !== \"number\") {\n complete(0, \"error\");\n } else {\n complete( // File: protocol always yields status 0; see #8605, #14207\n xhr.status, xhr.statusText);\n }\n } else {\n complete(xhrSuccessStatus[xhr.status] || xhr.status, xhr.statusText, // Support: IE <=9 only\n // IE9 has no XHR2 but throws on binary (trac-11426)\n // For XHR2 non-text, let the caller handle it (gh-2498)\n (xhr.responseType || \"text\") !== \"text\" || typeof xhr.responseText !== \"string\" ? {\n binary: xhr.response\n } : {\n text: xhr.responseText\n }, xhr.getAllResponseHeaders());\n }\n }\n };\n }; // Listen to events\n\n\n xhr.onload = _callback();\n errorCallback = xhr.onerror = xhr.ontimeout = _callback(\"error\"); // Support: IE 9 only\n // Use onreadystatechange to replace onabort\n // to handle uncaught aborts\n\n if (xhr.onabort !== undefined) {\n xhr.onabort = errorCallback;\n } else {\n xhr.onreadystatechange = function () {\n // Check readyState before timeout as it changes\n if (xhr.readyState === 4) {\n // Allow onerror to be called first,\n // but that will not handle a native abort\n // Also, save errorCallback to a variable\n // as xhr.onerror cannot be accessed\n window.setTimeout(function () {\n if (_callback) {\n errorCallback();\n }\n });\n }\n };\n } // Create the abort callback\n\n\n _callback = _callback(\"abort\");\n\n try {\n // Do send the request (this may raise an exception)\n xhr.send(options.hasContent && options.data || null);\n } catch (e) {\n // #14683: Only rethrow if this hasn't been notified as an error yet\n if (_callback) {\n throw e;\n }\n }\n },\n abort: function abort() {\n if (_callback) {\n _callback();\n }\n }\n };\n }\n }); // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\n jQuery.ajaxPrefilter(function (s) {\n if (s.crossDomain) {\n s.contents.script = false;\n }\n }); // Install script dataType\n\n jQuery.ajaxSetup({\n accepts: {\n script: \"text/javascript, application/javascript, \" + \"application/ecmascript, application/x-ecmascript\"\n },\n contents: {\n script: /\\b(?:java|ecma)script\\b/\n },\n converters: {\n \"text script\": function textScript(text) {\n jQuery.globalEval(text);\n return text;\n }\n }\n }); // Handle cache's special case and crossDomain\n\n jQuery.ajaxPrefilter(\"script\", function (s) {\n if (s.cache === undefined) {\n s.cache = false;\n }\n\n if (s.crossDomain) {\n s.type = \"GET\";\n }\n }); // Bind script tag hack transport\n\n jQuery.ajaxTransport(\"script\", function (s) {\n // This transport only deals with cross domain or forced-by-attrs requests\n if (s.crossDomain || s.scriptAttrs) {\n var script, _callback2;\n\n return {\n send: function send(_, complete) {\n script = jQuery(\"