From 89b0cf843a46a3bc16554fe5a7174ac101f8e131 Mon Sep 17 00:00:00 2001 From: koalyptus Date: Fri, 15 Jun 2018 21:06:57 +1000 Subject: [PATCH] try name property in travis releases provider --- .travis.yml | 1 + dist/tablefilter/tablefilter.js.map | 1 + dist/tablefilter/tf-0-2c8620168298c5a11749.js | 2 ++ dist/tablefilter/tf-0-2c8620168298c5a11749.js.map | 1 + 4 files changed, 5 insertions(+) create mode 100644 dist/tablefilter/tablefilter.js.map create mode 100644 dist/tablefilter/tf-0-2c8620168298c5a11749.js create mode 100644 dist/tablefilter/tf-0-2c8620168298c5a11749.js.map diff --git a/.travis.yml b/.travis.yml index 7f2177df..b1699df8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,6 +29,7 @@ deploy: branch: master api_key: $GITHUB_OAUTH_ACCESS_TOKEN skip_cleanup: true + name: $NEW_GIT_TAG - provider: s3 on: branch: master diff --git a/dist/tablefilter/tablefilter.js.map b/dist/tablefilter/tablefilter.js.map new file mode 100644 index 00000000..4f611888 --- /dev/null +++ b/dist/tablefilter/tablefilter.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap","webpack:///./node_modules/sugar-core/sugar-core.js","webpack:///./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js","webpack:///./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js","webpack:///./src/types.js","webpack:///./node_modules/sugar-date/date/var/DateUnitIndexes.js","webpack:///./node_modules/sugar-date/common/var/classChecks.js","webpack:///./node_modules/sugar-date/date/addLocale.js","webpack:///./src/settings.js","webpack:///./node_modules/sugar-date/common/var/mathAliases.js","webpack:///./node_modules/sugar-date/date/var/LocaleHelpers.js","webpack:///./src/dom.js","webpack:///./src/feature.js","webpack:///./node_modules/sugar-date/common/var/coreUtilityAliases.js","webpack:///./node_modules/sugar-date/date/build/buildRelativeAliasesCall.js","webpack:///./node_modules/sugar-date/range/internal/Range.js","webpack:///./src/const.js","webpack:///./src/root.js","webpack:///./node_modules/sugar-date/common/internal/defineOnPrototype.js","webpack:///./src/event.js","webpack:///./node_modules/sugar-date/common/internal/callDateGet.js","webpack:///./node_modules/sugar-date/date/internal/getWeekday.js","webpack:///./src/string.js","webpack:///./node_modules/sugar-date/range/build/buildDateRangeUnitsCall.js","webpack:///./node_modules/sugar-date/common/var/namespaceAliases.js","webpack:///./node_modules/sugar-date/date/internal/setWeekday.js","webpack:///./node_modules/sugar-date/common/var/trunc.js","webpack:///./node_modules/sugar-date/common/var/_utc.js","webpack:///./node_modules/sugar-date/date/internal/createDate.js","webpack:///./node_modules/sugar-date/date/internal/getMonth.js","webpack:///./node_modules/sugar-date/date/internal/getYear.js","webpack:///./node_modules/sugar-date/date/var/DateUnits.js","webpack:///./node_modules/sugar-date/common/internal/isDefined.js","webpack:///./node_modules/sugar-date/common/internal/forEach.js","webpack:///./src/modules/toolbar.js","webpack:///./node_modules/sugar-date/date/internal/cloneDate.js","webpack:///./node_modules/sugar-date/date/internal/getDate.js","webpack:///./node_modules/sugar-date/date/internal/setDate.js","webpack:///./node_modules/sugar-date/common/internal/callDateSet.js","webpack:///./node_modules/sugar-date/date/internal/setUnitAndLowerToEdge.js","webpack:///./node_modules/sugar-date/date/internal/advanceDate.js","webpack:///./node_modules/sugar-date/date/internal/getNewDate.js","webpack:///./node_modules/sugar-date/date/internal/getLowerUnitIndex.js","webpack:///./node_modules/sugar-date/common/internal/isUndefined.js","webpack:///./node_modules/sugar-date/range/internal/rangeIsValid.js","webpack:///./node_modules/sugar-date/date/internal/dateIsValid.js","webpack:///./node_modules/sugar-date/common/internal/defineInstanceSimilar.js","webpack:///./node_modules/sugar-date/date/internal/moveToBeginningOfUnit.js","webpack:///./node_modules/sugar-date/date/internal/moveToEndOfUnit.js","webpack:///./node_modules/sugar-date/date/internal/iterateOverDateParams.js","webpack:///./node_modules/sugar-date/date/internal/updateDate.js","webpack:///./node_modules/sugar-date/date/internal/tzOffset.js","webpack:///./node_modules/sugar-date/common/internal/spaceSplit.js","webpack:///./node_modules/sugar-date/common/var/CommonChars.js","webpack:///./node_modules/sugar-date/common/internal/simpleClone.js","webpack:///./node_modules/sugar-date/range/internal/rangeEvery.js","webpack:///./node_modules/sugar-date/range/var/DURATION_UNITS.js","webpack:///./node_modules/sugar-date/date/internal/getWeekNumber.js","webpack:///./node_modules/sugar-date/common/internal/padNumber.js","webpack:///./node_modules/sugar-date/date/internal/getTimeDistanceForUnit.js","webpack:///./node_modules/sugar-date/common/internal/simpleCapitalize.js","webpack:///./node_modules/sugar-date/date/internal/moveToBeginningOfWeek.js","webpack:///./node_modules/sugar-date/date/var/_dateOptions.js","webpack:///./node_modules/sugar-date/date/internal/getExtendedDate.js","webpack:///./node_modules/sugar-date/date/internal/iterateOverDateUnits.js","webpack:///./node_modules/sugar-date/common/internal/isObjectType.js","webpack:///./node_modules/sugar-date/date/var/ISODefaults.js","webpack:///./node_modules/sugar-date/common/internal/simpleMerge.js","webpack:///./node_modules/sugar-date/date/internal/getEnglishVariant.js","webpack:///./src/number.js","webpack:///./src/array.js","webpack:///./src/modules/baseDropdown.js","webpack:///./node_modules/sugar-date/range/internal/getDateIncrementObject.js","webpack:///./node_modules/sugar-date/range/var/MULTIPLIERS.js","webpack:///./node_modules/sugar-date/range/internal/incrementDate.js","webpack:///./node_modules/sugar-date/range/internal/getDateForRange.js","webpack:///./node_modules/sugar-date/range/internal/getRangeMemberPrimitiveValue.js","webpack:///./node_modules/sugar-date/range/internal/cloneRangeMember.js","webpack:///./node_modules/sugar-date/date/internal/dateRelative.js","webpack:///./node_modules/sugar-date/date/internal/fullCompareDate.js","webpack:///./node_modules/sugar-date/date/internal/assertDateIsValid.js","webpack:///./node_modules/sugar-date/date/internal/getUTCOffset.js","webpack:///./node_modules/sugar-date/date/internal/getHours.js","webpack:///./node_modules/sugar-date/date/var/CoreOutputFormats.js","webpack:///./node_modules/sugar-date/date/internal/dateFormat.js","webpack:///./node_modules/sugar-date/date/internal/collectDateArguments.js","webpack:///./node_modules/sugar-date/date/internal/advanceDateWithArgs.js","webpack:///./node_modules/sugar-date/date/internal/createDateWithContext.js","webpack:///./node_modules/sugar-date/date/internal/compareDate.js","webpack:///./node_modules/sugar-date/date/internal/moveToEndOfWeek.js","webpack:///./node_modules/sugar-date/date/internal/getDateParamKey.js","webpack:///./node_modules/sugar-date/date/internal/moveToFirstDayOfWeekYear.js","webpack:///./node_modules/sugar-date/date/internal/setISOWeekNumber.js","webpack:///./node_modules/sugar-date/date/internal/walkUnitDown.js","webpack:///./node_modules/sugar-date/date/internal/resetTime.js","webpack:///./node_modules/sugar-date/date/var/MINUTES.js","webpack:///./node_modules/sugar-date/date/internal/getAdjustedUnit.js","webpack:///./node_modules/sugar-date/common/internal/withPrecision.js","webpack:///./node_modules/sugar-date/common/var/chr.js","webpack:///./node_modules/sugar-date/date/internal/getDaysInMonth.js","webpack:///./node_modules/sugar-date/date/internal/getRegNonCapturing.js","webpack:///./node_modules/sugar-date/common/internal/isClass.js","webpack:///./node_modules/sugar-date/common/internal/map.js","webpack:///./node_modules/sugar-date/date/var/LocalizedParsingTokens.js","webpack:///./node_modules/sugar-date/date/var/ParsingTokens.js","webpack:///./node_modules/sugar-date/date/var/AmericanEnglishDefinition.js","webpack:///./node_modules/sugar-date/index.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/sort.js","webpack:///./src/modules/checkList.js","webpack:///./src/modules/paging.js","webpack:///./src/modules/noResults.js","webpack:///./src/modules/alternateRows.js","webpack:///./src/modules/clearButton.js","webpack:///./src/modules/statusBar.js","webpack:///./src/modules/rowsCounter.js","webpack:///./src/modules/markActiveColumns.js","webpack:///./src/modules/popupFilter.js","webpack:///./src/modules/highlightKeywords.js","webpack:///./src/modules/loader.js","webpack:///./src/modules/gridLayout.js","webpack:///./src/cookie.js","webpack:///./src/modules/storage.js","webpack:///./src/modules/hash.js","webpack:///./src/modules/state.js","webpack:///./src/modules/help.js","webpack:///./src/modules/dateType.js","webpack:///./src/modules/dropdown.js","webpack:///./src/emitter.js","webpack:///./src/tablefilter.js","webpack:///./node_modules/sugar-date/locales/zh-TW.js","webpack:///./node_modules/sugar-date/locales/zh-CN.js","webpack:///./node_modules/sugar-date/locales/sv.js","webpack:///./node_modules/sugar-date/locales/ru.js","webpack:///./node_modules/sugar-date/locales/pt.js","webpack:///./node_modules/sugar-date/locales/pl.js","webpack:///./node_modules/sugar-date/locales/no.js","webpack:///./node_modules/sugar-date/locales/nl.js","webpack:///./node_modules/sugar-date/locales/ko.js","webpack:///./node_modules/sugar-date/locales/ja.js","webpack:///./node_modules/sugar-date/locales/it.js","webpack:///./node_modules/sugar-date/locales/fr.js","webpack:///./node_modules/sugar-date/locales/fi.js","webpack:///./node_modules/sugar-date/locales/es.js","webpack:///./node_modules/sugar-date/locales/de.js","webpack:///./node_modules/sugar-date/locales/da.js","webpack:///./node_modules/sugar-date/locales/ca.js","webpack:///./node_modules/sugar-date/locales/index.js","webpack:///./node_modules/sugar-date/range/years.js","webpack:///./node_modules/sugar-date/range/weeks.js","webpack:///./node_modules/sugar-date/range/union.js","webpack:///./node_modules/sugar-date/range/toString.js","webpack:///./node_modules/sugar-date/range/toArray.js","webpack:///./node_modules/sugar-date/range/internal/getRangeMemberNumericValue.js","webpack:///./node_modules/sugar-date/range/span.js","webpack:///./node_modules/sugar-date/range/seconds.js","webpack:///./node_modules/sugar-date/range/months.js","webpack:///./node_modules/sugar-date/range/minutes.js","webpack:///./node_modules/sugar-date/range/milliseconds.js","webpack:///./node_modules/sugar-date/range/isValid.js","webpack:///./node_modules/sugar-date/range/intersect.js","webpack:///./node_modules/sugar-date/range/hours.js","webpack:///./node_modules/sugar-date/range/every.js","webpack:///./node_modules/sugar-date/common/internal/periodSplit.js","webpack:///./node_modules/sugar-date/range/internal/getPrecision.js","webpack:///./node_modules/sugar-date/range/internal/getGreaterPrecision.js","webpack:///./node_modules/sugar-date/range/internal/incrementString.js","webpack:///./node_modules/sugar-date/range/internal/incrementNumber.js","webpack:///./node_modules/sugar-date/range/internal/valueIsNotInfinite.js","webpack:///./node_modules/sugar-date/range/internal/isValidRangeMember.js","webpack:///./node_modules/sugar-date/range/internal/buildDateRangeUnits.js","webpack:///./node_modules/sugar-date/range/days.js","webpack:///./node_modules/sugar-date/range/contains.js","webpack:///./node_modules/sugar-date/range/clone.js","webpack:///./node_modules/sugar-date/range/internal/rangeClamp.js","webpack:///./node_modules/sugar-date/range/clamp.js","webpack:///./node_modules/sugar-date/range/var/DURATION_REG.js","webpack:///./node_modules/sugar-date/range/var/FULL_CAPTURED_DURATION.js","webpack:///./node_modules/sugar-date/range/var/DurationTextFormats.js","webpack:///./node_modules/sugar-date/range/internal/createDateRangeFromString.js","webpack:///./node_modules/sugar-date/range/var/DateRangeConstructor.js","webpack:///./node_modules/sugar-date/date/range.js","webpack:///./node_modules/sugar-date/range/index.js","webpack:///./node_modules/sugar-date/date/setOption.js","webpack:///./node_modules/sugar-date/date/getOption.js","webpack:///./node_modules/sugar-date/date/yearsUntil.js","webpack:///./node_modules/sugar-date/date/yearsSince.js","webpack:///./node_modules/sugar-date/date/yearsFromNow.js","webpack:///./node_modules/sugar-date/date/yearsAgo.js","webpack:///./node_modules/sugar-date/date/weeksUntil.js","webpack:///./node_modules/sugar-date/date/weeksSince.js","webpack:///./node_modules/sugar-date/date/weeksFromNow.js","webpack:///./node_modules/sugar-date/date/weeksAgo.js","webpack:///./node_modules/sugar-date/date/setWeekday.js","webpack:///./node_modules/sugar-date/date/setUTC.js","webpack:///./node_modules/sugar-date/date/setISOWeek.js","webpack:///./node_modules/sugar-date/date/set.js","webpack:///./node_modules/sugar-date/date/secondsUntil.js","webpack:///./node_modules/sugar-date/date/secondsSince.js","webpack:///./node_modules/sugar-date/date/secondsFromNow.js","webpack:///./node_modules/sugar-date/date/secondsAgo.js","webpack:///./node_modules/sugar-date/date/rewind.js","webpack:///./node_modules/sugar-date/date/internal/getUnitIndexForParamName.js","webpack:///./node_modules/sugar-date/date/reset.js","webpack:///./node_modules/sugar-date/date/relativeTo.js","webpack:///./node_modules/sugar-date/date/internal/getAdjustedUnitForDate.js","webpack:///./node_modules/sugar-date/date/relative.js","webpack:///./node_modules/sugar-date/date/monthsUntil.js","webpack:///./node_modules/sugar-date/date/monthsSince.js","webpack:///./node_modules/sugar-date/date/monthsFromNow.js","webpack:///./node_modules/sugar-date/date/monthsAgo.js","webpack:///./node_modules/sugar-date/date/minutesUntil.js","webpack:///./node_modules/sugar-date/date/minutesSince.js","webpack:///./node_modules/sugar-date/date/minutesFromNow.js","webpack:///./node_modules/sugar-date/date/minutesAgo.js","webpack:///./node_modules/sugar-date/date/millisecondsUntil.js","webpack:///./node_modules/sugar-date/date/millisecondsSince.js","webpack:///./node_modules/sugar-date/date/millisecondsFromNow.js","webpack:///./node_modules/sugar-date/date/millisecondsAgo.js","webpack:///./node_modules/sugar-date/date/iso.js","webpack:///./node_modules/sugar-date/date/isYesterday.js","webpack:///./node_modules/sugar-date/date/isWeekend.js","webpack:///./node_modules/sugar-date/date/isWeekday.js","webpack:///./node_modules/sugar-date/date/isWednesday.js","webpack:///./node_modules/sugar-date/date/isValid.js","webpack:///./node_modules/sugar-date/date/internal/isUTC.js","webpack:///./node_modules/sugar-date/date/isUTC.js","webpack:///./node_modules/sugar-date/date/isTuesday.js","webpack:///./node_modules/sugar-date/date/isTomorrow.js","webpack:///./node_modules/sugar-date/date/isToday.js","webpack:///./node_modules/sugar-date/date/isThursday.js","webpack:///./node_modules/sugar-date/date/isThisYear.js","webpack:///./node_modules/sugar-date/date/isThisWeek.js","webpack:///./node_modules/sugar-date/date/isThisMonth.js","webpack:///./node_modules/sugar-date/date/isSunday.js","webpack:///./node_modules/sugar-date/date/isSaturday.js","webpack:///./node_modules/sugar-date/date/isPast.js","webpack:///./node_modules/sugar-date/date/isNextYear.js","webpack:///./node_modules/sugar-date/date/isNextWeek.js","webpack:///./node_modules/sugar-date/date/isNextMonth.js","webpack:///./node_modules/sugar-date/date/isMonday.js","webpack:///./node_modules/sugar-date/date/isLeapYear.js","webpack:///./node_modules/sugar-date/date/isLastYear.js","webpack:///./node_modules/sugar-date/date/isLastWeek.js","webpack:///./node_modules/sugar-date/date/isLastMonth.js","webpack:///./node_modules/sugar-date/date/isFuture.js","webpack:///./node_modules/sugar-date/date/internal/buildRelativeAliases.js","webpack:///./node_modules/sugar-date/date/isFriday.js","webpack:///./node_modules/sugar-date/date/isBetween.js","webpack:///./node_modules/sugar-date/date/isBefore.js","webpack:///./node_modules/sugar-date/date/isAfter.js","webpack:///./node_modules/sugar-date/date/internal/compareDay.js","webpack:///./node_modules/sugar-date/common/internal/trim.js","webpack:///./node_modules/sugar-date/date/is.js","webpack:///./node_modules/sugar-date/date/hoursUntil.js","webpack:///./node_modules/sugar-date/date/hoursSince.js","webpack:///./node_modules/sugar-date/date/hoursFromNow.js","webpack:///./node_modules/sugar-date/date/hoursAgo.js","webpack:///./node_modules/sugar-date/date/getWeekday.js","webpack:///./node_modules/sugar-date/date/getUTCWeekday.js","webpack:///./node_modules/sugar-date/date/getUTCOffset.js","webpack:///./node_modules/sugar-date/date/getISOWeek.js","webpack:///./node_modules/sugar-date/date/get.js","webpack:///./node_modules/sugar-date/common/var/INTERNAL_MEMOIZE_LIMIT.js","webpack:///./node_modules/sugar-date/common/internal/memoizeFunction.js","webpack:///./node_modules/sugar-date/common/var/STRING_FORMAT_REG.js","webpack:///./node_modules/sugar-date/common/internal/createFormatMatcher.js","webpack:///./node_modules/sugar-date/date/internal/getMeridiemToken.js","webpack:///./node_modules/sugar-date/date/internal/getDaysSince.js","webpack:///./node_modules/sugar-date/date/internal/getWeekYear.js","webpack:///./node_modules/sugar-date/common/internal/repeatString.js","webpack:///./node_modules/sugar-date/date/var/TIMEZONE_ABBREVIATION_REG.js","webpack:///./node_modules/sugar-date/date/var/FormatTokensBase.js","webpack:///./node_modules/sugar-date/date/var/formattingTokens.js","webpack:///./node_modules/sugar-date/date/format.js","webpack:///./node_modules/sugar-date/date/endOfYear.js","webpack:///./node_modules/sugar-date/date/endOfWeek.js","webpack:///./node_modules/sugar-date/date/endOfMonth.js","webpack:///./node_modules/sugar-date/date/endOfISOWeek.js","webpack:///./node_modules/sugar-date/date/endOfDay.js","webpack:///./node_modules/sugar-date/date/daysUntil.js","webpack:///./node_modules/sugar-date/date/daysSince.js","webpack:///./node_modules/sugar-date/date/daysInMonth.js","webpack:///./node_modules/sugar-date/date/daysFromNow.js","webpack:///./node_modules/sugar-date/date/daysAgo.js","webpack:///./node_modules/sugar-date/date/clone.js","webpack:///./node_modules/sugar-date/date/beginningOfYear.js","webpack:///./node_modules/sugar-date/date/beginningOfWeek.js","webpack:///./node_modules/sugar-date/date/beginningOfMonth.js","webpack:///./node_modules/sugar-date/date/beginningOfISOWeek.js","webpack:///./node_modules/sugar-date/date/beginningOfDay.js","webpack:///./node_modules/sugar-date/date/internal/collectDateParamsFromArguments.js","webpack:///./node_modules/sugar-date/date/internal/getDateParamsFromString.js","webpack:///./node_modules/sugar-date/date/advance.js","webpack:///./node_modules/sugar-date/date/addYears.js","webpack:///./node_modules/sugar-date/date/addWeeks.js","webpack:///./node_modules/sugar-date/date/addSeconds.js","webpack:///./node_modules/sugar-date/date/addMonths.js","webpack:///./node_modules/sugar-date/date/addMinutes.js","webpack:///./node_modules/sugar-date/date/addMilliseconds.js","webpack:///./node_modules/sugar-date/date/addHours.js","webpack:///./node_modules/sugar-date/date/internal/buildDateUnitMethods.js","webpack:///./node_modules/sugar-date/date/addDays.js","webpack:///./node_modules/sugar-date/number/yearsFromNow.js","webpack:///./node_modules/sugar-date/number/yearsBefore.js","webpack:///./node_modules/sugar-date/number/yearsAgo.js","webpack:///./node_modules/sugar-date/number/yearsAfter.js","webpack:///./node_modules/sugar-date/number/years.js","webpack:///./node_modules/sugar-date/number/yearFromNow.js","webpack:///./node_modules/sugar-date/number/yearBefore.js","webpack:///./node_modules/sugar-date/number/yearAgo.js","webpack:///./node_modules/sugar-date/number/yearAfter.js","webpack:///./node_modules/sugar-date/number/year.js","webpack:///./node_modules/sugar-date/number/weeksFromNow.js","webpack:///./node_modules/sugar-date/number/weeksBefore.js","webpack:///./node_modules/sugar-date/number/weeksAgo.js","webpack:///./node_modules/sugar-date/number/weeksAfter.js","webpack:///./node_modules/sugar-date/number/weeks.js","webpack:///./node_modules/sugar-date/number/weekFromNow.js","webpack:///./node_modules/sugar-date/number/weekBefore.js","webpack:///./node_modules/sugar-date/number/weekAgo.js","webpack:///./node_modules/sugar-date/number/weekAfter.js","webpack:///./node_modules/sugar-date/number/week.js","webpack:///./node_modules/sugar-date/number/secondsFromNow.js","webpack:///./node_modules/sugar-date/number/secondsBefore.js","webpack:///./node_modules/sugar-date/number/secondsAgo.js","webpack:///./node_modules/sugar-date/number/secondsAfter.js","webpack:///./node_modules/sugar-date/number/seconds.js","webpack:///./node_modules/sugar-date/number/secondFromNow.js","webpack:///./node_modules/sugar-date/number/secondBefore.js","webpack:///./node_modules/sugar-date/number/secondAgo.js","webpack:///./node_modules/sugar-date/number/secondAfter.js","webpack:///./node_modules/sugar-date/number/second.js","webpack:///./node_modules/sugar-date/number/monthsFromNow.js","webpack:///./node_modules/sugar-date/number/monthsBefore.js","webpack:///./node_modules/sugar-date/number/monthsAgo.js","webpack:///./node_modules/sugar-date/number/monthsAfter.js","webpack:///./node_modules/sugar-date/number/months.js","webpack:///./node_modules/sugar-date/number/monthFromNow.js","webpack:///./node_modules/sugar-date/number/monthBefore.js","webpack:///./node_modules/sugar-date/number/monthAgo.js","webpack:///./node_modules/sugar-date/number/monthAfter.js","webpack:///./node_modules/sugar-date/number/month.js","webpack:///./node_modules/sugar-date/number/minutesFromNow.js","webpack:///./node_modules/sugar-date/number/minutesBefore.js","webpack:///./node_modules/sugar-date/number/minutesAgo.js","webpack:///./node_modules/sugar-date/number/minutesAfter.js","webpack:///./node_modules/sugar-date/number/minutes.js","webpack:///./node_modules/sugar-date/number/minuteFromNow.js","webpack:///./node_modules/sugar-date/number/minuteBefore.js","webpack:///./node_modules/sugar-date/number/minuteAgo.js","webpack:///./node_modules/sugar-date/number/minuteAfter.js","webpack:///./node_modules/sugar-date/number/minute.js","webpack:///./node_modules/sugar-date/number/millisecondsFromNow.js","webpack:///./node_modules/sugar-date/number/millisecondsBefore.js","webpack:///./node_modules/sugar-date/number/millisecondsAgo.js","webpack:///./node_modules/sugar-date/number/millisecondsAfter.js","webpack:///./node_modules/sugar-date/number/milliseconds.js","webpack:///./node_modules/sugar-date/number/millisecondFromNow.js","webpack:///./node_modules/sugar-date/number/millisecondBefore.js","webpack:///./node_modules/sugar-date/number/millisecondAgo.js","webpack:///./node_modules/sugar-date/number/millisecondAfter.js","webpack:///./node_modules/sugar-date/number/millisecond.js","webpack:///./node_modules/sugar-date/number/hoursFromNow.js","webpack:///./node_modules/sugar-date/number/hoursBefore.js","webpack:///./node_modules/sugar-date/number/hoursAgo.js","webpack:///./node_modules/sugar-date/number/hoursAfter.js","webpack:///./node_modules/sugar-date/number/hours.js","webpack:///./node_modules/sugar-date/number/hourFromNow.js","webpack:///./node_modules/sugar-date/number/hourBefore.js","webpack:///./node_modules/sugar-date/number/hourAgo.js","webpack:///./node_modules/sugar-date/number/hourAfter.js","webpack:///./node_modules/sugar-date/number/hour.js","webpack:///./node_modules/sugar-date/number/duration.js","webpack:///./node_modules/sugar-date/number/daysFromNow.js","webpack:///./node_modules/sugar-date/number/daysBefore.js","webpack:///./node_modules/sugar-date/number/daysAgo.js","webpack:///./node_modules/sugar-date/number/daysAfter.js","webpack:///./node_modules/sugar-date/number/days.js","webpack:///./node_modules/sugar-date/number/dayFromNow.js","webpack:///./node_modules/sugar-date/number/dayBefore.js","webpack:///./node_modules/sugar-date/number/dayAgo.js","webpack:///./node_modules/sugar-date/number/dayAfter.js","webpack:///./node_modules/sugar-date/common/internal/collectSimilarMethods.js","webpack:///./node_modules/sugar-date/common/internal/wrapNamespace.js","webpack:///./node_modules/sugar-date/common/var/methodDefineAliases.js","webpack:///./node_modules/sugar-date/date/internal/buildNumberUnitMethods.js","webpack:///./node_modules/sugar-date/number/day.js","webpack:///./node_modules/sugar-date/date/setLocale.js","webpack:///./node_modules/sugar-date/date/removeLocale.js","webpack:///./node_modules/sugar-date/date/getLocale.js","webpack:///./node_modules/sugar-date/date/getAllLocales.js","webpack:///./node_modules/sugar-date/common/internal/getKeys.js","webpack:///./node_modules/sugar-date/date/getAllLocaleCodes.js","webpack:///./node_modules/sugar-date/common/internal/setChainableConstructor.js","webpack:///./node_modules/sugar-date/date/internal/setDateChainableConstructor.js","webpack:///./node_modules/sugar-date/date/build/setDateChainableConstructorCall.js","webpack:///./node_modules/sugar-date/date/internal/iterateOverHigherDateParams.js","webpack:///./node_modules/sugar-date/date/internal/getYearFromAbbreviation.js","webpack:///./node_modules/sugar-date/date/internal/getParsingTokenValue.js","webpack:///./node_modules/sugar-date/date/internal/deleteDateParam.js","webpack:///./node_modules/sugar-date/common/internal/getOwnKey.js","webpack:///./node_modules/sugar-date/date/internal/getDateParam.js","webpack:///./node_modules/sugar-date/date/internal/setMonth.js","webpack:///./node_modules/sugar-date/date/internal/setYear.js","webpack:///./node_modules/sugar-date/date/internal/callDateSetWithWeek.js","webpack:///./node_modules/sugar-date/date/internal/getHigherUnitIndex.js","webpack:///./node_modules/sugar-date/date/internal/resetLowerUnits.js","webpack:///./node_modules/sugar-date/common/internal/defineAccessor.js","webpack:///./node_modules/sugar-date/common/internal/defineOptionsAccessor.js","webpack:///./node_modules/sugar-date/date/internal/defaultNewDate.js","webpack:///./node_modules/sugar-date/date/var/DATE_OPTIONS.js","webpack:///./node_modules/sugar-date/date/create.js","webpack:///./node_modules/sugar-date/date/internal/getParsingTokenWithSuffix.js","webpack:///./node_modules/sugar-date/date/internal/getAdjustedUnitForNumber.js","webpack:///./node_modules/sugar-date/common/internal/allCharsReg.js","webpack:///./node_modules/sugar-date/common/var/fullwidthNumberHelpers.js","webpack:///./node_modules/sugar-date/common/internal/escapeRegExp.js","webpack:///./node_modules/sugar-date/date/internal/arrayToRegAlternates.js","webpack:///./node_modules/sugar-date/common/var/PRIVATE_PROP_PREFIX.js","webpack:///./node_modules/sugar-date/common/internal/privatePropertyAccessor.js","webpack:///./node_modules/sugar-date/date/internal/getArrayWithOffset.js","webpack:///./node_modules/sugar-date/common/internal/getOrdinalSuffix.js","webpack:///./node_modules/sugar-date/common/internal/hasValidPlainObjectPrototype.js","webpack:///./node_modules/sugar-date/common/internal/hasOwnEnumeratedProperties.js","webpack:///./node_modules/sugar-date/common/internal/isPlainObject.js","webpack:///./node_modules/sugar-date/common/var/NATIVE_TYPES.js","webpack:///./node_modules/sugar-date/common/internal/commaSplit.js","webpack:///./node_modules/sugar-date/common/internal/isArrayIndex.js","webpack:///./node_modules/sugar-date/common/internal/getSparseArrayIndexes.js","webpack:///./node_modules/sugar-date/common/internal/iterateOverSparseArray.js","webpack:///./node_modules/sugar-date/common/internal/filter.js","webpack:///./node_modules/sugar-date/date/var/CoreParsingFormats.js","webpack:///./node_modules/sugar-date/date/var/LOCALE_ARRAY_FIELDS.js","webpack:///./node_modules/sugar-date/date/internal/getNewLocale.js","webpack:///./node_modules/sugar-date/date/var/CanadianEnglishDefinition.js","webpack:///./node_modules/sugar-date/date/var/EnglishLocaleBaseDefinition.js","webpack:///./node_modules/sugar-date/date/var/BritishEnglishDefinition.js","webpack:///./node_modules/sugar-date/date/var/LazyLoadedLocales.js","webpack:///./node_modules/sugar-date/date/index.js","webpack:///./node_modules/diacritics/index.js"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","define","amd","a","i","window","webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","parentJsonpFunction","shift","installedModules","1","__webpack_require__","l","e","requireEnsure","promises","installedChunkData","promise","Promise","resolve","reject","head","document","getElementsByTagName","script","createElement","charset","timeout","nc","setAttribute","src","p","0","setTimeout","onScriptComplete","type","target","event","onerror","onload","clearTimeout","chunk","errorType","realSrc","error","Error","request","undefined","appendChild","all","m","c","d","name","getter","o","defineProperty","configurable","enumerable","get","r","value","n","__esModule","getDefault","getModuleExports","object","property","oe","err","console","jsonpArray","oldJsonpFunction","bind","slice","s","global","Sugar","SUGAR_GLOBAL","NATIVE_NAMES","STATIC","INSTANCE","PROPERTY_DESCRIPTOR_SUPPORT","defineProperties","globalContext","this","hasExports","allowObjectPrototype","namespacesByName","namespacesByClassString","definePropertyShim","obj","prop","descriptor","DefaultChainable","getNewChainableClass","createNamespace","isObject","sugarNamespace","defineWithOptionCollect","methodName","instance","args","setProperty","arg1","arg2","arg3","opts","collectDefineOptions","defineMethods","methods","flags","forEachProperty","method","instanceMethod","staticMethod","wrapMethodWithArguments","wrapInstanceMethod","fn","wrapInstanceMethodFixed","b","setMethod","active","extend","last","extendNative","defineChainableMethod","source","methodsByName","nativeClass","nativeProto","staticMethods","instanceMethods","arrayOptionExists","field","val","arr","el","canExtend","objectRestricted","disallowedByFlags","methodIsExcepted","namespaceIsExcepted","arrayOptionExcludes","objectPrototype","hasOwn","mapNativeToChainable","mapObjectChainablesToNamespace","setObjectChainableOnNamespace","toString","startCollect","len","collectedArgs","Math","max","arguments","apply","polyfill","override","SugarChainable","arg","constructor","raw","existing","collision","dcp","wrapped","wrapWithChainableResult","disambiguate","disambiguateMethod","classToString","TypeError","mapObjectChainableToAllNamespaces","proto","methodNames","ownPropertyNames","nativeMethodProhibited","getOwnPropertyNames","internalToString","internalHasOwnProperty","key","writable","getOwn","setupGlobal","split","setGlobalProperties","buildNumberUnitMethods","buildDateUnitMethods","EMPTY_FN","isObj","isFn","isArray","isString","isNumber","isBoolean","isUndef","isNull","isEmpty","HOURS_INDEX","DAY_INDEX","WEEK_INDEX","MONTH_INDEX","YEAR_INDEX","isSerializable","isDate","isRegExp","isFunction","isSet","isMap","isError","NATIVE_TYPES","forEach","isClass","spaceSplit","isPlainObject","buildClassChecks","knownTypes","addKnownType","className","buildClassCheck","globalObject","getConstructorClassCheck","ctorStr","String","getToStringClassCheck","str","buildPrimitiveClassCheck","toLowerCase","t","addCoreTypes","names","Array","Set","Map","addArrayTypes","isKnownType","localeManager","Date","defineStatic","addLocale","code","set","add","_types","defaultsBool","defaultVal","defaultsStr","defaultsNb","isNaN","defaultsArr","defaultsFn","abs","pow","min","ceil","floor","round","English","LazyLoadedLocales","AmericanEnglishDefinition","getNewLocale","buildLocales","LocaleManager","loc","locales","fallback","current","getAll","def","compiledFormats","remove","_root","_string","doc","createElm","getText","node","textContent","trim","innerText","getFirstTextNode","childNodes","nodeType","_len","_key","tag","createText","removeElm","parentNode","removeChild","txt","createTextNode","hasClass","ele","cls","supportsClassList","classList","contains","match","RegExp","addClass","removeClass","reg","replace","createOpt","text","isSel","opt","createCheckItem","id","chkValue","labelText","extraAttr","li","label","check","elm","getElementById","tagname","documentElement","Feature","tf","feature","_this","_classCallCheck","enabled","config","emitter","initialized","on","destroy","enable","init","util","buildRelativeAliases","cloneRangeMember","Range","start","end","_dateType","_help","_state","_gridLayout","_loader","_highlightKeywords","_popupFilter","_markActiveColumns","_rowsCounter","_statusBar","_clearButton","_alternateRows","_noResults","_paging","_toolbar","INPUT","SELECT","MULTIPLE","CHECKLIST","NONE","ENTER_KEY","TAB_KEY","ESC_KEY","UP_ARROW_KEY","DOWN_ARROW_KEY","HEADER_TAG","CELL_TAG","STRING","NUMBER","FORMATTED_NUMBER","DATE","IP_ADDRESS","AUTO_FILTER_DELAY","FEATURES","dateType","class","help","enforce","state","markActiveColumns","gridLayout","loader","highlightKeyword","popupFilter","rowsCounter","statusBar","clearButton","alternateRows","noResults","paging","toolbar","self","_typeof","defineOnPrototype","ctor","bound","scope","boundFnName","keyCode","addEvt","func","capture","addEventListener","attachEvent","removeEvt","removeEventListener","detachEvent","stopEvt","evt","stopPropagation","cancelBubble","cancelEvt","preventDefault","returnValue","targetEvt","srcElement","charCode","which","isKeyPressed","indexOf","_utc","callDateGet","getWeekday","_diacritics","rgxEsc","matchCase","term","exactMatch","caseSensitive","ignoreDiacritics","modifier","test","buildDateRangeUnits","sugarObject","sugarArray","sugarDate","sugarString","sugarNumber","Number","sugarFunction","Function","sugarRegExp","setDate","getDate","classChecks","mathAliases","setWeekday","dow","dir","currentWeekday","ndir","offset","getTime","trunc","isFinite","privatePropertyAccessor","getExtendedDate","createDate","options","forceClone","date","getMonth","getYear","getDaysInMonth","DateUnits","multiplier","alias","ambiguous","isDefined","iterateOverSparseArray","_feature","_dom","_settings","EVENTS","RIGHT","LEFT","CENTER","Toolbar","_possibleConstructorReturn","__proto__","getPrototypeOf","f","contCssClass","container_css_class","lContCssClass","left_cont_css_class","rContCssClass","right_cont_css_class","cContCssClass","center_cont_css_class","tgtId","target_id","cont","lCont","rCont","cCont","innerCont","left","center","right","isExternal","container","Mod","tblMainCont","infDivCssClass","dom","insertBefore","firstChild","createContainer","emit","position","css","div","tbl","captions","cloneDate","clone","callDateSet","safe","walkUnitDown","setUnitAndLowerToEdge","startIndex","stopIndex","unit","updateDate","advanceDate","num","reset","_dateOptions","getNewDate","DateUnitIndexes","getLowerUnitIndex","index","isUndefined","isValidRangeMember","rangeIsValid","range","dateIsValid","methodDefineAliases","collectSimilarMethods","defineInstance","defineInstanceSimilar","LocaleHelpers","moveToBeginningOfWeek","moveToBeginningOfUnit","unitIndex","localeCode","getFirstDayOfWeek","moveToEndOfWeek","moveToEndOfUnit","getDateParam","iterateOverDateUnits","iterateOverDateParams","params","endIndex","run","result","resetLowerUnits","getHigherUnitIndex","callDateSetWithWeek","advance","prefer","weekdayDir","upperUnitIndex","setUnit","unitName","checkMonth","fraction","setUpperUnit","setSpecificity","specificity","handleFraction","lowerUnit","monthHasShifted","targetMonth","setTime","millisecond","canDisambiguate","disambiguateHigherUnit","tzOffset","getTimezoneOffset","HALF_WIDTH_ZERO","FULL_WIDTH_ZERO","HALF_WIDTH_PERIOD","FULL_WIDTH_PERIOD","HALF_WIDTH_COMMA","OPEN_BRACE","CLOSE_BRACE","simpleMerge","simpleClone","incrementDate","incrementNumber","incrementString","getGreaterPrecision","getDateIncrementObject","rangeEvery","step","countOnly","increment","precision","dio","inverse","NaN","ISODefaults","moveToFirstDayOfWeekYear","ISO_FIRST_DAY_OF_WEEK","ISO_FIRST_DAY_OF_WEEK_YEAR","getWeekNumber","allowPrevious","firstDayOfWeek","firstDayOfWeekYear","isoWeek","repeatString","padNumber","place","sign","base","replacement","getTimeDistanceForUnit","d1","d2","tmp","fwd","simpleCapitalize","charAt","toUpperCase","DATE_OPTIONS","namespaceAliases","defineOptionsAccessor","MINUTES","ParsingTokens","resetTime","isObjectType","deleteDateParam","coreUtilityAliases","getParsingTokenValue","getYearFromAbbreviation","iterateOverHigherDateParams","contextDate","afterCallbacks","relative","getFormatParams","dif","to","token","param","getTokenValue","cloneDateByFlag","fromUTC","setUTC","afterDateSet","handleTimezoneOffset","tzHour","tzMinute","tzSign","minute","handleMidday","hour","handleRelativeUnit","weekday","setOrdinalWeekday","half","day","separateAbsoluteUnits","edge","handleEdge","units","weekdayOfMonth","edgeIndex","month","getDateOptions","locale","parseStringDate","cacheFormat","timestamp","ampm","utc","midday","yearSign","year","fireCallbacks","EnglishLocaleBaseDefinition","getEnglishVariant","v","parse","decimal","regex","unformatted","parseFloat","has","sCase","Boolean","_sort","_const","BaseDropdown","customSorter","filter_options_sorter","col","comparer","isCustom","optsTxt","excludedOpts","colIndex","isCustomOptions","sortSlc","sortNumDesc","compareFn","idx","hasType","getDecimal","sortNumberStr","getLocale","sortDateStr","ignoreCase","sort","colIndexes","_this2","colIdx","values","getValues","build","linkedFilters","selectOptions","rowIdx","activeFilterIdx","disableExcludedOptions","isRowValid","isRowDisplayed","DURATION_REG","amt","Hours","Minutes","Seconds","Milliseconds","MULTIPLIERS","amount","mult","getDateForRange","create","getRangeMemberPrimitiveValue","valueOf","dateFormat","assertDateIsValid","getAdjustedUnitForDate","dateRelative","dRelative","adu","format","concat","getRelativeFormat","compareDay","compareDate","fullCompareDate","margin","weekdayMap","monthMap","getUTCOffset","iso","colon","getHours","ISO8601","RFC1123","RFC1036","CoreOutputFormats","formattingTokens","dateFormatMatcher","getDateParamsFromString","collectDateParamsFromArguments","collectDateArguments","allowDuration","advanceDateWithArgs","createDateWithContext","timezoneShift","compareEdges","loMargin","hiMargin","addSpecificUnit","getTimezoneShift","getOwnKey","getDateParamKey","setYear","setMonth","setISOWeekNumber","getAdjustedUnit","ms","withPrecision","fromCharCode","getRegNonCapturing","map","requiresSuffix","requiresSuffixOr","second","requiresNumerals","yyyy","MM","dd","hh","mm","ss","yy","y","ihh","imm","GMT","Z","mdy","short","medium","long","full","stamp","time","g","eval","_number","_sugarDate","x","numSortAsc","numSortDesc","dateSortAsc","date1","date2","dateSortDesc","numStr1","numStr2","num1","num2","dateStr1","dateStr2","_baseDropdown","_array","_event","CheckList","containers","containerCssClass","div_checklist_css_class","filterCssClass","checklist_css_class","itemCssClass","checklist_item_css_class","selectedItemCssClass","checklist_selected_item_css_class","activateText","activate_checklist_text","disabledItemCssClass","checklist_item_disabled_css_class","enableResetOption","enable_checklist_reset_filter","prfx","setItemOption","filter","loadFltOnDemand","getAttribute","ct","onCheckListClick","colIdxs","getFiltersByType","refreshFilters","_this3","externalFltTgtId","externalFltIds","divCont","fltIds","buildFilterId","isLinked","refreshAll","_this4","flt","ul","customValues","getCustomOptions","activeIdx","activeFilterId","getActiveFilterId","getColumnIndexFromFilterId","filteredDataCol","innerHTML","eachRow","row","cellValue","getCellValue","cells","cellString","filteredCol","getVisibleColumnValues","k","excludeRows","nbCells","isValidLinkedValue","sortOptions","addChecks","_this5","chkCt","addTChecks","lbl","fltId","lblIdx","disabled","optionClick","style","display","_this6","li0","getClearFilterText","enableEmptyOption","li1","emOperator","emptyText","enableNonEmptyOption","li2","nmOperator","nonEmptyText","_this7","chkIndex","dataset","getFilterElement","parseInt","items","slcValues","slcIndexes","checked","separator","chx","indexes","orOperator","chx0","replaceValue","replaceIndex","_this8","lis","chk","chkVal","fltAttr","substr","_this9","off","Paging","btnCssClass","btn_css_class","pageSlc","pageLengthSlc","pageLength","pageLengthTgtId","results_per_page_target_id","pgSlcCssClass","slc_css_class","pgInpCssClass","inp_css_class","resultsPerPage","results_per_page","hasResultsPerPage","resultsSlcCssClass","results_slc_css_class","resultsSpanCssClass","results_span_css_class","startPagingRow","nbPages","currentPageNb","btnNextPageText","btn_next_page_text","btnPrevPageText","btn_prev_page_text","btnLastPageText","btn_last_page_text","btnFirstPageText","btn_first_page_text","btnNextPageHtml","btn_next_page_html","enableIcons","btnPrevPageHtml","btn_prev_page_html","btnFirstPageHtml","btn_first_page_html","btnLastPageHtml","btn_last_page_html","pageText","page_text","ofText","of_text","nbPgSpanCssClass","nb_pages_css_class","hasBtns","btns","pageSelectorType","page_selector_type","toolbarPosition","toolbar_position","onBeforeChangePage","on_before_change_page","onAfterChangePage","on_after_change_page","slcResultsTxt","btnNextCont","btnPrevCont","btnLastCont","btnFirstCont","pgCont","pgBefore","pgAfter","startRow","refRow","nrows","getRowsNb","slcIndex","selectedIndex","nbOpts","next","nextIndex","changePage","prev","prevIndex","first","_detectKey","sorted","blur","slcPagesChange","nextEvt","prevEvt","lastEvt","firstEvt","slcPages","setResultsPerPage","slc","btnNextSpan","btnPrevSpan","btnLastSpan","btnFirstSpan","btnNext","btnPrev","btnLast","btnFirst","targetEl","pgBeforeSpan","pgAfterSpan","pgSpan","setPagingInfo","fltGrid","validateAllRows","validRowsIndex","resetPagingInfo","changePageHandler","changePageResultsHandler","filterTable","validRows","getValidRows","visibility","z","groupByPage","rows","endPagingRow","h","getValidRowsNb","validRowIdx","rowDisplayed","cmd","isInitialized","isEnabled","btnEvt","cmdtype","slcResultsChange","ev","onChangeResultsPerPage","slcR","slcRText","slcROpts","slcRSpan","btn","currOpt","Option","selected","slcPagesSelIndex","nbFilterableRows","slcIdx","pgNb","getPageNb","pglenIndex","getPageLength","changeResultsPerPage","pageNumber","setPage","removeResultsPerPage","NoResults","no_results_message","content","customContainer","custom_container","customContainerId","custom_container_id","cssClass","css_class","onBeforeShow","on_before_show_msg","onAfterShow","on_after_show_msg","onBeforeHide","on_before_hide_msg","onAfterHide","on_after_hide_msg","nextSibling","toggle","hide","show","setWidth","width","headTbl","clientWidth","tHead","tBodies","AlternateRows","evenCss","even_row_css_class","oddCss","odd_row_css_class","processAll","processRowHandler","indexLen","j","setRowBg","arrIdx","isValid","removeRowBg","rowIndex","arrIndex","processRow","ClearButton","btn_reset","targetId","tooltip","html","element","clearFilters","resetEl","onClick","fltReset","StatusBar","status_bar","msgContainer","labelContainer","delay","onBeforeShowMsg","onAfterShowMsg","msgFilter","msg_filter","msgPopulate","msg_populate","msgPopulateCheckList","msg_populate_checklist","msgChangePage","msg_change_page","msgClear","msg_clear","msgChangeResults","msg_change_results","msgResetPage","msg_reset_page","msgResetPageLength","msg_reset_page_length","msgSort","msg_sort","msgLoadExtensions","msg_load_extensions","msgLoadThemes","msg_load_themes","statusDiv","statusSpan","statusSpanText","message","RowsCounter","rows_counter","fromToTextSeparator","overText","over_text","onBeforeRefreshCounter","on_before_refresh_counter","onAfterRefreshCounter","on_after_refresh_counter","countDiv","countSpan","countText","refresh","totTxt","nbValidRows","pagingStartRow","pagingEndRow","getFilterableRowsNb","nbHiddenRows","MarkActiveColumns","mark_active_columns","headerCssClass","header_css_class","cellCssClass","cell_css_class","highlightColumn","highlight_column","onBeforeActiveColumn","on_before_active_column","onAfterActiveColumn","on_after_active_column","clearActiveColumns","markActiveColumn","eachCol","getHeaderElement","eachColumnCell","cell","header","querySelectorAll","PopupFilter","popup_filters","closeOnFiltering","close_on_filtering","iconPath","image","themesPath","activeIconPath","image_active","iconHtml","image_html","placeholderCssClass","placeholder_css_class","div_css_class","adjustToContainer","adjust_to_container","onBeforeOpen","on_before_popup_filter_open","onAfterOpen","on_after_popup_filter_open","onBeforeClose","on_before_popup_filter_close","onAfterClose","on_after_popup_filter_close","fltSpans","fltIcons","filtersCache","fltElms","prfxDiv","closeAll","headerWidth","targetElm","activeFlt","close","filtersRowIndex","headersRow","headers_row_index","buildIcons","setIconsState","cellIndex","changeState","buildAll","icon","getFilterType","contId","placeholder","isOpen","open","onMouseup","focus","exceptIdx","fltType","iconImg","HighlightKeyword","highlightCssClass","highlight_css_class","unhighlightAll","_processTerm","hasChildNodes","children","highlight","termIdx","nodeValue","pn","nv","before","after","highlightedNodes","nodeVal","replaceChild","normalize","highlightKeywords","getFiltersValue","item","unhighlight","reLk","lkOperator","reEq","eqOperator","reSt","stOperator","reEn","enOperator","reLe","leOperator","reGe","geOperator","reL","lwOperator","reG","grOperator","reD","dfOperator","Loader","closeDelay","onShow","on_show_loader","onHide","on_hide_loader","containerDiv","displayLoader","GridLayout","grid_layout","height","mainContCssClass","cont_css_class","tbl_cont_css_class","headContCssClass","tbl_head_css_class","inf_grid_css_class","headRowIndex","headRows","headers_rows","filters","noHeaders","no_headers","defaultColWidth","default_col_width","colElms","prfxGridFltTd","prfxGridTh","sourceTblHtml","outerHTML","tblHasColTag","tblCont","headTblCont","setOverrides","setDefaultColWidths","setConfigWidth","tblW","initialTableWidth","tH","hRow","sortTriggers","getSortTriggerIds","filtersRow","createFiltersRow","setHeadersRow","thead","tableLayout","setColWidths","scrollLeft","extension","asyncSort","triggerIds","setColumnElements","popupFilters","colWidths","colW","getHeadersRowIndex","fltTdId","prfxFlt","cl","fltCellTag","cols","getCellsNb","tableHead","thId","write","hours","expire","toGMTString","cookie","escape","read","cookieValue","search","unescape","substring","JSON","localStorage","location","hasStorage","Storage","enableLocalStorage","enableCookie","duration","cookieDuration","save","sync","getKey","stringify","_cookie2","default","removeItem","retrieve","overrideAndSync","prfxTf","path","pathname","decodeURIComponent","encodeURIComponent","hasHashChange","docMode","documentMode","Hash","lastHash","boundSync","hash","update","_hash","_storage","State","cfg","enableHash","types","persistFilters","persistPageNumber","page_number","persistPageLength","page_length","persistSort","persistColsVisibility","columns_visibility","persistFiltersVisibility","filters_visibility","cookie_duration","enableStorage","storage","pageNb","hiddenCols","filtersVisibility","prfxCol","pageNbKey","pageLengthKey","filtersVisKey","updatePage","updatePageLength","descending","updateSort","_syncSort","_syncColsVisibility","updateColsVisibility","_syncFiltersVisibility","visible","updateFiltersVisibility","keys","column","hidden","_syncFilters","disable","setFilterValue","WIKI_URL","WEBSITE_URL","Help","help_instructions","contTgtId","container_target_id","instrText","instrHtml","btnText","btn_text","btnHtml","btn_html","boundMouseup","defaultHtml","version","divContainer","helpEl","helplink","divDisplay","DateType","datetime","setLocale","addConfigFormats","colTypes","dateStr","colType","getOptions","formats","addFormat","ex","Dropdown","enableSlcResetFilter","enable_slc_reset_filter","non_empty_text","multipleSlcTooltip","multiple_slc_tooltip","onSlcChange","selectFlts","multipleFlts","multiple","title","fltCssClass","fltMultiCssClass","opt0","onSlcFocus","addOptions","slcValue","addFirstOption","isDisabled","opt1","opt2","option","selectedOptions","Emitter","events","evts","splice","_emitter","_dropdown","_checkList","TableFilter","getFullYear","hasConfig","nodeName","filterTypes","basePath","base_path","grid","filters_row_index","filters_cell_tag","stylePath","getStylePath","stylesheet","getStylesheetPath","stylesheetId","fltsRowCssClass","flts_row_css_class","enable_icons","alternate_rows","col_widths","flt_css_class","flt_multi_css_class","fltSmallCssClass","flt_small_css_class","singleFltCssClass","single_filter","enterKey","enter_key","onBeforeFilter","on_before_filter","onAfterFilter","on_after_filter","case_sensitive","hasExactMatchByCol","columns_exact_match","exactMatchByCol","exact_match","ignore_diacritics","linked_filters","disable_excluded_options","hasExcludedRows","exclude_rows","external_flt_ids","onFiltersLoaded","on_filters_loaded","singleFlt","singleFltExcludeCols","exclude_cols","onRowValidated","on_row_validated","cellParser","cell_parser","watermark","isWatermarkArray","clearFilterText","clear_filter_text","enable_empty_option","empty_text","enable_non_empty_option","on_change","sort_select","isSortNumAsc","sort_num_asc","sortNumAsc","isSortNumDesc","sort_num_desc","load_filters_on_demand","hasCustomOptions","custom_options","customOptions","rgxOperator","regexp_operator","empty_operator","nonempty_operator","or_operator","anOperator","and_operator","greater_operator","lower_operator","lower_equal_operator","greater_equal_operator","different_operator","like_operator","equal_operator","start_with_operator","end_with_operator","displayBtn","btnReset","onBeforeReset","on_before_reset","onAfterReset","on_after_reset","autoFilter","auto_filter","autoFilterDelay","isUserTyping","autoFilterTimer","highlight_keywords","thousandsSeparator","thousands_separator","decimalSeparator","decimal_separator","col_types","prfxValButton","prfxResponsive","extensions","enableDefaultTheme","enable_default_theme","hasThemes","themes","getThemesPath","responsive","ExtRegistry","instantiateFeatures","import","inpclass","loadThemes","initFeatures","fltrow","_insertFiltersRow","fltCell","colSpan","dropdown","isExternalFlt","checkList","_buildInputFilter","_buildSubmitButton","setActiveFilterId","_initNoFilters","setExcludeRows","setFixedLayout","initExtensions","linkFilters","clearInterval","setInterval","insertRow","inpType","inp","onInpFocus","detectKey","onKeyDown","onKeyUp","onInpBlur","Cls","exts","ext","loadExtension","hasExtension","modulePath","then","__WEBPACK_AMD_REQUIRE_ARRAY__","mod","inst","catch","theme","styleId","isImported","_this10","removeExternalFlts","destroyExtensions","deleteRow","externalFlt","optTxt","optArray","slcTexts","texts","slcSort","sorts","_this11","hiddenRows","searchArgs","occurence","isMatch","isSingleFltMatch","sA","sAOrSplit","hasMultiOrSA","sAAndSplit","hasMultiAndSA","cS","found","w","_match","validateRow","numData","reEm","reNm","reRe","hasLO","hasLE","hasGR","hasGE","hasDF","hasEQ","hasLK","hasST","hasEN","hasEM","hasNM","hasRE","dte1","dte2","isValidDate","parseDate","isLDate","isLEDate","isGDate","isGEDate","isDFDate","isEQDate","isExactMatch","srchArg","searchArg","lastIndexOf","ignoresDiacritics","includeHeaders","exclude","getColValues","_this12","typed","colValues","getContent","getCellData","getHeadersText","isExludedRow","fltValue","fltColType","_this13","getFilterValue","bool","tr","nbRows","getWorkingRows","excludeHiddenCols","getTableData","_this14","tblData","headers","rowData","isColHidden","cellContent","filteredData","rData","getFilteredDataCol","_this15","validColValues","getRowDisplay","unshift","displayFlag","validFlag","query","tableWidth","defaultWidth","reduce","colTags","frag","createDocumentFragment","_this16","filterId","style_path","themes_path","getFilterId","_this17","slcA1","slcA2","slcA3","curSlc","slcSelectedValue","ignoreDiac","clearText","continueFn","breakFn","_this18","startIdx","filePath","imported","attr","files","fileId","callback","_this19","isLoaded","file","onreadystatechange","readyState","reCalc","_this20","table","_this21","headerText","ampmFront","numeralUnits","allowsFullWidth","timeMarkerOptional","weekdays","numerals","placeholders","past","future","timeSuffixes","modifiers","timeParse","plural","months","tokens","articles","timeFrontParse","timeMarkers","numberWithUnit","toFixed","last2","prefix","ordinalSuffix","baseUnit","union","toArray","getRangeMemberNumericValue","charCodeAt","span","intersect","every","periodSplit","getPrecision","n1","n2","chr","valueIsNotInfinite","Infinity","DURATION_UNITS","rangeClamp","clamp","FULL_CAPTURED_DURATION","RANGE_REG_FROM_TO","RANGE_REG_REAR_DURATION","RANGE_REG_FRONT_DURATION","DurationTextFormats","createDateRangeFromString","DateRangeConstructor","setOption","getOption","yearsUntil","yearsSince","yearsFromNow","yearsAgo","weeksUntil","weeksSince","weeksFromNow","weeksAgo","setISOWeek","defineInstanceWithArguments","secondsUntil","secondsSince","secondsFromNow","secondsAgo","rewind","getUnitIndexForParamName","relativeTo","u","monthsUntil","monthsSince","monthsFromNow","monthsAgo","minutesUntil","minutesSince","minutesFromNow","minutesAgo","millisecondsUntil","millisecondsSince","millisecondsFromNow","millisecondsAgo","toISOString","isYesterday","isWeekend","isWeekday","isWednesday","isUTC","isTuesday","isTomorrow","isToday","isThursday","isThisYear","isThisWeek","isThisMonth","isSunday","isSaturday","isPast","isNextYear","isNextWeek","isNextMonth","isMonday","isLeapYear","isLastYear","isLastWeek","isLastMonth","isFuture","special","together","isFriday","isBetween","t1","t2","lo","hi","isBefore","isAfter","comp","is","hoursUntil","hoursSince","hoursFromNow","hoursAgo","getUTCWeekday","getUTCDay","getISOWeek","INTERNAL_MEMOIZE_LIMIT","memoizeFunction","memo","counter","STRING_FORMAT_REG","CommonChars","createFormatMatcher","bracketMatcher","percentMatcher","precheck","compileMemoized","compile","lastIndex","exec","getSubstring","getToken","literal","bKey","pLit","pKey","assertPassesPrecheck","bt","pt","getLiteral","sub","assertNoUnmatched","getMeridiemToken","getDaysSince","getWeekYear","week","getFirstDayOfWeekYear","TIMEZONE_ABBREVIATION_REG","FormatTokensBase","ldml","strf","lowerToken","getWeekdayName","allowAlternates","alternate","getMonthName","strfPadding","ldmlPaddedToken","ordinalToken","doy","ldmlTwoDigitToken","strfTwoDigitToken","ldmlTokens","strfTokens","buildDateFormatTokens","addFormats","buildLowercase","buildPadded","padding","buildTwoDigits","buildAlias","buildAlternate","getIdentityFormat","getPadded","buildOrdinal","getOrdinal","buildAlternates","buildDateFormatMatcher","getLdml","getStrf","checkDateToken","endOfYear","endOfWeek","endOfMonth","endOfISOWeek","endOfDay","daysUntil","daysSince","daysInMonth","daysFromNow","daysAgo","beginningOfYear","beginningOfWeek","beginningOfMonth","beginningOfISOWeek","beginningOfDay","addYears","addWeeks","addSeconds","addMonths","addMinutes","addMilliseconds","addHours","caps","addDays","yearsBefore","yearsAfter","years","yearFromNow","yearBefore","yearAgo","yearAfter","weeksBefore","weeksAfter","weeks","weekFromNow","weekBefore","weekAgo","weekAfter","secondsBefore","secondsAfter","seconds","secondFromNow","secondBefore","secondAgo","secondAfter","monthsBefore","monthsAfter","monthFromNow","monthBefore","monthAgo","monthAfter","minutesBefore","minutesAfter","minutes","minuteFromNow","minuteBefore","minuteAgo","minuteAfter","millisecondsBefore","millisecondsAfter","milliseconds","millisecondFromNow","millisecondBefore","millisecondAgo","millisecondAfter","hoursBefore","hoursAfter","hourFromNow","hourBefore","hourAgo","hourAfter","getDuration","daysBefore","daysAfter","days","dayFromNow","dayBefore","dayAgo","dayAfter","wrapNamespace","defineStaticPolyfill","defineInstancePolyfill","defineInstanceAndStatic","removeLocale","getAllLocales","getKeys","getAllLocaleCodes","setChainableConstructor","createFn","setDateChainableConstructor","delta","defineAccessor","namespace","defaults","defaultNewDate","newDateInternal","LocalizedParsingTokens","getParsingTokenWithSuffix","suffix","getAdjustedUnitForNumber","allCharsReg","fullWidthNumberReg","fullWidthNumberMap","fullWidthNumbers","buildFullWidthNumber","fwp","hwp","hwc","fwn","digit","escapeRegExp","arrayToRegAlternates","joined","join","PRIVATE_PROP_PREFIX","privateKey","getArrayWithOffset","getOrdinalSuffix","hasValidPlainObjectPrototype","hasConstructor","hasOwnEnumeratedProperties","objectProto","commaSplit","isArrayIndex","getSparseArrayIndexes","fromIndex","loop","fromRight","aLoop","LOCALE_ARRAY_FIELDS","CoreParsingFormats","fullwidthNumberHelpers","Locale","monthSuffix","getNumber","numeralMap","getNumeralValue","lastWasPlace","isPlace","numeral","convertAdjustedToFormat","getTokenSrc","parsingAliases","replaceParsingTokens","parsingTokens","addRawFormat","buildValueArray","setMap","forAllAlternates","forEachAlternate","alt","suffixes","addFormatSet","allowTime","timeFront","getFormatWithTime","baseFormat","timeBefore","getTimeBefore","getTimeAfter","localized","markers","initFormats","initDefinition","initArrayFields","buildNumerals","buildTimeFormats","getTimeFormat","buildParsingTokens","getNumeralSrc","buildTimeSuffixes","buildModifiers","mapKey","addCoreFormats","df","addLocaleFormats","CanadianEnglishDefinition","BritishEnglishDefinition","en-US","en-GB","en-AU","en-CA","removeDiacritics","diacriticsMap","replacementList","chars"],"mappings":"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AAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KAGAA,EAAA,KACAA,EAAA,KAEAzB,EAAAD,QAAA0B,EAAA,kBCpMA1B,EAAA6R,OAoTA,SAAA02D,iBAAAv5D,GACA,OAAAA,EAAA8E,QAAA,6BAAA5P,GACA,OAAAskE,EAAAtkE,SATA,IA3SA,IAAAukE,IAEAnhD,KAAA,IACAohD,MAAA,MAEAphD,KAAA,IACAohD,MAAA,MAEAphD,KAAA,IACAohD,MAAA,sCAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,KACAohD,MAAA,QAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,KACAohD,MAAA,OAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,IACAohD,MAAA,YAEAphD,KAAA,IACAohD,MAAA,iBAEAphD,KAAA,IACAohD,MAAA,kBAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,KACAohD,MAAA,OAEAphD,KAAA,KACAohD,MAAA,OAEAphD,KAAA,IACAohD,MAAA,oCAEAphD,KAAA,IACAohD,MAAA,WAEAphD,KAAA,IACAohD,MAAA,oBAEAphD,KAAA,IACAohD,MAAA,kBAEAphD,KAAA,IACAohD,MAAA,wBAEAphD,KAAA,IACAohD,MAAA,UAEAphD,KAAA,IACAohD,MAAA,kBAEAphD,KAAA,IACAohD,MAAA,sBAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,IACAohD,MAAA,aAEAphD,KAAA,IACAohD,MAAA,qBAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,IACAohD,MAAA,+CAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,IACAohD,MAAA,cAEAphD,KAAA,IACAohD,MAAA,UAEAphD,KAAA,IACAohD,MAAA,qBAEAphD,KAAA,IACAohD,MAAA,qBAEAphD,KAAA,IACAohD,MAAA,mBAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,IACAohD,MAAA,sCAEAphD,KAAA,IACAohD,MAAA,YAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,IACAohD,MAAA,cAEAphD,KAAA,IACAohD,MAAA,SAEAphD,KAAA,IACAohD,MAAA,mBAEAphD,KAAA,IACAohD,MAAA,kBAEAphD,KAAA,IACAohD,MAAA,wCAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,KACAohD,MAAA,QAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,KACAohD,MAAA,OAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,IACAohD,MAAA,cAEAphD,KAAA,IACAohD,MAAA,iBAEAphD,KAAA,IACAohD,MAAA,qBAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,KACAohD,MAAA,OAEAphD,KAAA,IACAohD,MAAA,kCAEAphD,KAAA,IACAohD,MAAA,SAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,MACAohD,MAAA,MAEAphD,KAAA,MACAohD,MAAA,MAEAphD,KAAA,IACAohD,MAAA,mBAEAphD,KAAA,IACAohD,MAAA,mBAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,IACAohD,MAAA,wBAEAphD,KAAA,IACAohD,MAAA,UAEAphD,KAAA,IACAohD,MAAA,kBAEAphD,KAAA,IACAohD,MAAA,wBAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,IACAohD,MAAA,YAEAphD,KAAA,IACAohD,MAAA,uBAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,IACAohD,MAAA,gDAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,IACAohD,MAAA,eAEAphD,KAAA,IACAohD,MAAA,UAEAphD,KAAA,IACAohD,MAAA,qBAEAphD,KAAA,IACAohD,MAAA,sBAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,IACAohD,MAAA,oBAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,IACAohD,MAAA,sCAEAphD,KAAA,IACAohD,MAAA,YAEAphD,KAAA,KACAohD,MAAA,MAEAphD,KAAA,IACAohD,MAAA,eAEAphD,KAAA,IACAohD,MAAA,SAEAphD,KAAA,IACAohD,MAAA,oBAEAphD,KAAA,IACAohD,MAAA,kBAIAF,KACAnoE,EAAA,EAAeA,EAAAooE,EAAA3nE,OAA4BT,GAAA,EAE3C,IADA,IAAAqoE,EAAAD,EAAApoE,GAAAqoE,MACAhiC,EAAA,EAAiBA,EAAAgiC,EAAA5nE,OAAkB4lC,GAAA,EACnC8hC,EAAAE,EAAAhiC,IAAA+hC,EAAApoE,GAAAinB,KAUAtnB,EAAAyoE,kBACAzoE,EAAAwoE","file":"tablefilter.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn "," \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1]\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n\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 \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar head = document.getElementsByTagName('head')[0];\n \t\t\t\tvar script = document.createElement('script');\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120000;\n\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = __webpack_require__.p + \"tf-\" + ({}[chunkId]||chunkId) + \"-\" + {\"0\":\"2c8620168298c5a11749\"}[chunkId] + \".js\";\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tfunction onScriptComplete(event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\tvar error = new Error('Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')');\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\thead.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 128);\n","/*\n * Sugar v2.0.4\n *\n * Freely distributable and licensed under the MIT-style license.\n * Copyright (c) Andrew Plummer\n * https://sugarjs.com/\n *\n * ---------------------------- */\n(function() {\n 'use strict';\n\n /***\n * @module Core\n * @description Core functionality including the ability to define methods and\n * extend onto natives.\n *\n ***/\n\n // The global to export.\n var Sugar;\n\n // The name of Sugar in the global namespace.\n var SUGAR_GLOBAL = 'Sugar';\n\n // Natives available on initialization. Letting Object go first to ensure its\n // global is set by the time the rest are checking for chainable Object methods.\n var NATIVE_NAMES = 'Object Number String Array Date RegExp Function';\n\n // Static method flag\n var STATIC = 0x1;\n\n // Instance method flag\n var INSTANCE = 0x2;\n\n // IE8 has a broken defineProperty but no defineProperties so this saves a try/catch.\n var PROPERTY_DESCRIPTOR_SUPPORT = !!(Object.defineProperty && Object.defineProperties);\n\n // The global context. Rhino uses a different \"global\" keyword so\n // do an extra check to be sure that it's actually the global context.\n var globalContext = typeof global !== 'undefined' && global.Object === Object ? global : this;\n\n // Is the environment node?\n var hasExports = typeof module !== 'undefined' && module.exports;\n\n // Whether object instance methods can be mapped to the prototype.\n var allowObjectPrototype = false;\n\n // A map from Array to SugarArray.\n var namespacesByName = {};\n\n // A map from [object Object] to namespace.\n var namespacesByClassString = {};\n\n // Defining properties.\n var defineProperty = PROPERTY_DESCRIPTOR_SUPPORT ? Object.defineProperty : definePropertyShim;\n\n // A default chainable class for unknown types.\n var DefaultChainable = getNewChainableClass('Chainable');\n\n\n // Global methods\n\n function setupGlobal() {\n Sugar = globalContext[SUGAR_GLOBAL];\n if (Sugar) {\n // Reuse already defined Sugar global object.\n return;\n }\n Sugar = function(arg) {\n forEachProperty(Sugar, function(sugarNamespace, name) {\n // Although only the only enumerable properties on the global\n // object are Sugar namespaces, environments that can't set\n // non-enumerable properties will step through the utility methods\n // as well here, so use this check to only allow true namespaces.\n if (hasOwn(namespacesByName, name)) {\n sugarNamespace.extend(arg);\n }\n });\n return Sugar;\n };\n if (hasExports) {\n module.exports = Sugar;\n } else {\n try {\n globalContext[SUGAR_GLOBAL] = Sugar;\n } catch (e) {\n // Contexts such as QML have a read-only global context.\n }\n }\n forEachProperty(NATIVE_NAMES.split(' '), function(name) {\n createNamespace(name);\n });\n setGlobalProperties();\n }\n\n /***\n * @method createNamespace(name)\n * @returns SugarNamespace\n * @namespace Sugar\n * @short Creates a new Sugar namespace.\n * @extra This method is for plugin developers who want to define methods to be\n * used with natives that Sugar does not handle by default. The new\n * namespace will appear on the `Sugar` global with all the methods of\n * normal namespaces, including the ability to define new methods. When\n * extended, any defined methods will be mapped to `name` in the global\n * context.\n *\n * @example\n *\n * Sugar.createNamespace('Boolean');\n *\n * @param {string} name - The namespace name.\n *\n ***/\n function createNamespace(name) {\n\n // Is the current namespace Object?\n var isObject = name === 'Object';\n\n // A Sugar namespace is also a chainable class: Sugar.Array, etc.\n var sugarNamespace = getNewChainableClass(name, true);\n\n /***\n * @method extend([opts])\n * @returns Sugar\n * @namespace Sugar\n * @short Extends Sugar defined methods onto natives.\n * @extra This method can be called on individual namespaces like\n * `Sugar.Array` or on the `Sugar` global itself, in which case\n * [opts] will be forwarded to each `extend` call. For more,\n * see `extending`.\n *\n * @options\n *\n * methods An array of method names to explicitly extend.\n *\n * except An array of method names or global namespaces (`Array`,\n * `String`) to explicitly exclude. Namespaces should be the\n * actual global objects, not strings.\n *\n * namespaces An array of global namespaces (`Array`, `String`) to\n * explicitly extend. Namespaces should be the actual\n * global objects, not strings.\n *\n * enhance A shortcut to disallow all \"enhance\" flags at once\n * (flags listed below). For more, see `enhanced methods`.\n * Default is `true`.\n *\n * enhanceString A boolean allowing String enhancements. Default is `true`.\n *\n * enhanceArray A boolean allowing Array enhancements. Default is `true`.\n *\n * objectPrototype A boolean allowing Sugar to extend Object.prototype\n * with instance methods. This option is off by default\n * and should generally not be used except with caution.\n * For more, see `object methods`.\n *\n * @example\n *\n * Sugar.Array.extend();\n * Sugar.extend();\n *\n * @option {Array} [methods]\n * @option {Array} [except]\n * @option {Array} [namespaces]\n * @option {boolean} [enhance]\n * @option {boolean} [enhanceString]\n * @option {boolean} [enhanceArray]\n * @option {boolean} [objectPrototype]\n * @param {ExtendOptions} [opts]\n *\n ***\n * @method extend([opts])\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Extends Sugar defined methods for a specific namespace onto natives.\n * @param {ExtendOptions} [opts]\n *\n ***/\n var extend = function (opts) {\n\n var nativeClass = globalContext[name], nativeProto = nativeClass.prototype;\n var staticMethods = {}, instanceMethods = {}, methodsByName;\n\n function objectRestricted(name, target) {\n return isObject && target === nativeProto &&\n (!allowObjectPrototype || name === 'get' || name === 'set');\n }\n\n function arrayOptionExists(field, val) {\n var arr = opts[field];\n if (arr) {\n for (var i = 0, el; el = arr[i]; i++) {\n if (el === val) {\n return true;\n }\n }\n }\n return false;\n }\n\n function arrayOptionExcludes(field, val) {\n return opts[field] && !arrayOptionExists(field, val);\n }\n\n function disallowedByFlags(methodName, target, flags) {\n // Disallowing methods by flag currently only applies if methods already\n // exist to avoid enhancing native methods, as aliases should still be\n // extended (i.e. Array#all should still be extended even if Array#every\n // is being disallowed by a flag).\n if (!target[methodName] || !flags) {\n return false;\n }\n for (var i = 0; i < flags.length; i++) {\n if (opts[flags[i]] === false) {\n return true;\n }\n }\n }\n\n function namespaceIsExcepted() {\n return arrayOptionExists('except', nativeClass) ||\n arrayOptionExcludes('namespaces', nativeClass);\n }\n\n function methodIsExcepted(methodName) {\n return arrayOptionExists('except', methodName);\n }\n\n function canExtend(methodName, method, target) {\n return !objectRestricted(methodName, target) &&\n !disallowedByFlags(methodName, target, method.flags) &&\n !methodIsExcepted(methodName);\n }\n\n opts = opts || {};\n methodsByName = opts.methods;\n\n if (namespaceIsExcepted()) {\n return;\n } else if (isObject && typeof opts.objectPrototype === 'boolean') {\n // Store \"objectPrototype\" flag for future reference.\n allowObjectPrototype = opts.objectPrototype;\n }\n\n forEachProperty(methodsByName || sugarNamespace, function(method, methodName) {\n if (methodsByName) {\n // If we have method names passed in an array,\n // then we need to flip the key and value here\n // and find the method in the Sugar namespace.\n methodName = method;\n method = sugarNamespace[methodName];\n }\n if (hasOwn(method, 'instance') && canExtend(methodName, method, nativeProto)) {\n instanceMethods[methodName] = method.instance;\n }\n if(hasOwn(method, 'static') && canExtend(methodName, method, nativeClass)) {\n staticMethods[methodName] = method;\n }\n });\n\n // Accessing the extend target each time instead of holding a reference as\n // it may have been overwritten (for example Date by Sinon). Also need to\n // access through the global to allow extension of user-defined namespaces.\n extendNative(nativeClass, staticMethods);\n extendNative(nativeProto, instanceMethods);\n\n if (!methodsByName) {\n // If there are no method names passed, then\n // all methods in the namespace will be extended\n // to the native. This includes all future defined\n // methods, so add a flag here to check later.\n setProperty(sugarNamespace, 'active', true);\n }\n return sugarNamespace;\n };\n\n function defineWithOptionCollect(methodName, instance, args) {\n setProperty(sugarNamespace, methodName, function(arg1, arg2, arg3) {\n var opts = collectDefineOptions(arg1, arg2, arg3);\n defineMethods(sugarNamespace, opts.methods, instance, args, opts.last);\n return sugarNamespace;\n });\n }\n\n /***\n * @method defineStatic(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines static methods on the namespace that can later be extended\n * onto the native globals.\n * @extra Accepts either a single object mapping names to functions, or name\n * and function as two arguments. If `extend` was previously called\n * with no arguments, the method will be immediately mapped to its\n * native when defined.\n *\n * @example\n *\n * Sugar.Number.defineStatic({\n * isOdd: function (num) {\n * return num % 2 === 1;\n * }\n * });\n *\n * @signature defineStatic(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineStatic', STATIC);\n\n /***\n * @method defineInstance(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines methods on the namespace that can later be extended as\n * instance methods onto the native prototype.\n * @extra Accepts either a single object mapping names to functions, or name\n * and function as two arguments. All functions should accept the\n * native for which they are mapped as their first argument, and should\n * never refer to `this`. If `extend` was previously called with no\n * arguments, the method will be immediately mapped to its native when\n * defined.\n *\n * Methods cannot accept more than 4 arguments in addition to the\n * native (5 arguments total). Any additional arguments will not be\n * mapped. If the method needs to accept unlimited arguments, use\n * `defineInstanceWithArguments`. Otherwise if more options are\n * required, use an options object instead.\n *\n * @example\n *\n * Sugar.Number.defineInstance({\n * square: function (num) {\n * return num * num;\n * }\n * });\n *\n * @signature defineInstance(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineInstance', INSTANCE);\n\n /***\n * @method defineInstanceAndStatic(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short A shortcut to define both static and instance methods on the namespace.\n * @extra This method is intended for use with `Object` instance methods. Sugar\n * will not map any methods to `Object.prototype` by default, so defining\n * instance methods as static helps facilitate their proper use.\n *\n * @example\n *\n * Sugar.Object.defineInstanceAndStatic({\n * isAwesome: function (obj) {\n * // check if obj is awesome!\n * }\n * });\n *\n * @signature defineInstanceAndStatic(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineInstanceAndStatic', INSTANCE | STATIC);\n\n\n /***\n * @method defineStaticWithArguments(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines static methods that collect arguments.\n * @extra This method is identical to `defineStatic`, except that when defined\n * methods are called, they will collect any arguments past `n - 1`,\n * where `n` is the number of arguments that the method accepts.\n * Collected arguments will be passed to the method in an array\n * as the last argument defined on the function.\n *\n * @example\n *\n * Sugar.Number.defineStaticWithArguments({\n * addAll: function (num, args) {\n * for (var i = 0; i < args.length; i++) {\n * num += args[i];\n * }\n * return num;\n * }\n * });\n *\n * @signature defineStaticWithArguments(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineStaticWithArguments', STATIC, true);\n\n /***\n * @method defineInstanceWithArguments(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines instance methods that collect arguments.\n * @extra This method is identical to `defineInstance`, except that when\n * defined methods are called, they will collect any arguments past\n * `n - 1`, where `n` is the number of arguments that the method\n * accepts. Collected arguments will be passed to the method as the\n * last argument defined on the function.\n *\n * @example\n *\n * Sugar.Number.defineInstanceWithArguments({\n * addAll: function (num, args) {\n * for (var i = 0; i < args.length; i++) {\n * num += args[i];\n * }\n * return num;\n * }\n * });\n *\n * @signature defineInstanceWithArguments(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineInstanceWithArguments', INSTANCE, true);\n\n /***\n * @method defineStaticPolyfill(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines static methods that are mapped onto the native if they do\n * not already exist.\n * @extra Intended only for use creating polyfills that follow the ECMAScript\n * spec. Accepts either a single object mapping names to functions, or\n * name and function as two arguments.\n *\n * @example\n *\n * Sugar.Object.defineStaticPolyfill({\n * keys: function (obj) {\n * // get keys!\n * }\n * });\n *\n * @signature defineStaticPolyfill(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n setProperty(sugarNamespace, 'defineStaticPolyfill', function(arg1, arg2, arg3) {\n var opts = collectDefineOptions(arg1, arg2, arg3);\n extendNative(globalContext[name], opts.methods, true, opts.last);\n return sugarNamespace;\n });\n\n /***\n * @method defineInstancePolyfill(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines instance methods that are mapped onto the native prototype\n * if they do not already exist.\n * @extra Intended only for use creating polyfills that follow the ECMAScript\n * spec. Accepts either a single object mapping names to functions, or\n * name and function as two arguments. This method differs from\n * `defineInstance` as there is no static signature (as the method\n * is mapped as-is to the native), so it should refer to its `this`\n * object.\n *\n * @example\n *\n * Sugar.Array.defineInstancePolyfill({\n * indexOf: function (arr, el) {\n * // index finding code here!\n * }\n * });\n *\n * @signature defineInstancePolyfill(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n setProperty(sugarNamespace, 'defineInstancePolyfill', function(arg1, arg2, arg3) {\n var opts = collectDefineOptions(arg1, arg2, arg3);\n extendNative(globalContext[name].prototype, opts.methods, true, opts.last);\n // Map instance polyfills to chainable as well.\n forEachProperty(opts.methods, function(fn, methodName) {\n defineChainableMethod(sugarNamespace, methodName, fn);\n });\n return sugarNamespace;\n });\n\n /***\n * @method alias(toName, from)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Aliases one Sugar method to another.\n *\n * @example\n *\n * Sugar.Array.alias('all', 'every');\n *\n * @signature alias(toName, fn)\n * @param {string} toName - Name for new method.\n * @param {string|Function} from - Method to alias, or string shortcut.\n ***/\n setProperty(sugarNamespace, 'alias', function(name, source) {\n var method = typeof source === 'string' ? sugarNamespace[source] : source;\n setMethod(sugarNamespace, name, method);\n return sugarNamespace;\n });\n\n // Each namespace can extend only itself through its .extend method.\n setProperty(sugarNamespace, 'extend', extend);\n\n // Cache the class to namespace relationship for later use.\n namespacesByName[name] = sugarNamespace;\n namespacesByClassString['[object ' + name + ']'] = sugarNamespace;\n\n mapNativeToChainable(name);\n mapObjectChainablesToNamespace(sugarNamespace);\n\n\n // Export\n return Sugar[name] = sugarNamespace;\n }\n\n function setGlobalProperties() {\n setProperty(Sugar, 'extend', Sugar);\n setProperty(Sugar, 'toString', toString);\n setProperty(Sugar, 'createNamespace', createNamespace);\n\n setProperty(Sugar, 'util', {\n 'hasOwn': hasOwn,\n 'getOwn': getOwn,\n 'setProperty': setProperty,\n 'classToString': classToString,\n 'defineProperty': defineProperty,\n 'forEachProperty': forEachProperty,\n 'mapNativeToChainable': mapNativeToChainable\n });\n }\n\n function toString() {\n return SUGAR_GLOBAL;\n }\n\n\n // Defining Methods\n\n function defineMethods(sugarNamespace, methods, type, args, flags) {\n forEachProperty(methods, function(method, methodName) {\n var instanceMethod, staticMethod = method;\n if (args) {\n staticMethod = wrapMethodWithArguments(method);\n }\n if (flags) {\n staticMethod.flags = flags;\n }\n\n // A method may define its own custom implementation, so\n // make sure that's not the case before creating one.\n if (type & INSTANCE && !method.instance) {\n instanceMethod = wrapInstanceMethod(method, args);\n setProperty(staticMethod, 'instance', instanceMethod);\n }\n\n if (type & STATIC) {\n setProperty(staticMethod, 'static', true);\n }\n\n setMethod(sugarNamespace, methodName, staticMethod);\n\n if (sugarNamespace.active) {\n // If the namespace has been activated (.extend has been called),\n // then map this method as well.\n sugarNamespace.extend(methodName);\n }\n });\n }\n\n function collectDefineOptions(arg1, arg2, arg3) {\n var methods, last;\n if (typeof arg1 === 'string') {\n methods = {};\n methods[arg1] = arg2;\n last = arg3;\n } else {\n methods = arg1;\n last = arg2;\n }\n return {\n last: last,\n methods: methods\n };\n }\n\n function wrapInstanceMethod(fn, args) {\n return args ? wrapMethodWithArguments(fn, true) : wrapInstanceMethodFixed(fn);\n }\n\n function wrapMethodWithArguments(fn, instance) {\n // Functions accepting enumerated arguments will always have \"args\" as the\n // last argument, so subtract one from the function length to get the point\n // at which to start collecting arguments. If this is an instance method on\n // a prototype, then \"this\" will be pushed into the arguments array so start\n // collecting 1 argument earlier.\n var startCollect = fn.length - 1 - (instance ? 1 : 0);\n return function() {\n var args = [], collectedArgs = [], len;\n if (instance) {\n args.push(this);\n }\n len = Math.max(arguments.length, startCollect);\n // Optimized: no leaking arguments\n for (var i = 0; i < len; i++) {\n if (i < startCollect) {\n args.push(arguments[i]);\n } else {\n collectedArgs.push(arguments[i]);\n }\n }\n args.push(collectedArgs);\n return fn.apply(this, args);\n };\n }\n\n function wrapInstanceMethodFixed(fn) {\n switch(fn.length) {\n // Wrapped instance methods will always be passed the instance\n // as the first argument, but requiring the argument to be defined\n // may cause confusion here, so return the same wrapped function regardless.\n case 0:\n case 1:\n return function() {\n return fn(this);\n };\n case 2:\n return function(a) {\n return fn(this, a);\n };\n case 3:\n return function(a, b) {\n return fn(this, a, b);\n };\n case 4:\n return function(a, b, c) {\n return fn(this, a, b, c);\n };\n case 5:\n return function(a, b, c, d) {\n return fn(this, a, b, c, d);\n };\n }\n }\n\n // Method helpers\n\n function extendNative(target, source, polyfill, override) {\n forEachProperty(source, function(method, name) {\n if (polyfill && !override && target[name]) {\n // Method exists, so bail.\n return;\n }\n setProperty(target, name, method);\n });\n }\n\n function setMethod(sugarNamespace, methodName, method) {\n sugarNamespace[methodName] = method;\n if (method.instance) {\n defineChainableMethod(sugarNamespace, methodName, method.instance, true);\n }\n }\n\n\n // Chainables\n\n function getNewChainableClass(name) {\n var fn = function SugarChainable(obj, arg) {\n if (!(this instanceof fn)) {\n return new fn(obj, arg);\n }\n if (this.constructor !== fn) {\n // Allow modules to define their own constructors.\n obj = this.constructor.apply(obj, arguments);\n }\n this.raw = obj;\n };\n setProperty(fn, 'toString', function() {\n return SUGAR_GLOBAL + name;\n });\n setProperty(fn.prototype, 'valueOf', function() {\n return this.raw;\n });\n return fn;\n }\n\n function defineChainableMethod(sugarNamespace, methodName, fn) {\n var wrapped = wrapWithChainableResult(fn), existing, collision, dcp;\n dcp = DefaultChainable.prototype;\n existing = dcp[methodName];\n\n // If the method was previously defined on the default chainable, then a\n // collision exists, so set the method to a disambiguation function that will\n // lazily evaluate the object and find it's associated chainable. An extra\n // check is required to avoid false positives from Object inherited methods.\n collision = existing && existing !== Object.prototype[methodName];\n\n // The disambiguation function is only required once.\n if (!existing || !existing.disambiguate) {\n dcp[methodName] = collision ? disambiguateMethod(methodName) : wrapped;\n }\n\n // The target chainable always receives the wrapped method. Additionally,\n // if the target chainable is Sugar.Object, then map the wrapped method\n // to all other namespaces as well if they do not define their own method\n // of the same name. This way, a Sugar.Number will have methods like\n // isEqual that can be called on any object without having to traverse up\n // the prototype chain and perform disambiguation, which costs cycles.\n // Note that the \"if\" block below actually does nothing on init as Object\n // goes first and no other namespaces exist yet. However it needs to be\n // here as Object instance methods defined later also need to be mapped\n // back onto existing namespaces.\n sugarNamespace.prototype[methodName] = wrapped;\n if (sugarNamespace === Sugar.Object) {\n mapObjectChainableToAllNamespaces(methodName, wrapped);\n }\n }\n\n function mapObjectChainablesToNamespace(sugarNamespace) {\n forEachProperty(Sugar.Object && Sugar.Object.prototype, function(val, methodName) {\n if (typeof val === 'function') {\n setObjectChainableOnNamespace(sugarNamespace, methodName, val);\n }\n });\n }\n\n function mapObjectChainableToAllNamespaces(methodName, fn) {\n forEachProperty(namespacesByName, function(sugarNamespace) {\n setObjectChainableOnNamespace(sugarNamespace, methodName, fn);\n });\n }\n\n function setObjectChainableOnNamespace(sugarNamespace, methodName, fn) {\n var proto = sugarNamespace.prototype;\n if (!hasOwn(proto, methodName)) {\n proto[methodName] = fn;\n }\n }\n\n function wrapWithChainableResult(fn) {\n return function() {\n return new DefaultChainable(fn.apply(this.raw, arguments));\n };\n }\n\n function disambiguateMethod(methodName) {\n var fn = function() {\n var raw = this.raw, sugarNamespace, fn;\n if (raw != null) {\n // Find the Sugar namespace for this unknown.\n sugarNamespace = namespacesByClassString[classToString(raw)];\n }\n if (!sugarNamespace) {\n // If no sugarNamespace can be resolved, then default\n // back to Sugar.Object so that undefined and other\n // non-supported types can still have basic object\n // methods called on them, such as type checks.\n sugarNamespace = Sugar.Object;\n }\n\n fn = new sugarNamespace(raw)[methodName];\n\n if (fn.disambiguate) {\n // If the method about to be called on this chainable is\n // itself a disambiguation method, then throw an error to\n // prevent infinite recursion.\n throw new TypeError('Cannot resolve namespace for ' + raw);\n }\n\n return fn.apply(this, arguments);\n };\n fn.disambiguate = true;\n return fn;\n }\n\n function mapNativeToChainable(name, methodNames) {\n var sugarNamespace = namespacesByName[name],\n nativeProto = globalContext[name].prototype;\n\n if (!methodNames && ownPropertyNames) {\n methodNames = ownPropertyNames(nativeProto);\n }\n\n forEachProperty(methodNames, function(methodName) {\n if (nativeMethodProhibited(methodName)) {\n // Sugar chainables have their own constructors as well as \"valueOf\"\n // methods, so exclude them here. The __proto__ argument should be trapped\n // by the function check below, however simply accessing this property on\n // Object.prototype causes QML to segfault, so pre-emptively excluding it.\n return;\n }\n try {\n var fn = nativeProto[methodName];\n if (typeof fn !== 'function') {\n // Bail on anything not a function.\n return;\n }\n } catch (e) {\n // Function.prototype has properties that\n // will throw errors when accessed.\n return;\n }\n defineChainableMethod(sugarNamespace, methodName, fn);\n });\n }\n\n function nativeMethodProhibited(methodName) {\n return methodName === 'constructor' ||\n methodName === 'valueOf' ||\n methodName === '__proto__';\n }\n\n\n // Util\n\n // Internal references\n var ownPropertyNames = Object.getOwnPropertyNames,\n internalToString = Object.prototype.toString,\n internalHasOwnProperty = Object.prototype.hasOwnProperty;\n\n // Defining this as a variable here as the ES5 module\n // overwrites it to patch DONTENUM.\n var forEachProperty = function (obj, fn) {\n for(var key in obj) {\n if (!hasOwn(obj, key)) continue;\n if (fn.call(obj, obj[key], key, obj) === false) break;\n }\n };\n\n function definePropertyShim(obj, prop, descriptor) {\n obj[prop] = descriptor.value;\n }\n\n function setProperty(target, name, value, enumerable) {\n defineProperty(target, name, {\n value: value,\n enumerable: !!enumerable,\n configurable: true,\n writable: true\n });\n }\n\n // PERF: Attempts to speed this method up get very Heisenbergy. Quickly\n // returning based on typeof works for primitives, but slows down object\n // types. Even === checks on null and undefined (no typeof) will end up\n // basically breaking even. This seems to be as fast as it can go.\n function classToString(obj) {\n return internalToString.call(obj);\n }\n\n function hasOwn(obj, prop) {\n return !!obj && internalHasOwnProperty.call(obj, prop);\n }\n\n function getOwn(obj, prop) {\n if (hasOwn(obj, prop)) {\n return obj[prop];\n }\n }\n\n setupGlobal();\n\n}).call(this);","'use strict';\n\nvar buildNumberUnitMethods = require('../internal/buildNumberUnitMethods');\n\nbuildNumberUnitMethods();","'use strict';\n\nvar buildDateUnitMethods = require('../internal/buildDateUnitMethods');\n\nbuildDateUnitMethods();","\r\n/**\r\n * Types utilities\r\n */\r\n\r\nconst UNDEFINED = void 0;\r\n\r\n/**\r\n * Return an empty function\r\n * @return {Function}\r\n */\r\nexport const EMPTY_FN = function() {};\r\n\r\n/**\r\n * Check passed argument is an object\r\n * @param {Object} obj\r\n * @return {Boolean}\r\n */\r\nexport const isObj =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Object]';\r\n\r\n/**\r\n * Check passed argument is a function\r\n * @param {Function} obj\r\n * @return {Boolean}\r\n */\r\nexport const isFn =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Function]';\r\n\r\n/**\r\n * Check passed argument is an array\r\n * @param {Array} obj\r\n * @return {Boolean}\r\n */\r\nexport const isArray =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Array]';\r\n\r\n/**\r\n * Check passed argument is a string\r\n * @param {String} obj obj\r\n * @returns {Boolean}\r\n */\r\nexport const isString =\r\n (obj) => Object.prototype.toString.call(obj) === '[object String]';\r\n\r\n/**\r\n * Check passed argument is a number\r\n * @param {Number} obj\r\n * @returns {Boolean}\r\n */\r\nexport const isNumber =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Number]';\r\n\r\n/**\r\n * Check passed argument is a boolean\r\n * @param {Boolean} obj\r\n * @returns {Boolean}\r\n */\r\nexport const isBoolean =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Boolean]';\r\n\r\n/**\r\n * Check passed argument is undefined\r\n * @param {Any} obj\r\n * @return {Boolean}\r\n */\r\nexport const isUndef = (obj) => obj === UNDEFINED;\r\n\r\n/**\r\n * Check passed argument is null\r\n * @param {Any} obj\r\n * @return {Boolean}\r\n */\r\nexport const isNull = (obj) => obj === null;\r\n\r\n/**\r\n * Check passed argument is empty (undefined, null or empty string)\r\n * @param {Any} obj\r\n * @return {Boolean}\r\n */\r\nexport const isEmpty = (obj) => isUndef(obj) || isNull(obj) || obj.length === 0;\r\n","'use strict';\n\nmodule.exports = {\n HOURS_INDEX: 3,\n DAY_INDEX: 4,\n WEEK_INDEX: 5,\n MONTH_INDEX: 6,\n YEAR_INDEX: 7\n};","'use strict';\n\nvar NATIVE_TYPES = require('./NATIVE_TYPES'),\n forEach = require('../internal/forEach'),\n isClass = require('../internal/isClass'),\n spaceSplit = require('../internal/spaceSplit'),\n isPlainObject = require('../internal/isPlainObject'),\n coreUtilityAliases = require('./coreUtilityAliases');\n\nvar classToString = coreUtilityAliases.classToString;\n\nvar isSerializable,\n isBoolean, isNumber, isString,\n isDate, isRegExp, isFunction,\n isArray, isSet, isMap, isError;\n\nfunction buildClassChecks() {\n\n var knownTypes = {};\n\n function addCoreTypes() {\n\n var names = spaceSplit(NATIVE_TYPES);\n\n isBoolean = buildPrimitiveClassCheck(names[0]);\n isNumber = buildPrimitiveClassCheck(names[1]);\n isString = buildPrimitiveClassCheck(names[2]);\n\n isDate = buildClassCheck(names[3]);\n isRegExp = buildClassCheck(names[4]);\n\n // Wanted to enhance performance here by using simply \"typeof\"\n // but Firefox has two major issues that make this impossible,\n // one fixed, the other not, so perform a full class check here.\n //\n // 1. Regexes can be typeof \"function\" in FF < 3\n // https://bugzilla.mozilla.org/show_bug.cgi?id=61911 (fixed)\n //\n // 2. HTMLEmbedElement and HTMLObjectElement are be typeof \"function\"\n // https://bugzilla.mozilla.org/show_bug.cgi?id=268945 (won't fix)\n isFunction = buildClassCheck(names[5]);\n\n\n isArray = Array.isArray || buildClassCheck(names[6]);\n isError = buildClassCheck(names[7]);\n\n isSet = buildClassCheck(names[8], typeof Set !== 'undefined' && Set);\n isMap = buildClassCheck(names[9], typeof Map !== 'undefined' && Map);\n\n // Add core types as known so that they can be checked by value below,\n // notably excluding Functions and adding Arguments and Error.\n addKnownType('Arguments');\n addKnownType(names[0]);\n addKnownType(names[1]);\n addKnownType(names[2]);\n addKnownType(names[3]);\n addKnownType(names[4]);\n addKnownType(names[6]);\n\n }\n\n function addArrayTypes() {\n var types = 'Int8 Uint8 Uint8Clamped Int16 Uint16 Int32 Uint32 Float32 Float64';\n forEach(spaceSplit(types), function(str) {\n addKnownType(str + 'Array');\n });\n }\n\n function addKnownType(className) {\n var str = '[object '+ className +']';\n knownTypes[str] = true;\n }\n\n function isKnownType(className) {\n return knownTypes[className];\n }\n\n function buildClassCheck(className, globalObject) {\n if (globalObject && isClass(new globalObject, 'Object')) {\n return getConstructorClassCheck(globalObject);\n } else {\n return getToStringClassCheck(className);\n }\n }\n\n function getConstructorClassCheck(obj) {\n var ctorStr = String(obj);\n return function(obj) {\n return String(obj.constructor) === ctorStr;\n };\n }\n\n function getToStringClassCheck(className) {\n return function(obj, str) {\n // perf: Returning up front on instanceof appears to be slower.\n return isClass(obj, className, str);\n };\n }\n\n function buildPrimitiveClassCheck(className) {\n var type = className.toLowerCase();\n return function(obj) {\n var t = typeof obj;\n return t === type || t === 'object' && isClass(obj, className);\n };\n }\n\n addCoreTypes();\n addArrayTypes();\n\n isSerializable = function(obj, className) {\n // Only known objects can be serialized. This notably excludes functions,\n // host objects, Symbols (which are matched by reference), and instances\n // of classes. The latter can arguably be matched by value, but\n // distinguishing between these and host objects -- which should never be\n // compared by value -- is very tricky so not dealing with it here.\n className = className || classToString(obj);\n return isKnownType(className) || isPlainObject(obj, className);\n };\n\n}\n\nbuildClassChecks();\n\nmodule.exports = {\n isSerializable: isSerializable,\n isBoolean: isBoolean,\n isNumber: isNumber,\n isString: isString,\n isDate: isDate,\n isRegExp: isRegExp,\n isFunction: isFunction,\n isArray: isArray,\n isSet: isSet,\n isMap: isMap,\n isError: isError\n};","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'addLocale': function(code, set) {\n return localeManager.add(code, set);\n }\n\n});\n\nmodule.exports = Sugar.Date.addLocale;","import {isBoolean, isString, isFn, isArray} from './types';\r\n\r\n/** Configuration settings helpers */\r\n\r\n/**\r\n * If passed value is not of boolean type return the default value\r\n * otherwise return the value itself\r\n * @param {Boolean|Any} value\r\n * @param {Boolean} default value\r\n * @return {Boolean|Any}\r\n */\r\nexport const defaultsBool =\r\n (val, defaultVal) => isBoolean(val) ? val : defaultVal;\r\n\r\n/**\r\n * If passed value is not of string type return the default value\r\n * otherwise return the value itself\r\n * @param {String|Any} value\r\n * @param {String} default value\r\n * @return {String|Any}\r\n */\r\nexport const defaultsStr =\r\n (val, defaultVal) => isString(val) ? val : defaultVal;\r\n\r\n/**\r\n * If passed value is not of number type return the default value\r\n * otherwise return the value itself\r\n * @param {Number|Any} value\r\n * @param {Number} default value\r\n * @return {Number|Any}\r\n */\r\nexport const defaultsNb =\r\n (val, defaultVal) => isNaN(val) ? defaultVal : val;\r\n\r\n/**\r\n * If passed value is not of array type return the default value\r\n * otherwise return the value itself\r\n * @param {Array|Any} value\r\n * @param {Array} default value\r\n * @return {Array|Any}\r\n */\r\nexport const defaultsArr =\r\n (val, defaultVal) => isArray(val) ? val : defaultVal;\r\n\r\n/**\r\n * If passed value is not of function type return the default value\r\n * otherwise return the value itself\r\n * @param {Function|Any} value\r\n * @param {Function} default value\r\n * @return {Function|Any}\r\n */\r\nexport const defaultsFn =\r\n (val, defaultVal) => isFn(val) ? val : defaultVal;\r\n","'use strict';\n\nmodule.exports = {\n abs: Math.abs,\n pow: Math.pow,\n min: Math.min,\n max: Math.max,\n ceil: Math.ceil,\n floor: Math.floor,\n round: Math.round\n};","'use strict';\n\nvar LazyLoadedLocales = require('./LazyLoadedLocales'),\n AmericanEnglishDefinition = require('./AmericanEnglishDefinition'),\n getNewLocale = require('../internal/getNewLocale');\n\nvar English, localeManager;\n\nfunction buildLocales() {\n\n function LocaleManager(loc) {\n this.locales = {};\n this.add(loc);\n }\n\n LocaleManager.prototype = {\n\n get: function(code, fallback) {\n var loc = this.locales[code];\n if (!loc && LazyLoadedLocales[code]) {\n loc = this.add(code, LazyLoadedLocales[code]);\n } else if (!loc && code) {\n loc = this.locales[code.slice(0, 2)];\n }\n return loc || fallback === false ? loc : this.current;\n },\n\n getAll: function() {\n return this.locales;\n },\n\n set: function(code) {\n var loc = this.get(code, false);\n if (!loc) {\n throw new TypeError('Invalid Locale: ' + code);\n }\n return this.current = loc;\n },\n\n add: function(code, def) {\n if (!def) {\n def = code;\n code = def.code;\n } else {\n def.code = code;\n }\n var loc = def.compiledFormats ? def : getNewLocale(def);\n this.locales[code] = loc;\n if (!this.current) {\n this.current = loc;\n }\n return loc;\n },\n\n remove: function(code) {\n if (this.current.code === code) {\n this.current = this.get('en');\n }\n return delete this.locales[code];\n }\n\n };\n\n // Sorry about this guys...\n English = getNewLocale(AmericanEnglishDefinition);\n localeManager = new LocaleManager(English);\n}\n\nbuildLocales();\n\nmodule.exports = {\n English: English,\n localeManager: localeManager\n};","import {root} from './root';\r\nimport {isArray, isString, isUndef} from './types';\r\nimport {trim} from './string';\r\n\r\n/**\r\n * DOM utilities\r\n */\r\n\r\nconst doc = root.document;\r\n\r\n/**\r\n * Returns text + text of children of given node\r\n * @param {NodeElement} node\r\n * @return {String}\r\n */\r\nexport const getText = (node) => {\r\n if (isUndef(node.textContent)) {\r\n return trim(node.innerText);\r\n }\r\n return trim(node.textContent);\r\n};\r\n\r\n/**\r\n * Returns the first text node contained in the supplied node\r\n * @param {NodeElement} node node\r\n * @return {String}\r\n */\r\nexport const getFirstTextNode = (node) => {\r\n for (let i = 0; i < node.childNodes.length; i++) {\r\n let n = node.childNodes[i];\r\n if (n.nodeType === 3) {\r\n return n.data;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Creates an html element with given collection of attributes\r\n * @param {String} tag a string of the html tag to create\r\n * @param {Array} an undetermined number of arrays containing the with 2\r\n * items, the attribute name and its value ['id','myId']\r\n * @return {Object} created element\r\n */\r\nexport const createElm = (...args) => {\r\n let tag = args[0];\r\n if (!isString(tag)) {\r\n return null;\r\n }\r\n\r\n let el = doc.createElement(tag);\r\n for (let i = 0; i < args.length; i++) {\r\n let arg = args[i];\r\n\r\n if (isArray(arg) && arg.length === 2) {\r\n el.setAttribute(arg[0], arg[1]);\r\n }\r\n }\r\n return el;\r\n};\r\n\r\n/**\r\n * Removes passed node from DOM\r\n * @param {DOMElement} node\r\n * @return {DOMElement} old node reference\r\n */\r\nexport const removeElm = (node) => node.parentNode.removeChild(node);\r\n\r\n/**\r\n * Returns a text node with given text\r\n * @param {String} txt\r\n * @return {Object}\r\n */\r\nexport const createText = (txt) => doc.createTextNode(txt);\r\n\r\n/**\r\n * Determine whether the passed elements is assigned the given class\r\n * @param {DOMElement} ele DOM element\r\n * @param {String} cls CSS class name\r\n * @returns {Boolean}\r\n */\r\nexport const hasClass = (ele, cls) => {\r\n if (isUndef(ele)) {\r\n return false;\r\n }\r\n\r\n if (supportsClassList()) {\r\n return ele.classList.contains(cls);\r\n }\r\n return ele.className.match(new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)'));\r\n};\r\n\r\n/**\r\n * Adds the specified class to the passed element\r\n * @param {DOMElement} ele DOM element\r\n * @param {String} cls CSS class name\r\n */\r\nexport const addClass = (ele, cls) => {\r\n if (isUndef(ele)) {\r\n return;\r\n }\r\n\r\n if (supportsClassList()) {\r\n ele.classList.add(cls);\r\n return;\r\n }\r\n\r\n if (ele.className === '') {\r\n ele.className = cls;\r\n }\r\n else if (!hasClass(ele, cls)) {\r\n ele.className += ' ' + cls;\r\n }\r\n};\r\n\r\n/**\r\n * Removes the specified class to the passed element\r\n * @param {DOMElement} ele DOM element\r\n * @param {String} cls CSS class name\r\n */\r\nexport const removeClass = (ele, cls) => {\r\n if (isUndef(ele)) {\r\n return;\r\n }\r\n\r\n if (supportsClassList()) {\r\n ele.classList.remove(cls);\r\n return;\r\n }\r\n let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)', 'g');\r\n ele.className = ele.className.replace(reg, '');\r\n};\r\n\r\n/**\r\n * Creates and returns an option element\r\n * @param {String} text option text\r\n * @param {String} value option value\r\n * @param {Boolean} isSel whether option is selected\r\n * @return {Object} option element\r\n */\r\nexport const createOpt = (text, value, isSel) => {\r\n let isSelected = isSel ? true : false;\r\n let opt = isSelected ?\r\n createElm('option', ['value', value], ['selected', 'true']) :\r\n createElm('option', ['value', value]);\r\n opt.appendChild(createText(text));\r\n return opt;\r\n};\r\n\r\n/**\r\n * Creates and returns a checklist item\r\n * @param {String} id index of check item\r\n * @param {String} chkValue check item value\r\n * @param {String} labelText check item label text\r\n * @param {Array} extraAttr array containing attribute name and its value\r\n * @return {Object} li DOM element\r\n */\r\nexport const createCheckItem = (id, chkValue, labelText, extraAttr = []) => {\r\n let li = createElm('li');\r\n let label = createElm('label', ['for', id]);\r\n let check = createElm('input',\r\n ['id', id],\r\n ['name', id],\r\n ['type', 'checkbox'],\r\n ['value', chkValue],\r\n extraAttr\r\n );\r\n label.appendChild(check);\r\n label.appendChild(createText(labelText));\r\n li.appendChild(label);\r\n li.label = label;\r\n li.check = check;\r\n return li;\r\n};\r\n\r\n/**\r\n * Returns the element matching the supplied Id\r\n * @param {String} id Element identifier\r\n * @return {DOMElement}\r\n */\r\nexport const elm = (id) => doc.getElementById(id);\r\n\r\n/**\r\n * Returns list of element matching the supplied tag name\r\n * @param {String} tagname Tag name\r\n * @return {NodeList}\r\n */\r\nexport const tag = (o, tagname) => o.getElementsByTagName(tagname);\r\n\r\n// HTML5 classList API\r\nfunction supportsClassList() {\r\n return doc.documentElement.classList;\r\n}\r\n","\r\nconst NOT_IMPLEMENTED = 'Not implemented.';\r\n\r\n/**\r\n * Base class defining the interface of a TableFilter feature\r\n */\r\nexport class Feature {\r\n /**\r\n * Creates an instance of Feature\r\n * @param {Object} tf TableFilter instance\r\n * @param {String} feature Feature name known by TableFilter\r\n */\r\n constructor(tf, feature) {\r\n /**\r\n * TableFilter instance\r\n * @type {TableFilter}\r\n */\r\n this.tf = tf;\r\n\r\n /**\r\n * Feature name\r\n * @type {String}\r\n */\r\n this.feature = feature;\r\n\r\n /**\r\n * TableFilter feature setting\r\n * @type {Boolean}\r\n */\r\n this.enabled = tf[feature];\r\n\r\n /**\r\n * TableFilter configuration\r\n * @type {Object}\r\n */\r\n this.config = tf.config();\r\n\r\n /**\r\n * TableFilter emitter instance\r\n * @type {Emitter}\r\n */\r\n this.emitter = tf.emitter;\r\n\r\n /**\r\n * Field indicating whether Feature is initialized\r\n * @type {Boolean}\r\n */\r\n this.initialized = false;\r\n\r\n /** Subscribe to destroy event */\r\n this.emitter.on(['destroy'], () => this.destroy());\r\n }\r\n\r\n /**\r\n * Initialize the feature\r\n */\r\n init() {\r\n throw new Error(NOT_IMPLEMENTED);\r\n }\r\n\r\n /**\r\n * Reset the feature after being disabled\r\n */\r\n reset() {\r\n this.enable();\r\n this.init();\r\n }\r\n\r\n /**\r\n * Destroy the feature\r\n */\r\n destroy() {\r\n throw new Error(NOT_IMPLEMENTED);\r\n }\r\n\r\n /**\r\n * Enable the feature\r\n */\r\n enable() {\r\n this.enabled = true;\r\n }\r\n\r\n /**\r\n * Disable the feature\r\n */\r\n disable() {\r\n this.enabled = false;\r\n }\r\n\r\n /**\r\n * Indicate whether the feature is enabled or not\r\n * @returns {Boolean}\r\n */\r\n isEnabled() {\r\n return this.enabled === true;\r\n }\r\n}\r\n","'use strict';\n\nvar Sugar = require('sugar-core');\n\nmodule.exports = {\n hasOwn: Sugar.util.hasOwn,\n getOwn: Sugar.util.getOwn,\n setProperty: Sugar.util.setProperty,\n classToString: Sugar.util.classToString,\n defineProperty: Sugar.util.defineProperty,\n forEachProperty: Sugar.util.forEachProperty,\n mapNativeToChainable: Sugar.util.mapNativeToChainable\n};","'use strict';\n\nvar buildRelativeAliases = require('../internal/buildRelativeAliases');\n\nbuildRelativeAliases();","'use strict';\n\nvar cloneRangeMember = require('./cloneRangeMember');\n\nfunction Range(start, end) {\n this.start = cloneRangeMember(start);\n this.end = cloneRangeMember(end);\n}\n\nmodule.exports = Range;","import {DateType} from './modules/dateType';\r\nimport {Help} from './modules/help';\r\nimport {State} from './modules/state';\r\nimport {GridLayout} from './modules/gridLayout';\r\nimport {Loader} from './modules/loader';\r\nimport {HighlightKeyword} from './modules/highlightKeywords';\r\nimport {PopupFilter} from './modules/popupFilter';\r\nimport {MarkActiveColumns} from './modules/markActiveColumns';\r\nimport {RowsCounter} from './modules/rowsCounter';\r\nimport {StatusBar} from './modules/statusBar';\r\nimport {ClearButton} from './modules/clearButton';\r\nimport {AlternateRows} from './modules/alternateRows';\r\nimport {NoResults} from './modules/noResults';\r\nimport {Paging} from './modules/paging';\r\nimport {Toolbar} from './modules/toolbar';\r\n\r\n/**\r\n * Filter types\r\n */\r\n\r\n/**\r\n * Input filter type\r\n * @type {String}\r\n */\r\nexport const INPUT = 'input';\r\n/**\r\n * Select filter type\r\n * @type {String}\r\n */\r\nexport const SELECT = 'select';\r\n/**\r\n * Multiple select filter type\r\n * @type {String}\r\n */\r\nexport const MULTIPLE = 'multiple';\r\n/**\r\n * Checklist filter type\r\n * @type {String}\r\n */\r\nexport const CHECKLIST = 'checklist';\r\n/**\r\n * None filter type\r\n * @type {String}\r\n */\r\nexport const NONE = 'none';\r\n\r\n/**\r\n * Key codes\r\n */\r\n\r\n/**\r\n * Enter key code\r\n * @type {Number}\r\n */\r\nexport const ENTER_KEY = 13;\r\n/**\r\n * Tab key code\r\n * @type {Number}\r\n */\r\nexport const TAB_KEY = 9;\r\n/**\r\n * Escape key code\r\n * @type {Number}\r\n */\r\nexport const ESC_KEY = 27;\r\n/**\r\n * Up arrow key code\r\n * @type {Number}\r\n */\r\nexport const UP_ARROW_KEY = 38;\r\n/**\r\n * Down arrow key code\r\n * @type {Number}\r\n */\r\nexport const DOWN_ARROW_KEY = 40;\r\n\r\n/**\r\n * HTML tags\r\n */\r\n\r\n/**\r\n * Header cell tag\r\n * @type {String}\r\n */\r\nexport const HEADER_TAG = 'TH';\r\n/**\r\n * Cell tag\r\n * @type {String}\r\n */\r\nexport const CELL_TAG = 'TD';\r\n\r\n/**\r\n * Data types\r\n */\r\n\r\n/**\r\n * String\r\n * @type {String}\r\n */\r\nexport const STRING = 'string';\r\n\r\n/**\r\n * Number\r\n * @type {String}\r\n */\r\nexport const NUMBER = 'number';\r\n\r\n/**\r\n * Formatted number\r\n * @type {String}\r\n */\r\nexport const FORMATTED_NUMBER = 'formatted-number';\r\n\r\n/**\r\n * Date\r\n * @type {String}\r\n */\r\nexport const DATE = 'date';\r\n\r\n/**\r\n * IP address\r\n * @type {String}\r\n */\r\nexport const IP_ADDRESS = 'ipaddress';\r\n\r\n/**\r\n * Default values\r\n */\r\n\r\n/**\r\n * Auto filter delay in milliseconds\r\n * @type {Number}\r\n */\r\nexport const AUTO_FILTER_DELAY = 750;\r\n\r\n/**\r\n * TableFilter features definitions\r\n * @type {Object}\r\n */\r\nexport const FEATURES = {\r\n dateType: {\r\n class: DateType,\r\n name: 'dateType'\r\n },\r\n help: {\r\n class: Help,\r\n name: 'help',\r\n enforce: true\r\n },\r\n state: {\r\n class: State,\r\n name: 'state'\r\n },\r\n markActiveColumns: {\r\n class: MarkActiveColumns,\r\n name: 'markActiveColumns'\r\n },\r\n gridLayout: {\r\n class: GridLayout,\r\n name: 'gridLayout'\r\n },\r\n loader: {\r\n class: Loader,\r\n name: 'loader'\r\n },\r\n highlightKeyword: {\r\n class: HighlightKeyword,\r\n name: 'highlightKeyword',\r\n property: 'highlightKeywords'\r\n },\r\n popupFilter: {\r\n class: PopupFilter,\r\n name: 'popupFilter',\r\n property: 'popupFilters'\r\n },\r\n rowsCounter: {\r\n class: RowsCounter,\r\n name: 'rowsCounter'\r\n },\r\n statusBar: {\r\n class: StatusBar,\r\n name: 'statusBar'\r\n },\r\n clearButton: {\r\n class: ClearButton,\r\n name: 'clearButton',\r\n property: 'btnReset'\r\n },\r\n alternateRows: {\r\n class: AlternateRows,\r\n name: 'alternateRows'\r\n },\r\n noResults: {\r\n class: NoResults,\r\n name: 'noResults'\r\n },\r\n paging: {\r\n class: Paging,\r\n name: 'paging'\r\n },\r\n toolbar: {\r\n class: Toolbar,\r\n name: 'toolbar',\r\n enforce: true\r\n }\r\n};\r\n","/**\r\n * Export window or global object depending on the environment\r\n */\r\nexport const root = (typeof self === 'object' && self.self === self && self) ||\r\n (typeof global === 'object' && global.global === global && global) ||\r\n this;\r\n","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar forEachProperty = coreUtilityAliases.forEachProperty;\n\nfunction defineOnPrototype(ctor, methods) {\n var proto = ctor.prototype;\n forEachProperty(methods, function(val, key) {\n proto[key] = val;\n });\n}\n\nmodule.exports = defineOnPrototype;","import {root} from './root';\n\n/**\n * DOM event utilities\n */\n\n/**\n * Add event handler for specified event on passed element\n *\n * @param {DOMElement} obj Element\n * @param {String} type Event type\n * @param {Function} Handler\n * @param {Boolean} capture Specifiy whether the event should be executed in\n * the capturing or in the bubbling phase\n */\nexport const addEvt = (obj, type, func, capture) => {\n if (obj.addEventListener) {\n obj.addEventListener(type, func, capture);\n }\n else if (obj.attachEvent) {\n obj.attachEvent('on' + type, func);\n } else {\n obj['on' + type] = func;\n }\n};\n\n/**\n * Remove event handler for specified event on passed element\n *\n * @param {DOMElement} obj Element\n * @param {String} type Event type\n * @param {Function} Handler\n * @param {Boolean} capture Specifiy whether the event should be executed in\n * the capturing or in the bubbling phase\n */\nexport const removeEvt = (obj, type, func, capture) => {\n if (obj.removeEventListener) {\n obj.removeEventListener(type, func, capture);\n } else if (obj.detachEvent) {\n obj.detachEvent('on' + type, func);\n } else {\n obj['on' + type] = null;\n }\n};\n\n/**\n * Prevents further propagation of the current event in the bubbling phase\n *\n * @param {Event} evt Event on the DOM\n */\nexport const stopEvt = (evt) => {\n if (!evt) {\n evt = root.event;\n }\n if (evt.stopPropagation) {\n evt.stopPropagation();\n } else {\n evt.cancelBubble = true;\n }\n};\n\n/**\n * Cancels the event if it is cancelable, without stopping further\n * propagation of the event.\n *\n * @param {Event} evt Event on the DOM\n */\nexport const cancelEvt = (evt) => {\n if (!evt) {\n evt = root.event;\n }\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n};\n\n/**\n * Reference to the object that dispatched the event\n *\n * @param {Event} evt Event on the DOM\n * @returns {DOMElement}\n */\nexport const targetEvt = (evt) => {\n if (!evt) {\n evt = root.event;\n }\n return evt.target || evt.srcElement;\n};\n\n/**\n * Returns the Unicode value of pressed key\n *\n * @param {Event} evt Event on the DOM\n * @returns {Number}\n */\nexport const keyCode = (evt) => {\n return evt.charCode ? evt.charCode :\n (evt.keyCode ? evt.keyCode : (evt.which ? evt.which : 0));\n};\n\n/**\n * Check code of pressed key is one of the expected key codes\n *\n * @param {Event} evt key event\n * @param {Array} keyCodes list of keycodes to check\n */\nexport const isKeyPressed = (evt, keyCodes = []) => {\n return keyCodes.indexOf(keyCode(evt)) !== -1;\n};\n\n/**\n * Bind passed function to passed scope\n * @param {Function} fn function\n * @param {Object} scope object instance\n */\nexport function bound(fn, scope) {\n let boundFnName = `${fn.name}_bound`;\n if (!scope[boundFnName]) {\n scope[boundFnName] = fn.bind(scope);\n }\n return scope[boundFnName];\n}\n","'use strict';\n\nvar _utc = require('../var/_utc');\n\nfunction callDateGet(d, method) {\n return d['get' + (_utc(d) ? 'UTC' : '') + method]();\n}\n\nmodule.exports = callDateGet;","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getWeekday(d) {\n return callDateGet(d, 'Day');\n}\n\nmodule.exports = getWeekday;","import {remove as removeDiacritics} from 'diacritics';\r\n\r\n/**\r\n * String utilities\r\n */\r\n\r\n/**\r\n * Removes whitespace from both sides of passed string\r\n * @param {String} text\r\n * @return {String}\r\n */\r\nexport const trim = (text) => {\r\n if (text.trim) {\r\n return text.trim();\r\n }\r\n return text.replace(/^\\s*|\\s*$/g, '');\r\n};\r\n\r\n/**\r\n * Checks if passed string is empty\r\n * @param {String} text\r\n * @return {Boolean}\r\n */\r\nexport const isEmpty = (text) => trim(text) === '';\r\n\r\n/**\r\n * Makes regex safe string by escaping special characters from passed string\r\n * @param {String} text\r\n * @return {String} escaped string\r\n */\r\nexport const rgxEsc = (text) => {\r\n let chars = /[-\\/\\\\^$*+?.()|[\\]{}]/g;\r\n let escMatch = '\\\\$&';\r\n return String(text).replace(chars, escMatch);\r\n};\r\n\r\n/**\r\n * Returns passed string as lowercase if caseSensitive flag set false. By\r\n * default it returns the string with no casing changes.\r\n * @param {String} text\r\n * @return {String} string\r\n */\r\nexport const matchCase = (text, caseSensitive = false) => {\r\n if (!caseSensitive) {\r\n return text.toLowerCase();\r\n }\r\n return text;\r\n};\r\n\r\n/**\r\n * Checks if passed data contains the searched term\r\n * @param {String} term Searched term\r\n * @param {String} data Data string\r\n * @param {Boolean} exactMatch Exact match\r\n * @param {Boolean} caseSensitive Case sensitive\r\n * @param {Boolean} ignoreDiacritics Ignore diacritics\r\n * @return {Boolean}\r\n */\r\nexport const contains = (term, data, exactMatch = false, caseSensitive = false,\r\n ignoreDiacritics = false) => {\r\n // Improved by Cedric Wartel (cwl) automatic exact match for selects and\r\n // special characters are now filtered\r\n let regexp;\r\n let modifier = caseSensitive ? 'g' : 'gi';\r\n if (ignoreDiacritics) {\r\n term = removeDiacritics(term);\r\n data = removeDiacritics(data);\r\n }\r\n if (exactMatch) {\r\n regexp = new RegExp('(^\\\\s*)' + rgxEsc(term) + '(\\\\s*$)',\r\n modifier);\r\n } else {\r\n regexp = new RegExp(rgxEsc(term), modifier);\r\n }\r\n return regexp.test(data);\r\n};\r\n","'use strict';\n\nvar buildDateRangeUnits = require('../internal/buildDateRangeUnits');\n\nbuildDateRangeUnits();","'use strict';\n\nvar Sugar = require('sugar-core');\n\nmodule.exports = {\n sugarObject: Sugar.Object,\n sugarArray: Sugar.Array,\n sugarDate: Sugar.Date,\n sugarString: Sugar.String,\n sugarNumber: Sugar.Number,\n sugarFunction: Sugar.Function,\n sugarRegExp: Sugar.RegExp\n};","'use strict';\n\nvar setDate = require('./setDate'),\n getDate = require('./getDate'),\n getWeekday = require('./getWeekday'),\n classChecks = require('../../common/var/classChecks'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar isNumber = classChecks.isNumber,\n abs = mathAliases.abs;\n\nfunction setWeekday(d, dow, dir) {\n if (!isNumber(dow)) return;\n var currentWeekday = getWeekday(d);\n if (dir) {\n // Allow a \"direction\" parameter to determine whether a weekday can\n // be set beyond the current weekday in either direction.\n var ndir = dir > 0 ? 1 : -1;\n var offset = dow % 7 - currentWeekday;\n if (offset && offset / abs(offset) !== ndir) {\n dow += 7 * ndir;\n }\n }\n setDate(d, getDate(d) + dow - currentWeekday);\n return d.getTime();\n}\n\nmodule.exports = setWeekday;","'use strict';\n\nvar mathAliases = require('./mathAliases');\n\nvar ceil = mathAliases.ceil,\n floor = mathAliases.floor;\n\nvar trunc = Math.trunc || function(n) {\n if (n === 0 || !isFinite(n)) return n;\n return n < 0 ? ceil(n) : floor(n);\n};\n\nmodule.exports = trunc;","'use strict';\n\nvar privatePropertyAccessor = require('../internal/privatePropertyAccessor');\n\nmodule.exports = privatePropertyAccessor('utc');","'use strict';\n\nvar getExtendedDate = require('./getExtendedDate');\n\nfunction createDate(d, options, forceClone) {\n return getExtendedDate(null, d, options, forceClone).date;\n}\n\nmodule.exports = createDate;","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getMonth(d) {\n return callDateGet(d, 'Month');\n}\n\nmodule.exports = getMonth;","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getYear(d) {\n return callDateGet(d, 'FullYear');\n}\n\nmodule.exports = getYear;","'use strict';\n\nvar getDaysInMonth = require('../internal/getDaysInMonth');\n\nvar DateUnits = [\n {\n name: 'millisecond',\n method: 'Milliseconds',\n multiplier: 1,\n start: 0,\n end: 999\n },\n {\n name: 'second',\n method: 'Seconds',\n multiplier: 1000,\n start: 0,\n end: 59\n },\n {\n name: 'minute',\n method: 'Minutes',\n multiplier: 60 * 1000,\n start: 0,\n end: 59\n },\n {\n name: 'hour',\n method: 'Hours',\n multiplier: 60 * 60 * 1000,\n start: 0,\n end: 23\n },\n {\n name: 'day',\n alias: 'date',\n method: 'Date',\n ambiguous: true,\n multiplier: 24 * 60 * 60 * 1000,\n start: 1,\n end: function(d) {\n return getDaysInMonth(d);\n }\n },\n {\n name: 'week',\n method: 'ISOWeek',\n ambiguous: true,\n multiplier: 7 * 24 * 60 * 60 * 1000\n },\n {\n name: 'month',\n method: 'Month',\n ambiguous: true,\n multiplier: 30.4375 * 24 * 60 * 60 * 1000,\n start: 0,\n end: 11\n },\n {\n name: 'year',\n method: 'FullYear',\n ambiguous: true,\n multiplier: 365.25 * 24 * 60 * 60 * 1000,\n start: 0\n }\n];\n\nmodule.exports = DateUnits;","'use strict';\n\nfunction isDefined(o) {\n return o !== undefined;\n}\n\nmodule.exports = isDefined;","'use strict';\n\nvar iterateOverSparseArray = require('./iterateOverSparseArray');\n\nfunction forEach(arr, fn) {\n for (var i = 0, len = arr.length; i < len; i++) {\n if (!(i in arr)) {\n return iterateOverSparseArray(arr, fn, i);\n }\n fn(arr[i], i);\n }\n}\n\nmodule.exports = forEach;","import {Feature} from '../feature';\r\nimport {createElm, removeElm, elm, tag} from '../dom';\r\nimport {defaultsStr} from '../settings';\r\nimport {isUndef} from '../types';\r\n\r\nconst EVENTS = [\r\n 'initializing-feature',\r\n 'initializing-extension'\r\n];\r\n\r\n/** Left position in toolbar */\r\nexport const LEFT = 'left';\r\n/** Right position in toolbar */\r\nexport const RIGHT = 'right';\r\n/** Center position in toolbar */\r\nexport const CENTER = 'center';\r\n\r\n/**\r\n * Toolbar UI component\r\n * @export\r\n * @class Toolbar\r\n * @extends {Feature}\r\n */\r\nexport class Toolbar extends Feature {\r\n\r\n /**\r\n * Create an instance of Toolbar\r\n * @param {TableFilter} tf TableFilter instance\r\n * @memberof Toolbar\r\n */\r\n constructor(tf) {\r\n super(tf, 'toolbar');\r\n\r\n // Configuration object\r\n let f = this.config.toolbar || {};\r\n\r\n /**\r\n * Css class for toolbar's container DOM element\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.container_css_class, 'inf');\r\n\r\n /**\r\n * Css class for left-side inner container DOM element\r\n * @type {String}\r\n */\r\n this.lContCssClass = defaultsStr(f.left_cont_css_class, 'ldiv');\r\n\r\n /**\r\n * Css class for right-side inner container DOM element\r\n * @type {String}\r\n */\r\n this.rContCssClass = defaultsStr(f.right_cont_css_class, 'rdiv');\r\n\r\n /**\r\n * Css class for middle inner container DOM element\r\n * @type {String}\r\n */\r\n this.cContCssClass = defaultsStr(f.center_cont_css_class, 'mdiv');\r\n\r\n /**\r\n * Toolbar's custom container ID\r\n * @type {String}\r\n */\r\n this.tgtId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Toolbar's container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.cont = null;\r\n\r\n /**\r\n * Left-side inner container DOM element (rows counter in toolbar)\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.lCont = null;\r\n\r\n /**\r\n * Right-side inner container DOM element (reset button,\r\n * page length selector in toolbar)\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.rCont = null;\r\n\r\n /**\r\n * Middle inner container DOM element (paging elements in toolbar)\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.cCont = null;\r\n\r\n /**\r\n * Container elements inside toolbar\r\n * @private\r\n */\r\n this.innerCont = {\r\n left: null,\r\n center: null,\r\n right: null\r\n };\r\n\r\n this.emitter.on(EVENTS,\r\n (feature, isExternal) => this.init(isExternal));\r\n\r\n /** @inherited */\r\n this.enabled = true;\r\n }\r\n\r\n /**\r\n * Initialize toolbar components\r\n * @param {Boolean} isExternal initialize only if component belongs\r\n * to toolbar\r\n */\r\n init(isExternal) {\r\n if (this.initialized || isExternal) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n\r\n // default container\r\n let container = createElm('div');\r\n container.className = this.contCssClass;\r\n\r\n // custom container\r\n if (this.tgtId) {\r\n elm(this.tgtId).appendChild(container);\r\n }\r\n // grid-layout\r\n else if (tf.gridLayout) {\r\n let gridLayout = tf.Mod.gridLayout;\r\n gridLayout.tblMainCont.appendChild(container);\r\n container.className = gridLayout.infDivCssClass;\r\n }\r\n // default location: just above the table\r\n else {\r\n let cont = createElm('caption');\r\n cont.appendChild(container);\r\n tf.dom().insertBefore(cont, tf.dom().firstChild);\r\n }\r\n this.cont = container;\r\n\r\n // left container\r\n this.lCont = this.createContainer(container, this.lContCssClass);\r\n\r\n // right container\r\n this.rCont = this.createContainer(container, this.rContCssClass);\r\n\r\n // middle container\r\n this.cCont = this.createContainer(container, this.cContCssClass);\r\n\r\n this.innerCont = {\r\n left: this.lCont,\r\n center: this.cCont,\r\n right: this.rCont\r\n };\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n // emit help initialisation only if undefined\r\n if (isUndef(tf.help)) {\r\n // explicitily enable help to initialise feature by\r\n // default, only if setting is undefined\r\n tf.Mod.help.enable();\r\n this.emitter.emit('init-help', tf);\r\n }\r\n }\r\n\r\n /**\r\n * Return the container based on requested position inside the toolbar\r\n * @param {String} [position=RIGHT] 3 possible positions: 'left', 'center',\r\n * 'right'\r\n * @param {DOMElement} el optional DOM element to be inserter in container\r\n * @returns {DOMElement}\r\n */\r\n container(position = RIGHT, el) {\r\n let cont = this.innerCont[position];\r\n if (el) {\r\n cont.appendChild(el);\r\n }\r\n return cont;\r\n }\r\n\r\n /**\r\n * Create DOM element inside passed container\r\n * @param {DOMElement} container\r\n * @param {String} css\r\n * @private\r\n */\r\n createContainer(container, css) {\r\n let div = createElm('div', ['class', css]);\r\n container.appendChild(div);\r\n return div;\r\n }\r\n\r\n /**\r\n * Destroy Toolbar instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n\r\n removeElm(this.cont);\r\n this.cont = null;\r\n\r\n let tbl = tf.dom();\r\n let captions = tag(tbl, 'caption');\r\n [].forEach.call(captions, (el) => removeElm(el));\r\n\r\n /** @inherited */\r\n this.initialized = false;\r\n }\r\n}\r\n","'use strict';\n\nvar _utc = require('../../common/var/_utc');\n\nfunction cloneDate(d) {\n // Rhino environments have a bug where new Date(d) truncates\n // milliseconds so need to call getTime() here.\n var clone = new Date(d.getTime());\n _utc(clone, !!_utc(d));\n return clone;\n}\n\nmodule.exports = cloneDate;","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getDate(d) {\n return callDateGet(d, 'Date');\n}\n\nmodule.exports = getDate;","'use strict';\n\nvar callDateSet = require('../../common/internal/callDateSet');\n\nfunction setDate(d, val) {\n callDateSet(d, 'Date', val);\n}\n\nmodule.exports = setDate;","'use strict';\n\nvar _utc = require('../var/_utc'),\n callDateGet = require('./callDateGet');\n\nfunction callDateSet(d, method, value, safe) {\n // \"Safe\" denotes not setting the date if the value is the same as what is\n // currently set. In theory this should be a noop, however it will cause\n // timezone shifts when in the middle of a DST fallback. This is unavoidable\n // as the notation itself is ambiguous (i.e. there are two \"1:00ams\" on\n // November 1st, 2015 in northern hemisphere timezones that follow DST),\n // however when advancing or rewinding dates this can throw off calculations\n // so avoiding this unintentional shifting on an opt-in basis.\n if (safe && value === callDateGet(d, method, value)) {\n return;\n }\n d['set' + (_utc(d) ? 'UTC' : '') + method](value);\n}\n\nmodule.exports = callDateSet;","'use strict';\n\nvar isDefined = require('../../common/internal/isDefined'),\n classChecks = require('../../common/var/classChecks'),\n callDateSet = require('../../common/internal/callDateSet'),\n walkUnitDown = require('./walkUnitDown');\n\nvar isFunction = classChecks.isFunction;\n\nfunction setUnitAndLowerToEdge(d, startIndex, stopIndex, end) {\n walkUnitDown(startIndex, function(unit, i) {\n var val = end ? unit.end : unit.start;\n if (isFunction(val)) {\n val = val(d);\n }\n callDateSet(d, unit.method, val);\n return !isDefined(stopIndex) || i > stopIndex;\n });\n return d;\n}\n\nmodule.exports = setUnitAndLowerToEdge;","'use strict';\n\nvar updateDate = require('./updateDate');\n\nfunction advanceDate(d, unit, num, reset) {\n var set = {};\n set[unit] = num;\n return updateDate(d, set, reset, 1);\n}\n\nmodule.exports = advanceDate;","'use strict';\n\nvar _dateOptions = require('../var/_dateOptions');\n\nfunction getNewDate() {\n return _dateOptions('newDateInternal')();\n}\n\nmodule.exports = getNewDate;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes');\n\nvar HOURS_INDEX = DateUnitIndexes.HOURS_INDEX,\n DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX;\n\nfunction getLowerUnitIndex(index) {\n if (index === MONTH_INDEX) {\n return DAY_INDEX;\n } else if (index === WEEK_INDEX) {\n return HOURS_INDEX;\n }\n return index - 1;\n}\n\nmodule.exports = getLowerUnitIndex;","'use strict';\n\nfunction isUndefined(o) {\n return o === undefined;\n}\n\nmodule.exports = isUndefined;","'use strict';\n\nvar isValidRangeMember = require('./isValidRangeMember');\n\nfunction rangeIsValid(range) {\n return isValidRangeMember(range.start) &&\n isValidRangeMember(range.end) &&\n typeof range.start === typeof range.end;\n}\n\nmodule.exports = rangeIsValid;","'use strict';\n\nfunction dateIsValid(d) {\n return !isNaN(d.getTime());\n}\n\nmodule.exports = dateIsValid;","'use strict';\n\nvar methodDefineAliases = require('../var/methodDefineAliases'),\n collectSimilarMethods = require('./collectSimilarMethods');\n\nvar defineInstance = methodDefineAliases.defineInstance;\n\nfunction defineInstanceSimilar(sugarNamespace, set, fn, flags) {\n defineInstance(sugarNamespace, collectSimilarMethods(set, fn), flags);\n}\n\nmodule.exports = defineInstanceSimilar;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n getLowerUnitIndex = require('./getLowerUnitIndex'),\n moveToBeginningOfWeek = require('./moveToBeginningOfWeek'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge');\n\nvar WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n localeManager = LocaleHelpers.localeManager;\n\nfunction moveToBeginningOfUnit(d, unitIndex, localeCode) {\n if (unitIndex === WEEK_INDEX) {\n moveToBeginningOfWeek(d, localeManager.get(localeCode).getFirstDayOfWeek());\n }\n return setUnitAndLowerToEdge(d, getLowerUnitIndex(unitIndex));\n}\n\nmodule.exports = moveToBeginningOfUnit;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n moveToEndOfWeek = require('./moveToEndOfWeek'),\n getLowerUnitIndex = require('./getLowerUnitIndex'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge');\n\nvar WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n localeManager = LocaleHelpers.localeManager;\n\nfunction moveToEndOfUnit(d, unitIndex, localeCode, stopIndex) {\n if (unitIndex === WEEK_INDEX) {\n moveToEndOfWeek(d, localeManager.get(localeCode).getFirstDayOfWeek());\n }\n return setUnitAndLowerToEdge(d, getLowerUnitIndex(unitIndex), stopIndex, true);\n}\n\nmodule.exports = moveToEndOfUnit;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n isDefined = require('../../common/internal/isDefined'),\n getDateParam = require('./getDateParam'),\n iterateOverDateUnits = require('./iterateOverDateUnits');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nfunction iterateOverDateParams(params, fn, startIndex, endIndex) {\n\n function run(name, unit, i) {\n var val = getDateParam(params, name);\n if (isDefined(val)) {\n fn(name, val, unit, i);\n }\n }\n\n iterateOverDateUnits(function (unit, i) {\n var result = run(unit.name, unit, i);\n if (result !== false && i === DAY_INDEX) {\n // Check for \"weekday\", which has a distinct meaning\n // in the context of setting a date, but has the same\n // meaning as \"day\" as a unit of time.\n result = run('weekday', unit, i);\n }\n return result;\n }, startIndex, endIndex);\n\n}\n\nmodule.exports = iterateOverDateParams;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n trunc = require('../../common/var/trunc'),\n setDate = require('./setDate'),\n getDate = require('./getDate'),\n getMonth = require('./getMonth'),\n getNewDate = require('./getNewDate'),\n setWeekday = require('./setWeekday'),\n mathAliases = require('../../common/var/mathAliases'),\n callDateGet = require('../../common/internal/callDateGet'),\n classChecks = require('../../common/var/classChecks'),\n resetLowerUnits = require('./resetLowerUnits'),\n getLowerUnitIndex = require('./getLowerUnitIndex'),\n getHigherUnitIndex = require('./getHigherUnitIndex'),\n callDateSetWithWeek = require('./callDateSetWithWeek'),\n iterateOverDateParams = require('./iterateOverDateParams');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX,\n YEAR_INDEX = DateUnitIndexes.YEAR_INDEX,\n round = mathAliases.round,\n isNumber = classChecks.isNumber;\n\nfunction updateDate(d, params, reset, advance, prefer, weekdayDir) {\n var upperUnitIndex;\n\n function setUpperUnit(unitName, unitIndex) {\n if (prefer && !upperUnitIndex) {\n if (unitName === 'weekday') {\n upperUnitIndex = WEEK_INDEX;\n } else {\n upperUnitIndex = getHigherUnitIndex(unitIndex);\n }\n }\n }\n\n function setSpecificity(unitIndex) {\n // Other functions may preemptively set the specificity before arriving\n // here so concede to them if they have already set more specific units.\n if (unitIndex > params.specificity) {\n return;\n }\n params.specificity = unitIndex;\n }\n\n function canDisambiguate() {\n if (!upperUnitIndex || upperUnitIndex > YEAR_INDEX) {\n return;\n }\n switch(prefer) {\n case -1: return d > getNewDate();\n case 1: return d < getNewDate();\n }\n }\n\n function disambiguateHigherUnit() {\n var unit = DateUnits[upperUnitIndex];\n advance = prefer;\n setUnit(unit.name, 1, unit, upperUnitIndex);\n }\n\n function handleFraction(unit, unitIndex, fraction) {\n if (unitIndex) {\n var lowerUnit = DateUnits[getLowerUnitIndex(unitIndex)];\n var val = round(unit.multiplier / lowerUnit.multiplier * fraction);\n params[lowerUnit.name] = val;\n }\n }\n\n function monthHasShifted(d, targetMonth) {\n if (targetMonth < 0) {\n targetMonth = targetMonth % 12 + 12;\n }\n return targetMonth % 12 !== getMonth(d);\n }\n\n function setUnit(unitName, value, unit, unitIndex) {\n var method = unit.method, checkMonth, fraction;\n\n setUpperUnit(unitName, unitIndex);\n setSpecificity(unitIndex);\n\n fraction = value % 1;\n if (fraction) {\n handleFraction(unit, unitIndex, fraction);\n value = trunc(value);\n }\n\n if (unitName === 'weekday') {\n if (!advance) {\n // Weekdays are always considered absolute units so simply set them\n // here even if it is an \"advance\" operation. This is to help avoid\n // ambiguous meanings in \"advance\" as well as to neatly allow formats\n // like \"Wednesday of next week\" without more complex logic.\n setWeekday(d, value, weekdayDir);\n }\n return;\n }\n checkMonth = unitIndex === MONTH_INDEX && getDate(d) > 28;\n\n // If we are advancing or rewinding, then we need we need to set the\n // absolute time if the unit is \"hours\" or less. This is due to the fact\n // that setting by method is ambiguous during DST shifts. For example,\n // 1:00am on November 1st 2015 occurs twice in North American timezones\n // with DST, the second time being after the clocks are rolled back at\n // 2:00am. When springing forward this is automatically handled as there\n // is no 2:00am so the date automatically jumps to 3:00am. However, when\n // rolling back, setHours(2) will always choose the first \"2am\" even if\n // the date is currently set to the second, causing unintended jumps.\n // This ambiguity is unavoidable when setting dates as the notation is\n // ambiguous. However when advancing, we clearly want the resulting date\n // to be an acutal hour ahead, which can only be accomplished by setting\n // the absolute time. Conversely, any unit higher than \"hours\" MUST use\n // the internal set methods, as they are ambiguous as absolute units of\n // time. Years may be 365 or 366 days depending on leap years, months are\n // all over the place, and even days may be 23-25 hours depending on DST\n // shifts. Finally, note that the kind of jumping described above will\n // occur when calling ANY \"set\" method on the date and will occur even if\n // the value being set is identical to the one currently set (i.e.\n // setHours(2) on a date at 2am may not be a noop). This is precarious,\n // so avoiding this situation in callDateSet by checking up front that\n // the value is not the same before setting.\n if (advance && !unit.ambiguous) {\n d.setTime(d.getTime() + (value * advance * unit.multiplier));\n return;\n } else if (advance) {\n if (unitIndex === WEEK_INDEX) {\n value *= 7;\n method = DateUnits[DAY_INDEX].method;\n }\n value = (value * advance) + callDateGet(d, method);\n }\n callDateSetWithWeek(d, method, value, advance);\n if (checkMonth && monthHasShifted(d, value)) {\n // As we are setting the units in reverse order, there is a chance that\n // our date may accidentally traverse into a new month, such as setting\n // { month: 1, date 15 } on January 31st. Check for this here and reset\n // the date to the last day of the previous month if this has happened.\n setDate(d, 0);\n }\n }\n\n if (isNumber(params) && advance) {\n // If param is a number and advancing, the number is in milliseconds.\n params = { millisecond: params };\n } else if (isNumber(params)) {\n // Otherwise just set the timestamp and return.\n d.setTime(params);\n return d;\n }\n\n iterateOverDateParams(params, setUnit);\n\n if (reset && params.specificity) {\n resetLowerUnits(d, params.specificity);\n }\n\n // If past or future is preferred, then the process of \"disambiguation\" will\n // ensure that an ambiguous time/date (\"4pm\", \"thursday\", \"June\", etc.) will\n // be in the past or future. Weeks are only considered ambiguous if there is\n // a weekday, i.e. \"thursday\" is an ambiguous week, but \"the 4th\" is an\n // ambiguous month.\n if (canDisambiguate()) {\n disambiguateHigherUnit();\n }\n return d;\n}\n\nmodule.exports = updateDate;","'use strict';\n\nfunction tzOffset(d) {\n return d.getTimezoneOffset();\n}\n\nmodule.exports = tzOffset;","'use strict';\n\nfunction spaceSplit(str) {\n return str.split(' ');\n}\n\nmodule.exports = spaceSplit;","'use strict';\n\nmodule.exports = {\n HALF_WIDTH_ZERO: 0x30,\n FULL_WIDTH_ZERO: 0xff10,\n HALF_WIDTH_PERIOD: '.',\n FULL_WIDTH_PERIOD: '.',\n HALF_WIDTH_COMMA: ',',\n OPEN_BRACE: '{',\n CLOSE_BRACE: '}'\n};","'use strict';\n\nvar simpleMerge = require('./simpleMerge');\n\nfunction simpleClone(obj) {\n return simpleMerge({}, obj);\n}\n\nmodule.exports = simpleClone;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks'),\n rangeIsValid = require('./rangeIsValid'),\n incrementDate = require('./incrementDate'),\n incrementNumber = require('./incrementNumber'),\n incrementString = require('./incrementString'),\n getGreaterPrecision = require('./getGreaterPrecision'),\n getDateIncrementObject = require('./getDateIncrementObject');\n\nvar isNumber = classChecks.isNumber,\n isString = classChecks.isString,\n isDate = classChecks.isDate,\n isFunction = classChecks.isFunction;\n\nfunction rangeEvery(range, step, countOnly, fn) {\n var increment,\n precision,\n dio,\n unit,\n start = range.start,\n end = range.end,\n inverse = end < start,\n current = start,\n index = 0,\n result = [];\n\n if (!rangeIsValid(range)) {\n return countOnly ? NaN : [];\n }\n if (isFunction(step)) {\n fn = step;\n step = null;\n }\n step = step || 1;\n if (isNumber(start)) {\n precision = getGreaterPrecision(start, step);\n increment = function() {\n return incrementNumber(current, step, precision);\n };\n } else if (isString(start)) {\n increment = function() {\n return incrementString(current, step);\n };\n } else if (isDate(start)) {\n dio = getDateIncrementObject(step);\n step = dio[0];\n unit = dio[1];\n increment = function() {\n return incrementDate(current, step, unit);\n };\n }\n // Avoiding infinite loops\n if (inverse && step > 0) {\n step *= -1;\n }\n while(inverse ? current >= end : current <= end) {\n if (!countOnly) {\n result.push(current);\n }\n if (fn) {\n fn(current, index, range);\n }\n current = increment();\n index++;\n }\n return countOnly ? index - 1 : result;\n}\n\nmodule.exports = rangeEvery;","'use strict';\n\nmodule.exports = 'year|month|week|day|hour|minute|second|millisecond';","'use strict';\n\nvar ISODefaults = require('../var/ISODefaults'),\n setDate = require('./setDate'),\n getDate = require('./getDate'),\n cloneDate = require('./cloneDate'),\n isUndefined = require('../../common/internal/isUndefined'),\n moveToEndOfWeek = require('./moveToEndOfWeek'),\n moveToBeginningOfWeek = require('./moveToBeginningOfWeek'),\n moveToFirstDayOfWeekYear = require('./moveToFirstDayOfWeekYear');\n\nvar ISO_FIRST_DAY_OF_WEEK = ISODefaults.ISO_FIRST_DAY_OF_WEEK,\n ISO_FIRST_DAY_OF_WEEK_YEAR = ISODefaults.ISO_FIRST_DAY_OF_WEEK_YEAR;\n\nfunction getWeekNumber(d, allowPrevious, firstDayOfWeek, firstDayOfWeekYear) {\n var isoWeek, n = 0;\n if (isUndefined(firstDayOfWeek)) {\n firstDayOfWeek = ISO_FIRST_DAY_OF_WEEK;\n }\n if (isUndefined(firstDayOfWeekYear)) {\n firstDayOfWeekYear = ISO_FIRST_DAY_OF_WEEK_YEAR;\n }\n // Moving to the end of the week allows for forward year traversal, ie\n // Dec 29 2014 is actually week 01 of 2015.\n isoWeek = moveToEndOfWeek(cloneDate(d), firstDayOfWeek);\n moveToFirstDayOfWeekYear(isoWeek, firstDayOfWeek, firstDayOfWeekYear);\n if (allowPrevious && d < isoWeek) {\n // If the date is still before the start of the year, then it should be\n // the last week of the previous year, ie Jan 1 2016 is actually week 53\n // of 2015, so move to the beginning of the week to traverse the year.\n isoWeek = moveToBeginningOfWeek(cloneDate(d), firstDayOfWeek);\n moveToFirstDayOfWeekYear(isoWeek, firstDayOfWeek, firstDayOfWeekYear);\n }\n while (isoWeek <= d) {\n // Doing a very simple walk to get the week number.\n setDate(isoWeek, getDate(isoWeek) + 7);\n n++;\n }\n return n;\n}\n\nmodule.exports = getWeekNumber;","'use strict';\n\nvar mathAliases = require('../var/mathAliases'),\n repeatString = require('./repeatString');\n\nvar abs = mathAliases.abs;\n\nfunction padNumber(num, place, sign, base, replacement) {\n var str = abs(num).toString(base || 10);\n str = repeatString(replacement || '0', place - str.replace(/\\.\\d+/, '').length) + str;\n if (sign || num < 0) {\n str = (num < 0 ? '-' : '+') + str;\n }\n return str;\n}\n\nmodule.exports = padNumber;","'use strict';\n\nvar trunc = require('../../common/var/trunc'),\n cloneDate = require('./cloneDate'),\n advanceDate = require('./advanceDate');\n\nfunction getTimeDistanceForUnit(d1, d2, unit) {\n var fwd = d2 > d1, num, tmp;\n if (!fwd) {\n tmp = d2;\n d2 = d1;\n d1 = tmp;\n }\n num = d2 - d1;\n if (unit.multiplier > 1) {\n num = trunc(num / unit.multiplier);\n }\n // For higher order with potential ambiguity, use the numeric calculation\n // as a starting point, then iterate until we pass the target date.\n if (unit.ambiguous) {\n d1 = cloneDate(d1);\n if (num) {\n advanceDate(d1, unit.name, num);\n }\n while (d1 < d2) {\n advanceDate(d1, unit.name, 1);\n if (d1 > d2) {\n break;\n }\n num += 1;\n }\n }\n return fwd ? -num : num;\n}\n\nmodule.exports = getTimeDistanceForUnit;","'use strict';\n\nfunction simpleCapitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nmodule.exports = simpleCapitalize;","'use strict';\n\nvar setWeekday = require('./setWeekday'),\n getWeekday = require('./getWeekday'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar floor = mathAliases.floor;\n\nfunction moveToBeginningOfWeek(d, firstDayOfWeek) {\n setWeekday(d, floor((getWeekday(d) - firstDayOfWeek) / 7) * 7 + firstDayOfWeek);\n return d;\n}\n\nmodule.exports = moveToBeginningOfWeek;","'use strict';\n\nvar DATE_OPTIONS = require('./DATE_OPTIONS'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n defineOptionsAccessor = require('../../common/internal/defineOptionsAccessor');\n\nvar sugarDate = namespaceAliases.sugarDate;\n\nmodule.exports = defineOptionsAccessor(sugarDate, DATE_OPTIONS);","'use strict';\n\nvar MINUTES = require('../var/MINUTES'),\n ParsingTokens = require('../var/ParsingTokens'),\n LocaleHelpers = require('../var/LocaleHelpers'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n _utc = require('../../common/var/_utc'),\n trunc = require('../../common/var/trunc'),\n forEach = require('../../common/internal/forEach'),\n tzOffset = require('./tzOffset'),\n resetTime = require('./resetTime'),\n isDefined = require('../../common/internal/isDefined'),\n setWeekday = require('./setWeekday'),\n updateDate = require('./updateDate'),\n getNewDate = require('./getNewDate'),\n isUndefined = require('../../common/internal/isUndefined'),\n classChecks = require('../../common/var/classChecks'),\n advanceDate = require('./advanceDate'),\n simpleClone = require('../../common/internal/simpleClone'),\n isObjectType = require('../../common/internal/isObjectType'),\n moveToEndOfUnit = require('./moveToEndOfUnit'),\n deleteDateParam = require('./deleteDateParam'),\n coreUtilityAliases = require('../../common/var/coreUtilityAliases'),\n getParsingTokenValue = require('./getParsingTokenValue'),\n moveToBeginningOfUnit = require('./moveToBeginningOfUnit'),\n iterateOverDateParams = require('./iterateOverDateParams'),\n getYearFromAbbreviation = require('./getYearFromAbbreviation'),\n iterateOverHigherDateParams = require('./iterateOverHigherDateParams');\n\nvar isNumber = classChecks.isNumber,\n isString = classChecks.isString,\n isDate = classChecks.isDate,\n hasOwn = coreUtilityAliases.hasOwn,\n getOwn = coreUtilityAliases.getOwn,\n English = LocaleHelpers.English,\n localeManager = LocaleHelpers.localeManager,\n DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX,\n YEAR_INDEX = DateUnitIndexes.YEAR_INDEX;\n\nfunction getExtendedDate(contextDate, d, opt, forceClone) {\n\n var date, set, loc, options, afterCallbacks, relative, weekdayDir;\n\n afterCallbacks = [];\n options = getDateOptions(opt);\n\n function getDateOptions(opt) {\n var options = isString(opt) ? { locale: opt } : opt || {};\n options.prefer = +!!getOwn(options, 'future') - +!!getOwn(options, 'past');\n return options;\n }\n\n function getFormatParams(match, dif) {\n var set = getOwn(options, 'params') || {};\n forEach(dif.to, function(field, i) {\n var str = match[i + 1], token, val;\n if (!str) return;\n if (field === 'yy' || field === 'y') {\n field = 'year';\n val = getYearFromAbbreviation(str, date, getOwn(options, 'prefer'));\n } else if (token = getOwn(ParsingTokens, field)) {\n field = token.param || field;\n val = getParsingTokenValue(token, str);\n } else {\n val = loc.getTokenValue(field, str);\n }\n set[field] = val;\n });\n return set;\n }\n\n // Clone date will set the utc flag, but it will\n // be overriden later, so set option flags instead.\n function cloneDateByFlag(d, clone) {\n if (_utc(d) && !isDefined(getOwn(options, 'fromUTC'))) {\n options.fromUTC = true;\n }\n if (_utc(d) && !isDefined(getOwn(options, 'setUTC'))) {\n options.setUTC = true;\n }\n if (clone) {\n d = new Date(d.getTime());\n }\n return d;\n }\n\n function afterDateSet(fn) {\n afterCallbacks.push(fn);\n }\n\n function fireCallbacks() {\n forEach(afterCallbacks, function(fn) {\n fn.call();\n });\n }\n\n function parseStringDate(str) {\n\n str = str.toLowerCase();\n\n // The act of getting the locale will initialize\n // if it is missing and add the required formats.\n loc = localeManager.get(getOwn(options, 'locale'));\n\n for (var i = 0, dif, match; dif = loc.compiledFormats[i]; i++) {\n match = str.match(dif.reg);\n if (match) {\n\n // Note that caching the format will modify the compiledFormats array\n // which is not a good idea to do inside its for loop, however we\n // know at this point that we have a matched format and that we will\n // break out below, so simpler to do it here.\n loc.cacheFormat(dif, i);\n\n set = getFormatParams(match, dif);\n\n if (isDefined(set.timestamp)) {\n str = set.timestamp;\n set = null;\n break;\n }\n\n if (isDefined(set.ampm)) {\n handleAmpm(set.ampm);\n }\n\n if (set.utc || isDefined(set.tzHour)) {\n handleTimezoneOffset(set.tzHour, set.tzMinute, set.tzSign);\n }\n\n if (isDefined(set.shift) && isUndefined(set.unit)) {\n // \"next january\", \"next monday\", etc\n handleUnitlessShift();\n }\n\n if (isDefined(set.num) && isUndefined(set.unit)) {\n // \"the second of January\", etc\n handleUnitlessNum(set.num);\n }\n\n if (set.midday) {\n // \"noon\" and \"midnight\"\n handleMidday(set.midday);\n }\n\n if (isDefined(set.day)) {\n // Relative day localizations such as \"today\" and \"tomorrow\".\n handleRelativeDay(set.day);\n }\n\n if (isDefined(set.unit)) {\n // \"3 days ago\", etc\n handleRelativeUnit(set.unit);\n }\n\n if (set.edge) {\n // \"the end of January\", etc\n handleEdge(set.edge, set);\n }\n\n if (set.yearSign) {\n set.year *= set.yearSign;\n }\n\n break;\n }\n }\n\n if (!set) {\n // Fall back to native parsing\n date = new Date(str);\n if (getOwn(options, 'fromUTC')) {\n // Falling back to system date here which cannot be parsed as UTC,\n // so if we're forcing UTC then simply add the offset.\n date.setTime(date.getTime() + (tzOffset(date) * MINUTES));\n }\n } else if (relative) {\n updateDate(date, set, false, 1);\n } else {\n if (_utc(date)) {\n // UTC times can traverse into other days or even months,\n // so preemtively reset the time here to prevent this.\n resetTime(date);\n }\n updateDate(date, set, true, 0, getOwn(options, 'prefer'), weekdayDir);\n }\n fireCallbacks();\n return date;\n }\n\n function handleAmpm(ampm) {\n if (ampm === 1 && set.hour < 12) {\n // If the time is 1pm-11pm advance the time by 12 hours.\n set.hour += 12;\n } else if (ampm === 0 && set.hour === 12) {\n // If it is 12:00am then set the hour to 0.\n set.hour = 0;\n }\n }\n\n function handleTimezoneOffset(tzHour, tzMinute, tzSign) {\n // Adjust for timezone offset\n _utc(date, true);\n var offset = (tzSign || 1) * ((tzHour || 0) * 60 + (tzMinute || 0));\n if (offset) {\n set.minute = (set.minute || 0) - offset;\n }\n }\n\n function handleUnitlessShift() {\n if (isDefined(set.month)) {\n // \"next January\"\n set.unit = YEAR_INDEX;\n } else if (isDefined(set.weekday)) {\n // \"next Monday\"\n set.unit = WEEK_INDEX;\n }\n }\n\n function handleUnitlessNum(num) {\n if (isDefined(set.weekday)) {\n // \"The second Tuesday of March\"\n setOrdinalWeekday(num);\n } else if (isDefined(set.month)) {\n // \"The second of March\"\n set.date = set.num;\n }\n }\n\n function handleMidday(hour) {\n set.hour = hour % 24;\n if (hour > 23) {\n // If the date has hours past 24, we need to prevent it from traversing\n // into a new day as that would make it being part of a new week in\n // ambiguous dates such as \"Monday\".\n afterDateSet(function() {\n advanceDate(date, 'date', trunc(hour / 24));\n });\n }\n }\n\n function handleRelativeDay() {\n resetTime(date);\n if (isUndefined(set.unit)) {\n set.unit = DAY_INDEX;\n set.num = set.day;\n delete set.day;\n }\n }\n\n function handleRelativeUnit(unitIndex) {\n var num = isDefined(set.num) ? set.num : 1;\n\n // If a weekday is defined, there are 3 possible formats being applied:\n //\n // 1. \"the day after monday\": unit is days\n // 2. \"next monday\": short for \"next week monday\", unit is weeks\n // 3. \"the 2nd monday of next month\": unit is months\n //\n // In the first case, we need to set the weekday up front, as the day is\n // relative to it. The second case also needs to be handled up front for\n // formats like \"next monday at midnight\" which will have its weekday reset\n // if not set up front. The last case will set up the params necessary to\n // shift the weekday and allow separateAbsoluteUnits below to handle setting\n // it after the date has been shifted.\n if(isDefined(set.weekday)) {\n if(unitIndex === MONTH_INDEX) {\n setOrdinalWeekday(num);\n num = 1;\n } else {\n updateDate(date, { weekday: set.weekday }, true);\n delete set.weekday;\n }\n }\n\n if (set.half) {\n // Allow localized \"half\" as a standalone colloquialism. Purposely avoiding\n // the locale number system to reduce complexity. The units \"month\" and\n // \"week\" are purposely excluded in the English date formats below, as\n // \"half a week\" and \"half a month\" are meaningless as exact dates.\n num *= set.half;\n }\n\n if (isDefined(set.shift)) {\n // Shift and unit, ie \"next month\", \"last week\", etc.\n num *= set.shift;\n } else if (set.sign) {\n // Unit and sign, ie \"months ago\", \"weeks from now\", etc.\n num *= set.sign;\n }\n\n if (isDefined(set.day)) {\n // \"the day after tomorrow\"\n num += set.day;\n delete set.day;\n }\n\n // Formats like \"the 15th of last month\" or \"6:30pm of next week\"\n // contain absolute units in addition to relative ones, so separate\n // them here, remove them from the params, and set up a callback to\n // set them after the relative ones have been set.\n separateAbsoluteUnits(unitIndex);\n\n // Finally shift the unit.\n set[English.units[unitIndex]] = num;\n relative = true;\n }\n\n function handleEdge(edge, params) {\n var edgeIndex = params.unit, weekdayOfMonth;\n if (!edgeIndex) {\n // If we have \"the end of January\", then we need to find the unit index.\n iterateOverHigherDateParams(params, function(unitName, val, unit, i) {\n if (unitName === 'weekday' && isDefined(params.month)) {\n // If both a month and weekday exist, then we have a format like\n // \"the last tuesday in November, 2012\", where the \"last\" is still\n // relative to the end of the month, so prevent the unit \"weekday\"\n // from taking over.\n return;\n }\n edgeIndex = i;\n });\n }\n if (edgeIndex === MONTH_INDEX && isDefined(params.weekday)) {\n // If a weekday in a month exists (as described above),\n // then set it up to be set after the date has been shifted.\n weekdayOfMonth = params.weekday;\n delete params.weekday;\n }\n afterDateSet(function() {\n var stopIndex;\n // \"edge\" values that are at the very edge are \"2\" so the beginning of the\n // year is -2 and the end of the year is 2. Conversely, the \"last day\" is\n // actually 00:00am so it is 1. -1 is reserved but unused for now.\n if (edge < 0) {\n moveToBeginningOfUnit(date, edgeIndex, getOwn(options, 'locale'));\n } else if (edge > 0) {\n if (edge === 1) {\n stopIndex = DAY_INDEX;\n moveToBeginningOfUnit(date, DAY_INDEX);\n }\n moveToEndOfUnit(date, edgeIndex, getOwn(options, 'locale'), stopIndex);\n }\n if (isDefined(weekdayOfMonth)) {\n setWeekday(date, weekdayOfMonth, -edge);\n resetTime(date);\n }\n });\n if (edgeIndex === MONTH_INDEX) {\n params.specificity = DAY_INDEX;\n } else {\n params.specificity = edgeIndex - 1;\n }\n }\n\n function setOrdinalWeekday(num) {\n // If we have \"the 2nd Tuesday of June\", then pass the \"weekdayDir\"\n // flag along to updateDate so that the date does not accidentally traverse\n // into the previous month. This needs to be independent of the \"prefer\"\n // flag because we are only ensuring that the weekday is in the future, not\n // the entire date.\n set.weekday = 7 * (num - 1) + set.weekday;\n set.date = 1;\n weekdayDir = 1;\n }\n\n function separateAbsoluteUnits(unitIndex) {\n var params;\n\n iterateOverDateParams(set, function(name, val, unit, i) {\n // If there is a time unit set that is more specific than\n // the matched unit we have a string like \"5:30am in 2 minutes\",\n // which is meaningless, so invalidate the date...\n if (i >= unitIndex) {\n date.setTime(NaN);\n return false;\n } else if (i < unitIndex) {\n // ...otherwise set the params to set the absolute date\n // as a callback after the relative date has been set.\n params = params || {};\n params[name] = val;\n deleteDateParam(set, name);\n }\n });\n if (params) {\n afterDateSet(function() {\n updateDate(date, params, true, false, getOwn(options, 'prefer'), weekdayDir);\n });\n if (set.edge) {\n // \"the end of March of next year\"\n handleEdge(set.edge, params);\n delete set.edge;\n }\n }\n }\n\n if (contextDate && d) {\n // If a context date is passed (\"get\" and \"unitsFromNow\"),\n // then use it as the starting point.\n date = cloneDateByFlag(contextDate, true);\n } else {\n date = getNewDate();\n }\n\n _utc(date, getOwn(options, 'fromUTC'));\n\n if (isString(d)) {\n date = parseStringDate(d);\n } else if (isDate(d)) {\n date = cloneDateByFlag(d, hasOwn(options, 'clone') || forceClone);\n } else if (isObjectType(d)) {\n set = simpleClone(d);\n updateDate(date, set, true);\n } else if (isNumber(d) || d === null) {\n date.setTime(d);\n }\n // A date created by parsing a string presumes that the format *itself* is\n // UTC, but not that the date, once created, should be manipulated as such. In\n // other words, if you are creating a date object from a server time\n // \"2012-11-15T12:00:00Z\", in the majority of cases you are using it to create\n // a date that will, after creation, be manipulated as local, so reset the utc\n // flag here unless \"setUTC\" is also set.\n _utc(date, !!getOwn(options, 'setUTC'));\n return {\n set: set,\n date: date\n };\n}\n\nmodule.exports = getExtendedDate;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n isUndefined = require('../../common/internal/isUndefined');\n\nvar YEAR_INDEX = DateUnitIndexes.YEAR_INDEX;\n\nfunction iterateOverDateUnits(fn, startIndex, endIndex) {\n endIndex = endIndex || 0;\n if (isUndefined(startIndex)) {\n startIndex = YEAR_INDEX;\n }\n for (var index = startIndex; index >= endIndex; index--) {\n if (fn(DateUnits[index], index) === false) {\n break;\n }\n }\n}\n\nmodule.exports = iterateOverDateUnits;","'use strict';\n\nfunction isObjectType(obj, type) {\n return !!obj && (type || typeof obj) === 'object';\n}\n\nmodule.exports = isObjectType;","'use strict';\n\nmodule.exports = {\n ISO_FIRST_DAY_OF_WEEK: 1,\n ISO_FIRST_DAY_OF_WEEK_YEAR: 4\n};","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar forEachProperty = coreUtilityAliases.forEachProperty;\n\nfunction simpleMerge(target, source) {\n forEachProperty(source, function(val, key) {\n target[key] = val;\n });\n return target;\n}\n\nmodule.exports = simpleMerge;","'use strict';\n\nvar EnglishLocaleBaseDefinition = require('../var/EnglishLocaleBaseDefinition'),\n simpleMerge = require('../../common/internal/simpleMerge'),\n simpleClone = require('../../common/internal/simpleClone');\n\nfunction getEnglishVariant(v) {\n return simpleMerge(simpleClone(EnglishLocaleBaseDefinition), v);\n}\n\nmodule.exports = getEnglishVariant;","import {isNumber} from './types';\r\n\r\n/**\r\n * Takes a string, removes all formatting/cruft and returns the raw float value\r\n * @param {String} Formatted number\r\n * @param {String} Decimal type '.' or ','\r\n * @return {Number} Unformatted number\r\n *\r\n * https://github.com/openexchangerates/accounting.js/blob/master/accounting.js\r\n */\r\nexport const parse = (value, decimal = '.') => {\r\n // Return the value as-is if it's already a number\r\n if (isNumber(value)) {\r\n return value;\r\n }\r\n\r\n // Build regex to strip out everything except digits, decimal point and\r\n // minus sign\r\n let regex = new RegExp('[^0-9-' + decimal + ']', ['g']);\r\n let unformatted = parseFloat(\r\n ('' + value)\r\n // replace bracketed values with negatives\r\n .replace(/\\((.*)\\)/, '-$1')\r\n // strip out any cruft\r\n .replace(regex, '')\r\n // make sure decimal point is standard\r\n .replace(decimal, '.')\r\n );\r\n\r\n // This will fail silently\r\n return !isNaN(unformatted) ? unformatted : 0;\r\n};\r\n","/**\r\n * Array utilities\r\n */\r\n\r\nimport {matchCase} from './string';\r\n\r\n/**\r\n * Checks if given item can be found in the passed collection\r\n * @param {Array} arr collection\r\n * @param {Any} val item to search\r\n * @param {Boolean} caseSensitive respects case if true\r\n * @return {Boolean}\r\n */\r\nexport const has = (arr, val, caseSensitive) => {\r\n let sCase = Boolean(caseSensitive);\r\n for (var i = 0, l = arr.length; i < l; i++) {\r\n if (matchCase(arr[i].toString(), sCase) === val) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n","import {Feature} from '../feature';\r\nimport {\r\n ignoreCase, numSortAsc, numSortDesc,\r\n dateSortAsc, sortNumberStr, sortDateStr\r\n} from '../sort';\r\nimport {isArray, isObj, isEmpty} from '../types';\r\nimport {NUMBER, FORMATTED_NUMBER, DATE} from '../const';\r\n\r\n/**\r\n * Base class for Dropdown and CheckList UI components\r\n * @export\r\n * @class BaseDropdown\r\n * @extends {Feature}\r\n */\r\nexport class BaseDropdown extends Feature {\r\n\r\n /**\r\n * Creates an instance of BaseDropdown\r\n * @param {TableFilter} tf\r\n */\r\n constructor(tf) {\r\n super(tf, 'baseDropdown');\r\n\r\n let f = this.config;\r\n\r\n /**\r\n * Filter options custom sorter on a column basis\r\n * @type {Object}\r\n */\r\n this.customSorter = isObj(f.filter_options_sorter) &&\r\n isArray(f.filter_options_sorter.col) &&\r\n isArray(f.filter_options_sorter.comparer) ?\r\n f.filter_options_sorter :\r\n null;\r\n\r\n // TODO: move here all properties shared by Dropdown CheckList\r\n\r\n /**\r\n * Has custom options\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isCustom = false;\r\n\r\n /**\r\n * List of options values\r\n * @type {Array}\r\n * @private\r\n */\r\n this.opts = [];\r\n\r\n /**\r\n * List of options texts for custom values\r\n * @type {Array}\r\n * @private\r\n */\r\n this.optsTxt = [];\r\n\r\n /**\r\n * List of options to be excluded from the checklist filter\r\n * @type {Array}\r\n * @private\r\n */\r\n this.excludedOpts = [];\r\n }\r\n\r\n /**\r\n * Sort passed options based on the type of the specified column\r\n * @param {Number} colIndex Column index\r\n * @param {Array} [options=[]] Collection of values\r\n * @return {Array} Sorted values\r\n * @private\r\n */\r\n sortOptions(colIndex, options = []) {\r\n let tf = this.tf;\r\n\r\n if (tf.isCustomOptions(colIndex) || !tf.sortSlc ||\r\n (isArray(tf.sortSlc) && tf.sortSlc.indexOf(colIndex) === -1)) {\r\n return options;\r\n }\r\n\r\n let { caseSensitive, sortNumDesc } = tf;\r\n let compareFn;\r\n\r\n if (this.customSorter &&\r\n this.customSorter.col.indexOf(colIndex) !== -1) {\r\n var idx = this.customSorter.col.indexOf(colIndex);\r\n compareFn = this.customSorter.comparer[idx];\r\n }\r\n else if (tf.hasType(colIndex, [NUMBER, FORMATTED_NUMBER])) {\r\n let decimal = tf.getDecimal(colIndex);\r\n let comparer = numSortAsc;\r\n if (sortNumDesc === true || sortNumDesc.indexOf(colIndex) !== -1) {\r\n comparer = numSortDesc;\r\n }\r\n compareFn = sortNumberStr(comparer, decimal);\r\n }\r\n else if (tf.hasType(colIndex, [DATE])) {\r\n let locale = tf.feature('dateType').getLocale(colIndex);\r\n let comparer = dateSortAsc;\r\n compareFn = sortDateStr(comparer, locale);\r\n } else { // string\r\n compareFn = caseSensitive ? undefined : ignoreCase;\r\n }\r\n\r\n return options.sort(compareFn);\r\n }\r\n\r\n /**\r\n * Regenerate filters of specified columns and maintain selection if any\r\n * @param {Array} colIndexes Collection of column indexes\r\n * @private\r\n */\r\n refreshFilters(colIndexes) {\r\n colIndexes.forEach((colIdx) => {\r\n let values = this.getValues(colIdx);\r\n this.build(colIdx, this.tf.linkedFilters);\r\n this.selectOptions(colIdx, values);\r\n });\r\n }\r\n\r\n /**\r\n * Check passed row contains a valid linked value\r\n * @param {Number} rowIdx Row index\r\n * @param {Number} activeFilterIdx Current active filter index\r\n * @returns {Boolean}\r\n */\r\n isValidLinkedValue(rowIdx, activeFilterIdx) {\r\n let tf = this.tf;\r\n\r\n if (tf.disableExcludedOptions) {\r\n return true;\r\n }\r\n\r\n if (tf.paging) {\r\n if (!isEmpty(activeFilterIdx) && tf.isRowValid(rowIdx)) {\r\n return true;\r\n }\r\n } else {\r\n if (tf.isRowDisplayed(rowIdx)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","'use strict';\n\nvar DURATION_REG = require('../var/DURATION_REG'),\n classChecks = require('../../common/var/classChecks'),\n simpleCapitalize = require('../../common/internal/simpleCapitalize');\n\nvar isNumber = classChecks.isNumber;\n\nfunction getDateIncrementObject(amt) {\n var match, val, unit;\n if (isNumber(amt)) {\n return [amt, 'Milliseconds'];\n }\n match = amt.match(DURATION_REG);\n val = +match[1] || 1;\n unit = simpleCapitalize(match[2].toLowerCase());\n if (unit.match(/hour|minute|second/i)) {\n unit += 's';\n } else if (unit === 'Year') {\n unit = 'FullYear';\n } else if (unit === 'Week') {\n unit = 'Date';\n val *= 7;\n } else if (unit === 'Day') {\n unit = 'Date';\n }\n return [val, unit];\n}\n\nmodule.exports = getDateIncrementObject;","'use strict';\n\nvar MULTIPLIERS = {\n 'Hours': 60 * 60 * 1000,\n 'Minutes': 60 * 1000,\n 'Seconds': 1000,\n 'Milliseconds': 1\n};\n\nmodule.exports = MULTIPLIERS;","'use strict';\n\nvar MULTIPLIERS = require('../var/MULTIPLIERS'),\n callDateSet = require('../../common/internal/callDateSet'),\n callDateGet = require('../../common/internal/callDateGet');\n\nfunction incrementDate(src, amount, unit) {\n var mult = MULTIPLIERS[unit], d;\n if (mult) {\n d = new Date(src.getTime() + (amount * mult));\n } else {\n d = new Date(src);\n callDateSet(d, unit, callDateGet(src, unit) + amount);\n }\n return d;\n}\n\nmodule.exports = incrementDate;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks'),\n namespaceAliases = require('../../common/var/namespaceAliases');\n\nvar isDate = classChecks.isDate,\n sugarDate = namespaceAliases.sugarDate;\n\nfunction getDateForRange(d) {\n if (isDate(d)) {\n return d;\n } else if (d == null) {\n return new Date();\n } else if (sugarDate.create) {\n return sugarDate.create(d);\n }\n return new Date(d);\n}\n\nmodule.exports = getDateForRange;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks');\n\nvar isDate = classChecks.isDate;\n\nfunction getRangeMemberPrimitiveValue(m) {\n if (m == null) return m;\n return isDate(m) ? m.getTime() : m.valueOf();\n}\n\nmodule.exports = getRangeMemberPrimitiveValue;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks'),\n getRangeMemberPrimitiveValue = require('./getRangeMemberPrimitiveValue');\n\nvar isDate = classChecks.isDate;\n\nfunction cloneRangeMember(m) {\n if (isDate(m)) {\n return new Date(m.getTime());\n } else {\n return getRangeMemberPrimitiveValue(m);\n }\n}\n\nmodule.exports = cloneRangeMember;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n dateFormat = require('./dateFormat'),\n classChecks = require('../../common/var/classChecks'),\n assertDateIsValid = require('./assertDateIsValid'),\n getAdjustedUnitForDate = require('./getAdjustedUnitForDate');\n\nvar isFunction = classChecks.isFunction,\n localeManager = LocaleHelpers.localeManager;\n\nfunction dateRelative(d, dRelative, arg1, arg2) {\n var adu, format, type, localeCode, fn;\n assertDateIsValid(d);\n if (isFunction(arg1)) {\n fn = arg1;\n } else {\n localeCode = arg1;\n fn = arg2;\n }\n adu = getAdjustedUnitForDate(d, dRelative);\n if (fn) {\n format = fn.apply(d, adu.concat(localeManager.get(localeCode)));\n if (format) {\n return dateFormat(d, format, localeCode);\n }\n }\n // Adjust up if time is in ms, as this doesn't\n // look very good for a standard relative date.\n if (adu[1] === 0) {\n adu[1] = 1;\n adu[0] = 1;\n }\n if (dRelative) {\n type = 'duration';\n } else if (adu[2] > 0) {\n type = 'future';\n } else {\n type = 'past';\n }\n return localeManager.get(localeCode).getRelativeFormat(adu, type);\n}\n\nmodule.exports = dateRelative;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n trim = require('../../common/internal/trim'),\n getMonth = require('./getMonth'),\n isDefined = require('../../common/internal/isDefined'),\n getNewDate = require('./getNewDate'),\n compareDay = require('./compareDay'),\n getWeekday = require('./getWeekday'),\n dateIsValid = require('./dateIsValid'),\n classChecks = require('../../common/var/classChecks'),\n compareDate = require('./compareDate');\n\nvar isString = classChecks.isString,\n English = LocaleHelpers.English;\n\nfunction fullCompareDate(date, d, margin) {\n var tmp;\n if (!dateIsValid(date)) return;\n if (isString(d)) {\n d = trim(d).toLowerCase();\n switch(true) {\n case d === 'future': return date.getTime() > getNewDate().getTime();\n case d === 'past': return date.getTime() < getNewDate().getTime();\n case d === 'today': return compareDay(date);\n case d === 'tomorrow': return compareDay(date, 1);\n case d === 'yesterday': return compareDay(date, -1);\n case d === 'weekday': return getWeekday(date) > 0 && getWeekday(date) < 6;\n case d === 'weekend': return getWeekday(date) === 0 || getWeekday(date) === 6;\n\n case (isDefined(tmp = English.weekdayMap[d])):\n return getWeekday(date) === tmp;\n case (isDefined(tmp = English.monthMap[d])):\n return getMonth(date) === tmp;\n }\n }\n return compareDate(date, d, margin);\n}\n\nmodule.exports = fullCompareDate;","'use strict';\n\nvar dateIsValid = require('./dateIsValid');\n\nfunction assertDateIsValid(d) {\n if (!dateIsValid(d)) {\n throw new TypeError('Date is not valid');\n }\n}\n\nmodule.exports = assertDateIsValid;","'use strict';\n\nvar _utc = require('../../common/var/_utc'),\n trunc = require('../../common/var/trunc'),\n tzOffset = require('./tzOffset'),\n padNumber = require('../../common/internal/padNumber'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar abs = mathAliases.abs;\n\nfunction getUTCOffset(d, iso) {\n var offset = _utc(d) ? 0 : tzOffset(d), hours, mins, colon;\n colon = iso === true ? ':' : '';\n if (!offset && iso) return 'Z';\n hours = padNumber(trunc(-offset / 60), 2, true);\n mins = padNumber(abs(offset % 60), 2);\n return hours + colon + mins;\n}\n\nmodule.exports = getUTCOffset;","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getHours(d) {\n return callDateGet(d, 'Hours');\n}\n\nmodule.exports = getHours;","'use strict';\n\nvar CoreOutputFormats = {\n 'ISO8601': '{yyyy}-{MM}-{dd}T{HH}:{mm}:{ss}.{SSS}{Z}',\n 'RFC1123': '{Dow}, {dd} {Mon} {yyyy} {HH}:{mm}:{ss} {ZZ}',\n 'RFC1036': '{Weekday}, {dd}-{Mon}-{yy} {HH}:{mm}:{ss} {ZZ}'\n};\n\nmodule.exports = CoreOutputFormats;","'use strict';\n\nvar CoreOutputFormats = require('../var/CoreOutputFormats'),\n formattingTokens = require('../var/formattingTokens'),\n assertDateIsValid = require('./assertDateIsValid');\n\nvar dateFormatMatcher = formattingTokens.dateFormatMatcher;\n\nfunction dateFormat(d, format, localeCode) {\n assertDateIsValid(d);\n format = CoreOutputFormats[format] || format || '{long}';\n return dateFormatMatcher(format, d, localeCode);\n}\n\nmodule.exports = dateFormat;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks'),\n simpleClone = require('../../common/internal/simpleClone'),\n isObjectType = require('../../common/internal/isObjectType'),\n getDateParamsFromString = require('./getDateParamsFromString'),\n collectDateParamsFromArguments = require('./collectDateParamsFromArguments');\n\nvar isNumber = classChecks.isNumber,\n isString = classChecks.isString;\n\nfunction collectDateArguments(args, allowDuration) {\n var arg1 = args[0], arg2 = args[1];\n if (allowDuration && isString(arg1)) {\n arg1 = getDateParamsFromString(arg1);\n } else if (isNumber(arg1) && isNumber(arg2)) {\n arg1 = collectDateParamsFromArguments(args);\n arg2 = null;\n } else {\n if (isObjectType(arg1)) {\n arg1 = simpleClone(arg1);\n }\n }\n return [arg1, arg2];\n}\n\nmodule.exports = collectDateArguments;","'use strict';\n\nvar updateDate = require('./updateDate'),\n collectDateArguments = require('./collectDateArguments');\n\nfunction advanceDateWithArgs(d, args, dir) {\n args = collectDateArguments(args, true);\n return updateDate(d, args[0], args[1], dir);\n}\n\nmodule.exports = advanceDateWithArgs;","'use strict';\n\nvar getExtendedDate = require('./getExtendedDate');\n\nfunction createDateWithContext(contextDate, d, options, forceClone) {\n return getExtendedDate(contextDate, d, options, forceClone).date;\n}\n\nmodule.exports = createDateWithContext;","'use strict';\n\nvar MINUTES = require('../var/MINUTES'),\n DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n _utc = require('../../common/var/_utc'),\n tzOffset = require('./tzOffset'),\n cloneDate = require('./cloneDate'),\n isDefined = require('../../common/internal/isDefined'),\n advanceDate = require('./advanceDate'),\n dateIsValid = require('./dateIsValid'),\n moveToEndOfUnit = require('./moveToEndOfUnit'),\n getExtendedDate = require('./getExtendedDate'),\n moveToBeginningOfUnit = require('./moveToBeginningOfUnit');\n\nvar MONTH_INDEX = DateUnitIndexes.MONTH_INDEX;\n\nfunction compareDate(date, d, margin, localeCode, options) {\n var loMargin = 0, hiMargin = 0, timezoneShift, compareEdges, override, min, max, p, t;\n\n function getTimezoneShift() {\n // If there is any specificity in the date then we're implicitly not\n // checking absolute time, so ignore timezone shifts.\n if (p.set && p.set.specificity) {\n return 0;\n }\n return (tzOffset(p.date) - tzOffset(date)) * MINUTES;\n }\n\n function addSpecificUnit() {\n var unit = DateUnits[p.set.specificity];\n return advanceDate(cloneDate(p.date), unit.name, 1).getTime() - 1;\n }\n\n if (_utc(date)) {\n options = options || {};\n options.fromUTC = true;\n options.setUTC = true;\n }\n\n p = getExtendedDate(null, d, options, true);\n\n if (margin > 0) {\n loMargin = hiMargin = margin;\n override = true;\n }\n if (!dateIsValid(p.date)) return false;\n if (p.set && p.set.specificity) {\n if (isDefined(p.set.edge) || isDefined(p.set.shift)) {\n compareEdges = true;\n moveToBeginningOfUnit(p.date, p.set.specificity, localeCode);\n }\n if (compareEdges || p.set.specificity === MONTH_INDEX) {\n max = moveToEndOfUnit(cloneDate(p.date), p.set.specificity, localeCode).getTime();\n } else {\n max = addSpecificUnit();\n }\n if (!override && isDefined(p.set.sign) && p.set.specificity) {\n // If the time is relative, there can occasionally be an disparity between\n // the relative date and \"now\", which it is being compared to, so set an\n // extra margin to account for this.\n loMargin = 50;\n hiMargin = -50;\n }\n }\n t = date.getTime();\n min = p.date.getTime();\n max = max || min;\n timezoneShift = getTimezoneShift();\n if (timezoneShift) {\n min -= timezoneShift;\n max -= timezoneShift;\n }\n return t >= (min - loMargin) && t <= (max + hiMargin);\n}\n\nmodule.exports = compareDate;","'use strict';\n\nvar setWeekday = require('./setWeekday'),\n getWeekday = require('./getWeekday'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar ceil = mathAliases.ceil;\n\nfunction moveToEndOfWeek(d, firstDayOfWeek) {\n var target = firstDayOfWeek - 1;\n setWeekday(d, ceil((getWeekday(d) - target) / 7) * 7 + target);\n return d;\n}\n\nmodule.exports = moveToEndOfWeek;","'use strict';\n\nvar getOwnKey = require('../../common/internal/getOwnKey');\n\nfunction getDateParamKey(params, key) {\n return getOwnKey(params, key) ||\n getOwnKey(params, key + 's') ||\n (key === 'day' && getOwnKey(params, 'date'));\n}\n\nmodule.exports = getDateParamKey;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n setDate = require('./setDate'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge'),\n moveToBeginningOfWeek = require('./moveToBeginningOfWeek');\n\nvar MONTH_INDEX = DateUnitIndexes.MONTH_INDEX;\n\nfunction moveToFirstDayOfWeekYear(d, firstDayOfWeek, firstDayOfWeekYear) {\n setUnitAndLowerToEdge(d, MONTH_INDEX);\n setDate(d, firstDayOfWeekYear);\n moveToBeginningOfWeek(d, firstDayOfWeek);\n}\n\nmodule.exports = moveToFirstDayOfWeekYear;","'use strict';\n\nvar ISODefaults = require('../var/ISODefaults'),\n getDate = require('./getDate'),\n setDate = require('./setDate'),\n setYear = require('./setYear'),\n getYear = require('./getYear'),\n getMonth = require('./getMonth'),\n setMonth = require('./setMonth'),\n cloneDate = require('./cloneDate'),\n getWeekday = require('./getWeekday'),\n setWeekday = require('./setWeekday'),\n classChecks = require('../../common/var/classChecks'),\n moveToFirstDayOfWeekYear = require('./moveToFirstDayOfWeekYear');\n\nvar isNumber = classChecks.isNumber,\n ISO_FIRST_DAY_OF_WEEK = ISODefaults.ISO_FIRST_DAY_OF_WEEK,\n ISO_FIRST_DAY_OF_WEEK_YEAR = ISODefaults.ISO_FIRST_DAY_OF_WEEK_YEAR;\n\nfunction setISOWeekNumber(d, num) {\n if (isNumber(num)) {\n // Intentionally avoiding updateDate here to prevent circular dependencies.\n var isoWeek = cloneDate(d), dow = getWeekday(d);\n moveToFirstDayOfWeekYear(isoWeek, ISO_FIRST_DAY_OF_WEEK, ISO_FIRST_DAY_OF_WEEK_YEAR);\n setDate(isoWeek, getDate(isoWeek) + 7 * (num - 1));\n setYear(d, getYear(isoWeek));\n setMonth(d, getMonth(isoWeek));\n setDate(d, getDate(isoWeek));\n setWeekday(d, dow || 7);\n }\n return d.getTime();\n}\n\nmodule.exports = setISOWeekNumber;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n getLowerUnitIndex = require('./getLowerUnitIndex');\n\nfunction walkUnitDown(unitIndex, fn) {\n while (unitIndex >= 0) {\n if (fn(DateUnits[unitIndex], unitIndex) === false) {\n break;\n }\n unitIndex = getLowerUnitIndex(unitIndex);\n }\n}\n\nmodule.exports = walkUnitDown;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge');\n\nvar HOURS_INDEX = DateUnitIndexes.HOURS_INDEX;\n\nfunction resetTime(d) {\n return setUnitAndLowerToEdge(d, HOURS_INDEX);\n}\n\nmodule.exports = resetTime;","'use strict';\n\nmodule.exports = 60 * 1000;","'use strict';\n\nvar mathAliases = require('../../common/var/mathAliases'),\n iterateOverDateUnits = require('./iterateOverDateUnits');\n\nvar abs = mathAliases.abs;\n\nfunction getAdjustedUnit(ms, fn) {\n var unitIndex = 0, value = 0;\n iterateOverDateUnits(function(unit, i) {\n value = abs(fn(unit));\n if (value >= 1) {\n unitIndex = i;\n return false;\n }\n });\n return [value, unitIndex, ms];\n}\n\nmodule.exports = getAdjustedUnit;","'use strict';\n\nvar mathAliases = require('../var/mathAliases');\n\nvar abs = mathAliases.abs,\n pow = mathAliases.pow,\n round = mathAliases.round;\n\nfunction withPrecision(val, precision, fn) {\n var multiplier = pow(10, abs(precision || 0));\n fn = fn || round;\n if (precision < 0) multiplier = 1 / multiplier;\n return fn(val * multiplier) / multiplier;\n}\n\nmodule.exports = withPrecision;","'use strict';\n\nmodule.exports = String.fromCharCode;","'use strict';\n\nvar getYear = require('./getYear'),\n getMonth = require('./getMonth'),\n callDateGet = require('../../common/internal/callDateGet');\n\nfunction getDaysInMonth(d) {\n return 32 - callDateGet(new Date(getYear(d), getMonth(d), 32), 'Date');\n}\n\nmodule.exports = getDaysInMonth;","'use strict';\n\nfunction getRegNonCapturing(src, opt) {\n if (src.length > 1) {\n src = '(?:' + src + ')';\n }\n if (opt) {\n src += '?';\n }\n return src;\n}\n\nmodule.exports = getRegNonCapturing;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar classToString = coreUtilityAliases.classToString;\n\nfunction isClass(obj, className, str) {\n if (!str) {\n str = classToString(obj);\n }\n return str === '[object '+ className +']';\n}\n\nmodule.exports = isClass;","'use strict';\n\nfunction map(arr, fn) {\n // perf: Not using fixed array len here as it may be sparse.\n var result = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n if (i in arr) {\n result.push(fn(arr[i], i));\n }\n }\n return result;\n}\n\nmodule.exports = map;","'use strict';\n\nvar LocalizedParsingTokens = {\n 'year': {\n base: 'yyyy',\n requiresSuffix: true\n },\n 'month': {\n base: 'MM',\n requiresSuffix: true\n },\n 'date': {\n base: 'dd',\n requiresSuffix: true\n },\n 'hour': {\n base: 'hh',\n requiresSuffixOr: ':'\n },\n 'minute': {\n base: 'mm'\n },\n 'second': {\n base: 'ss'\n },\n 'num': {\n src: '\\\\d+',\n requiresNumerals: true\n }\n};\n\nmodule.exports = LocalizedParsingTokens;","'use strict';\n\nvar ParsingTokens = {\n 'yyyy': {\n param: 'year',\n src: '\\\\d{4}'\n },\n 'MM': {\n param: 'month',\n src: '[01]?\\\\d'\n },\n 'dd': {\n param: 'date',\n src: '[0123]?\\\\d'\n },\n 'hh': {\n param: 'hour',\n src: '[0-2]?\\\\d'\n },\n 'mm': {\n param: 'minute',\n src: '[0-5]\\\\d'\n },\n 'ss': {\n param: 'second',\n src: '[0-5]\\\\d(?:[,.]\\\\d+)?'\n },\n 'yy': {\n param: 'year',\n src: '\\\\d{2}'\n },\n 'y': {\n param: 'year',\n src: '\\\\d'\n },\n 'yearSign': {\n src: '[+-]',\n sign: true\n },\n 'tzHour': {\n src: '[0-1]\\\\d'\n },\n 'tzMinute': {\n src: '[0-5]\\\\d'\n },\n 'tzSign': {\n src: '[+−-]',\n sign: true\n },\n 'ihh': {\n param: 'hour',\n src: '[0-2]?\\\\d(?:[,.]\\\\d+)?'\n },\n 'imm': {\n param: 'minute',\n src: '[0-5]\\\\d(?:[,.]\\\\d+)?'\n },\n 'GMT': {\n param: 'utc',\n src: 'GMT',\n val: 1\n },\n 'Z': {\n param: 'utc',\n src: 'Z',\n val: 1\n },\n 'timestamp': {\n src: '\\\\d+'\n }\n};\n\nmodule.exports = ParsingTokens;","'use strict';\n\nvar getEnglishVariant = require('../internal/getEnglishVariant');\n\nvar AmericanEnglishDefinition = getEnglishVariant({\n 'mdy': true,\n 'firstDayOfWeek': 0,\n 'firstDayOfWeekYear': 1,\n 'short': '{MM}/{dd}/{yyyy}',\n 'medium': '{Month} {d}, {yyyy}',\n 'long': '{Month} {d}, {yyyy} {time}',\n 'full': '{Weekday}, {Month} {d}, {yyyy} {time}',\n 'stamp': '{Dow} {Mon} {d} {yyyy} {time}',\n 'time': '{h}:{mm} {TT}'\n});\n\nmodule.exports = AmericanEnglishDefinition;","'use strict';\n\nrequire('./date');\nrequire('./range');\n\nmodule.exports = require('sugar-core');","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\r\n} catch (e) {\r\n\t// This works if the window reference is available\r\n\tif (typeof window === \"object\") g = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n","import {parse as parseNb} from './number';\r\nimport {Date as SugarDate} from 'sugar-date';\r\n\r\n/** Sorting utilities */\r\n\r\n/**\r\n * Case insensitive compare function for passed strings\r\n * @param {String} First string\r\n * @param {String} Second string\r\n * @return {Number} -1 if first string lower than second one\r\n * 0 if first string same order as second one\r\n * 1 if first string greater than second one\r\n */\r\nexport const ignoreCase = (a, b) => {\r\n let x = a.toLowerCase();\r\n let y = b.toLowerCase();\r\n return x < y ? -1 : (x > y ? 1 : 0);\r\n};\r\n\r\n/**\r\n * Compare function for sorting passed numbers in ascending manner\r\n * @param {Number} First number\r\n * @param {Number} Second number\r\n * @return {Number} Negative, zero or positive number\r\n */\r\nexport const numSortAsc = (a, b) => (a - b);\r\n\r\n/**\r\n * Compare function for sorting passed numbers in descending manner\r\n * @param {Number} First number\r\n * @param {Number} Second number\r\n * @return {Number} Negative, zero or positive number\r\n */\r\nexport const numSortDesc = (a, b) => (b - a);\r\n\r\n/**\r\n * Compare function for sorting passed dates in ascending manner according to\r\n * the corresponding UTC numeric value (returned by getTime)\r\n * @param {Date} First date object\r\n * @param {Date} Second date object\r\n * @return {Number} Negative, zero or positive number\r\n */\r\nexport const dateSortAsc = (date1, date2) => date1.getTime() - date2.getTime();\r\n\r\n/**\r\n * Compare function for sorting passed dates in descending manner according to\r\n * the corresponding UTC numeric value (returned by getTime)\r\n * @param {Date} First date object\r\n * @param {Date} Second date object\r\n * @return {Number} Negative, zero or positive number\r\n */\r\nexport const dateSortDesc = (date1, date2) => date2.getTime() - date1.getTime();\r\n\r\n/**\r\n * Curried compare function for sorting passed formatted numbers in desired\r\n * fashion according to supplied compare function and decimal separator\r\n * @param {Function} Compare function\r\n * @param {String} [decimal=','] Decimal separator\r\n * @return {Function} Compare function receiving parsed numeric arguments\r\n */\r\nexport const sortNumberStr = (compareFn, decimal = ',') => {\r\n return (numStr1, numStr2) => {\r\n let num1 = parseNb(numStr1, decimal);\r\n let num2 = parseNb(numStr2, decimal);\r\n return compareFn(num1, num2);\r\n };\r\n};\r\n\r\n/**\r\n * Curried compare function for sorting passed formatted dates in desired\r\n * fashion according to supplied compare function and locale\r\n * @param {Function} Compare function\r\n * @param {String} [locale='en-us'] Locale code\r\n * @return {Function} Compare function receiving parsed date arguments\r\n */\r\nexport const sortDateStr = (compareFn, locale = 'en-us') => {\r\n return (dateStr1, dateStr2) => {\r\n let date1 = SugarDate.create(dateStr1, locale);\r\n let date2 = SugarDate.create(dateStr2, locale);\r\n return compareFn(date1, date2);\r\n };\r\n};\r\n","import {BaseDropdown} from './baseDropdown';\r\nimport {\r\n addClass, createCheckItem, createText, createElm, elm, removeClass, tag\r\n} from '../dom';\r\nimport {has} from '../array';\r\nimport {matchCase, trim, rgxEsc} from '../string';\r\nimport {addEvt, removeEvt, targetEvt} from '../event';\r\nimport {isEmpty} from '../types';\r\nimport {CHECKLIST, NONE} from '../const';\r\nimport {defaultsStr, defaultsBool} from '../settings';\r\n\r\n/**\r\n * Checklist filter UI component\r\n * @export\r\n * @class CheckList\r\n * @extends {BaseDropdown}\r\n */\r\nexport class CheckList extends BaseDropdown {\r\n\r\n /**\r\n * Creates an instance of CheckList\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'checkList');\r\n\r\n let f = this.config;\r\n\r\n /**\r\n * List of container DOM elements\r\n * @type {Array}\r\n */\r\n this.containers = [];\r\n\r\n /**\r\n * Css class for the container of the checklist filter (div)\r\n * @type {String}\r\n */\r\n this.containerCssClass = defaultsStr(f.div_checklist_css_class,\r\n 'div_checklist');\r\n\r\n /**\r\n * Css class for the checklist filter element (ul)\r\n * @type {String}\r\n */\r\n this.filterCssClass = defaultsStr(f.checklist_css_class,\r\n 'flt_checklist');\r\n\r\n /**\r\n * Css class for the item of a checklist (li)\r\n * @type {String}\r\n */\r\n this.itemCssClass = defaultsStr(f.checklist_item_css_class,\r\n 'flt_checklist_item');\r\n\r\n /**\r\n * Css class for a selected item of a checklist (li)\r\n * @type {String}\r\n */\r\n this.selectedItemCssClass = defaultsStr(\r\n f.checklist_selected_item_css_class,\r\n 'flt_checklist_slc_item'\r\n );\r\n\r\n /**\r\n * Text placed in the filter's container when load filter on demand\r\n * feature is enabled\r\n * @type {String}\r\n */\r\n this.activateText = defaultsStr(\r\n f.activate_checklist_text,\r\n 'Click to load filter data'\r\n );\r\n\r\n /**\r\n * Css class for a disabled item of a checklist (li)\r\n * @type {String}\r\n */\r\n this.disabledItemCssClass = defaultsStr(\r\n f.checklist_item_disabled_css_class,\r\n 'flt_checklist_item_disabled'\r\n );\r\n\r\n /**\r\n * Enable the reset filter option as first item\r\n * @type {Boolean}\r\n */\r\n this.enableResetOption = defaultsBool(f.enable_checklist_reset_filter,\r\n true);\r\n\r\n /**\r\n * Prefix for container element ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfx = 'chkdiv_';\r\n }\r\n\r\n /**\r\n * Checklist option click event handler\r\n * @param {Event} evt\r\n * @private\r\n */\r\n optionClick(evt) {\r\n let elm = targetEvt(evt);\r\n let tf = this.tf;\r\n\r\n this.emitter.emit('filter-focus', tf, elm);\r\n this.setItemOption(elm);\r\n tf.filter();\r\n }\r\n\r\n /**\r\n * Checklist container click event handler for load-on-demand feature\r\n * @param {Event} evt\r\n * @private\r\n */\r\n onCheckListClick(evt) {\r\n let elm = targetEvt(evt);\r\n if (this.tf.loadFltOnDemand && elm.getAttribute('filled') === '0') {\r\n let ct = elm.getAttribute('ct');\r\n let div = this.containers[ct];\r\n this.build(ct);\r\n removeEvt(div, 'click', (evt) => this.onCheckListClick(evt));\r\n }\r\n }\r\n\r\n /**\r\n * Refresh all checklist filters\r\n */\r\n refreshAll() {\r\n let colIdxs = this.tf.getFiltersByType(CHECKLIST, true);\r\n this.refreshFilters(colIdxs);\r\n }\r\n\r\n /**\r\n * Initialize checklist filter\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} isExternal External filter flag\r\n * @param {DOMElement} container Dom element containing the filter\r\n */\r\n init(colIndex, isExternal, container) {\r\n let tf = this.tf;\r\n let externalFltTgtId = isExternal ?\r\n tf.externalFltIds[colIndex] : null;\r\n\r\n let divCont = createElm('div',\r\n ['id', `${this.prfx}${colIndex}_${tf.id}`],\r\n ['ct', colIndex], ['filled', '0']);\r\n divCont.className = this.containerCssClass;\r\n\r\n //filter is appended in desired element\r\n if (externalFltTgtId) {\r\n elm(externalFltTgtId).appendChild(divCont);\r\n } else {\r\n container.appendChild(divCont);\r\n }\r\n\r\n this.containers[colIndex] = divCont;\r\n tf.fltIds.push(tf.buildFilterId(colIndex));\r\n\r\n if (!tf.loadFltOnDemand) {\r\n this.build(colIndex);\r\n } else {\r\n addEvt(divCont, 'click', (evt) => this.onCheckListClick(evt));\r\n divCont.appendChild(createText(this.activateText));\r\n }\r\n\r\n this.emitter.on(\r\n ['build-checklist-filter'],\r\n (tf, colIndex, isLinked) => this.build(colIndex, isLinked)\r\n );\r\n\r\n this.emitter.on(\r\n ['select-checklist-options'],\r\n (tf, colIndex, values) => this.selectOptions(colIndex, values)\r\n );\r\n\r\n this.emitter.on(['rows-changed'], () => this.refreshAll());\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Build checklist UI\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} isLinked Enable linked filters behaviour\r\n */\r\n build(colIndex, isLinked = false) {\r\n let tf = this.tf;\r\n colIndex = Number(colIndex);\r\n\r\n this.emitter.emit('before-populating-filter', tf, colIndex);\r\n\r\n /** @inherited */\r\n this.opts = [];\r\n /** @inherited */\r\n this.optsTxt = [];\r\n\r\n let flt = this.containers[colIndex];\r\n let ul = createElm('ul',\r\n ['id', tf.fltIds[colIndex]],\r\n ['colIndex', colIndex]);\r\n ul.className = this.filterCssClass;\r\n\r\n let caseSensitive = tf.caseSensitive;\r\n /** @inherited */\r\n this.isCustom = tf.isCustomOptions(colIndex);\r\n\r\n //Retrieves custom values\r\n if (this.isCustom) {\r\n let customValues = tf.getCustomOptions(colIndex);\r\n this.opts = customValues[0];\r\n this.optsTxt = customValues[1];\r\n }\r\n\r\n let activeIdx;\r\n let activeFilterId = tf.getActiveFilterId();\r\n\r\n if (isLinked && activeFilterId) {\r\n activeIdx = tf.getColumnIndexFromFilterId(activeFilterId);\r\n }\r\n\r\n let filteredDataCol = [];\r\n if (isLinked && tf.disableExcludedOptions) {\r\n /** @inherited */\r\n this.excludedOpts = [];\r\n }\r\n\r\n flt.innerHTML = '';\r\n\r\n let eachRow = tf.eachRow();\r\n eachRow(\r\n (row) => {\r\n let cellValue = tf.getCellValue(row.cells[colIndex]);\r\n //Vary Peter's patch\r\n let cellString = matchCase(cellValue, caseSensitive);\r\n // checks if celldata is already in array\r\n if (!has(this.opts, cellString, caseSensitive)) {\r\n this.opts.push(cellValue);\r\n }\r\n let filteredCol = filteredDataCol[colIndex];\r\n if (isLinked && tf.disableExcludedOptions) {\r\n if (!filteredCol) {\r\n filteredCol = tf.getVisibleColumnValues(colIndex);\r\n }\r\n if (!has(filteredCol, cellString, caseSensitive) &&\r\n !has(this.excludedOpts, cellString, caseSensitive)) {\r\n this.excludedOpts.push(cellValue);\r\n }\r\n }\r\n },\r\n // continue conditions function\r\n (row, k) => {\r\n // excluded rows don't need to appear on selects as always valid\r\n if (tf.excludeRows.indexOf(k) !== -1) {\r\n return true;\r\n }\r\n\r\n // checks if row has expected number of cells\r\n if (row.cells.length !== tf.nbCells || this.isCustom) {\r\n return true;\r\n }\r\n\r\n if (isLinked && !this.isValidLinkedValue(k, activeIdx)) {\r\n return true;\r\n }\r\n }\r\n );\r\n\r\n //sort options\r\n this.opts = this.sortOptions(colIndex, this.opts);\r\n if (this.excludedOpts) {\r\n this.excludedOpts = this.sortOptions(colIndex, this.excludedOpts);\r\n }\r\n\r\n this.addChecks(colIndex, ul);\r\n\r\n if (tf.loadFltOnDemand) {\r\n flt.innerHTML = '';\r\n }\r\n flt.appendChild(ul);\r\n flt.setAttribute('filled', '1');\r\n\r\n this.emitter.emit('after-populating-filter', tf, colIndex, flt);\r\n }\r\n\r\n /**\r\n * Add checklist options\r\n * @param {Number} colIndex Column index\r\n * @param {Object} ul Ul element\r\n * @private\r\n */\r\n addChecks(colIndex, ul) {\r\n let tf = this.tf;\r\n let chkCt = this.addTChecks(colIndex, ul);\r\n\r\n for (let y = 0; y < this.opts.length; y++) {\r\n let val = this.opts[y]; //item value\r\n let lbl = this.isCustom ? this.optsTxt[y] : val; //item text\r\n let fltId = tf.fltIds[colIndex];\r\n let lblIdx = y + chkCt;\r\n let li = createCheckItem(`${fltId}_${lblIdx}`, val, lbl,\r\n ['data-idx', lblIdx]);\r\n li.className = this.itemCssClass;\r\n\r\n if (tf.linkedFilters && tf.disableExcludedOptions &&\r\n has(this.excludedOpts, matchCase(val, tf.caseSensitive),\r\n tf.caseSensitive)) {\r\n addClass(li, this.disabledItemCssClass);\r\n li.check.disabled = true;\r\n li.disabled = true;\r\n } else {\r\n addEvt(li.check, 'click', evt => this.optionClick(evt));\r\n }\r\n ul.appendChild(li);\r\n\r\n if (val === '') {\r\n //item is hidden\r\n li.style.display = NONE;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Add checklist header option\r\n * @param {Number} colIndex Column index\r\n * @param {Object} ul Ul element\r\n * @private\r\n */\r\n addTChecks(colIndex, ul) {\r\n let tf = this.tf;\r\n let chkCt = 1;\r\n let fltId = tf.fltIds[colIndex];\r\n let li0 = createCheckItem(`${fltId}_0`, '',\r\n tf.getClearFilterText(colIndex), ['data-idx', 0]);\r\n li0.className = this.itemCssClass;\r\n ul.appendChild(li0);\r\n\r\n addEvt(li0.check, 'click', evt => this.optionClick(evt));\r\n\r\n if (!this.enableResetOption) {\r\n li0.style.display = NONE;\r\n }\r\n\r\n if (tf.enableEmptyOption) {\r\n let li1 = createCheckItem(`${fltId}_1`, tf.emOperator,\r\n tf.emptyText, ['data-idx', 1]);\r\n li1.className = this.itemCssClass;\r\n ul.appendChild(li1);\r\n addEvt(li1.check, 'click', evt => this.optionClick(evt));\r\n chkCt++;\r\n }\r\n\r\n if (tf.enableNonEmptyOption) {\r\n let li2 = createCheckItem(`${fltId}_2`, tf.nmOperator,\r\n tf.nonEmptyText, ['data-idx', 2]);\r\n li2.className = this.itemCssClass;\r\n ul.appendChild(li2);\r\n addEvt(li2.check, 'click', evt => this.optionClick(evt));\r\n chkCt++;\r\n }\r\n return chkCt;\r\n }\r\n\r\n /**\r\n * Set/unset value of passed item option in filter's DOM element attribute\r\n * @param {Object} o checklist option DOM element\r\n * @private\r\n */\r\n setItemOption(o) {\r\n if (!o) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n let chkValue = o.value; //checked item value\r\n let chkIndex = o.dataset.idx;\r\n let colIdx = tf.getColumnIndexFromFilterId(o.id);\r\n let n = tf.getFilterElement(parseInt(colIdx, 10));\r\n let items = n.childNodes;\r\n let li = items[chkIndex];\r\n //selected values (ul tag)\r\n let slcValues = n.getAttribute('value') || '';\r\n //selected items indexes (ul tag)\r\n let slcIndexes = n.getAttribute('indexes') || '';\r\n\r\n if (o.checked) {\r\n //show all item\r\n if (chkValue === '') {\r\n //items indexes\r\n let indexes = slcIndexes.split(tf.separator);\r\n indexes.forEach(idx => {\r\n idx = Number(idx);\r\n let li = items[idx];\r\n let chx = tag(li, 'input')[0];\r\n if (chx && idx > 0) {\r\n chx.checked = false;\r\n removeClass(li, this.selectedItemCssClass);\r\n }\r\n });\r\n\r\n n.setAttribute('value', '');\r\n n.setAttribute('indexes', '');\r\n\r\n } else {\r\n let indexes = slcIndexes + chkIndex + tf.separator;\r\n let values =\r\n trim(slcValues + ' ' + chkValue + ' ' + tf.orOperator);\r\n\r\n n.setAttribute('value', values);\r\n n.setAttribute('indexes', indexes);\r\n\r\n //uncheck first option\r\n let chx0 = tag(items[0], 'input')[0];\r\n if (chx0) {\r\n chx0.checked = false;\r\n }\r\n }\r\n\r\n removeClass(items[0], this.selectedItemCssClass);\r\n addClass(li, this.selectedItemCssClass);\r\n } else { //removes values and indexes\r\n let replaceValue =\r\n new RegExp(rgxEsc(chkValue + ' ' + tf.orOperator));\r\n let values = slcValues.replace(replaceValue, '');\r\n let replaceIndex = new RegExp(rgxEsc(chkIndex + tf.separator));\r\n let indexes = slcIndexes.replace(replaceIndex, '');\r\n\r\n n.setAttribute('value', trim(values));\r\n n.setAttribute('indexes', indexes);\r\n\r\n removeClass(li, this.selectedItemCssClass);\r\n }\r\n }\r\n\r\n /**\r\n * Select filter options programmatically\r\n * @param {Number} colIndex Column index\r\n * @param {Array} values Array of option values to select\r\n */\r\n selectOptions(colIndex, values = []) {\r\n let tf = this.tf;\r\n let flt = tf.getFilterElement(colIndex);\r\n if (!flt || values.length === 0) {\r\n return;\r\n }\r\n\r\n let lis = tag(flt, 'li');\r\n\r\n flt.setAttribute('value', '');\r\n flt.setAttribute('indexes', '');\r\n\r\n [].forEach.call(lis, (li) => {\r\n let chk = tag(li, 'input')[0];\r\n let chkVal = matchCase(chk.value, tf.caseSensitive);\r\n\r\n if (chkVal !== '' && has(values, chkVal, tf.caseSensitive)) {\r\n chk.checked = true;\r\n } else {\r\n // Check non-empty-text or empty-text option\r\n if (values.indexOf(tf.nmOperator) !== -1 &&\r\n chkVal === matchCase(tf.nonEmptyText, tf.caseSensitive)) {\r\n chk.checked = true;\r\n }\r\n else if (values.indexOf(tf.emOperator) !== -1 &&\r\n chkVal === matchCase(tf.emptyText, tf.caseSensitive)) {\r\n chk.checked = true;\r\n } else {\r\n chk.checked = false;\r\n }\r\n }\r\n this.setItemOption(chk);\r\n });\r\n }\r\n\r\n /**\r\n * Get filter values for a given column index\r\n * @param {Number} colIndex Column index\r\n * @returns {Array} values Collection of selected values\r\n */\r\n getValues(colIndex) {\r\n let tf = this.tf;\r\n let flt = tf.getFilterElement(colIndex);\r\n let fltAttr = flt.getAttribute('value');\r\n let values = isEmpty(fltAttr) ? '' : fltAttr;\r\n //removes last operator ||\r\n values = values.substr(0, values.length - 3);\r\n //turn || separated values into array\r\n values = values.split(' ' + tf.orOperator + ' ');\r\n\r\n return values;\r\n }\r\n\r\n /**\r\n * Destroy CheckList instance\r\n */\r\n destroy() {\r\n this.emitter.off(\r\n ['build-checklist-filter'],\r\n (tf, colIndex, isLinked) => this.build(colIndex, isLinked)\r\n );\r\n this.emitter.off(\r\n ['select-checklist-options'],\r\n (tf, colIndex, values) => this.selectOptions(colIndex, values)\r\n );\r\n this.emitter.off(['rows-changed'], () => this.refreshAll());\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, createOpt, createText, elm, removeElm} from '../dom';\r\nimport {isArray, isNull, EMPTY_FN} from '../types';\r\nimport {addEvt, removeEvt, isKeyPressed, bound} from '../event';\r\nimport {INPUT, SELECT, NONE, ENTER_KEY} from '../const';\r\nimport {\r\n defaultsStr, defaultsNb, defaultsBool, defaultsArr, defaultsFn\r\n} from '../settings';\r\nimport {CENTER, RIGHT} from './toolbar';\r\n\r\n/**\r\n * Paging UI component\r\n * @export\r\n * @class Paging\r\n * @extends {Feature}\r\n */\r\nexport class Paging extends Feature {\r\n\r\n /**\r\n * Creates an instance of Paging\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'paging');\r\n\r\n // Configuration object\r\n let f = this.config.paging || {};\r\n\r\n /**\r\n * Css class for the paging buttons (previous, next, etc.)\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class, 'pgInp');\r\n\r\n /**\r\n * Main select DOM element\r\n * @type {DOMElement}\r\n */\r\n this.pageSlc = null;\r\n\r\n /**\r\n * Results per page select DOM element\r\n * @type {DOMElement}\r\n */\r\n this.pageLengthSlc = null;\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.tgtId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Number of rows contained in a page\r\n * @type {Number}\r\n */\r\n this.pageLength = defaultsNb(f.length, 10);\r\n\r\n /**\r\n * ID of custom container element for the results per page selector\r\n * @type {String}\r\n */\r\n this.pageLengthTgtId = defaultsStr(f.results_per_page_target_id, null);\r\n\r\n /**\r\n * Css class for the paging select element\r\n * @type {String}\r\n */\r\n this.pgSlcCssClass = defaultsStr(f.slc_css_class, 'pgSlc');\r\n\r\n /**\r\n * Css class for the paging input element\r\n * @type {String}\r\n */\r\n this.pgInpCssClass = defaultsStr(f.inp_css_class, 'pgNbInp');\r\n\r\n /**\r\n * Label and values for the results per page select, example of usage:\r\n * ['Records: ', [10,25,50,100]]\r\n * @type {Array}\r\n */\r\n this.resultsPerPage = defaultsArr(f.results_per_page, null);\r\n\r\n /**\r\n * Determines if results per page is configured\r\n * @type {Boolean}\r\n */\r\n this.hasResultsPerPage = isArray(this.resultsPerPage);\r\n\r\n /**\r\n * Css class for the results per page select\r\n * @type {String}\r\n */\r\n this.resultsSlcCssClass = defaultsStr(f.results_slc_css_class, 'rspg');\r\n\r\n /**\r\n * Css class for the label preceding results per page select\r\n * @type {String}\r\n */\r\n this.resultsSpanCssClass = defaultsStr(f.results_span_css_class,\r\n 'rspgSpan');\r\n\r\n /**\r\n * Index of the first row of current page\r\n * @type {Number}\r\n * @private\r\n */\r\n this.startPagingRow = 0;\r\n\r\n /**\r\n * Total number of pages\r\n * @type {Number}\r\n * @private\r\n */\r\n this.nbPages = 0;\r\n\r\n /**\r\n * Current page number\r\n * @type {Number}\r\n * @private\r\n */\r\n this.currentPageNb = 1;\r\n\r\n /**\r\n * Next page button text\r\n * @type {String}\r\n */\r\n this.btnNextPageText = defaultsStr(f.btn_next_page_text, '>');\r\n\r\n /**\r\n * Previous page button text\r\n * @type {String}\r\n */\r\n this.btnPrevPageText = defaultsStr(f.btn_prev_page_text, '<');\r\n\r\n /**\r\n * Last page button text\r\n * @type {String}\r\n */\r\n this.btnLastPageText = defaultsStr(f.btn_last_page_text, '>|');\r\n\r\n /**\r\n * First page button text\r\n * @type {String}\r\n */\r\n this.btnFirstPageText = defaultsStr(f.btn_first_page_text, '|<');\r\n\r\n /**\r\n * Next page button HTML\r\n * @type {String}\r\n */\r\n this.btnNextPageHtml = defaultsStr(f.btn_next_page_html,\r\n (!tf.enableIcons ? null :\r\n ''));\r\n\r\n /**\r\n * Previous page button HTML\r\n * @type {String}\r\n */\r\n this.btnPrevPageHtml = defaultsStr(f.btn_prev_page_html,\r\n (!tf.enableIcons ? null :\r\n ''));\r\n\r\n /**\r\n * First page button HTML\r\n * @type {String}\r\n */\r\n this.btnFirstPageHtml = defaultsStr(f.btn_first_page_html,\r\n (!tf.enableIcons ? null :\r\n ''));\r\n\r\n /**\r\n * Last page button HTML\r\n * @type {String}\r\n */\r\n this.btnLastPageHtml = defaultsStr(f.btn_last_page_html,\r\n (!tf.enableIcons ? null :\r\n ''));\r\n\r\n /**\r\n * Text preceeding page selector drop-down\r\n * @type {String}\r\n */\r\n this.pageText = defaultsStr(f.page_text, ' Page ');\r\n\r\n /**\r\n * Text after page selector drop-down\r\n * @type {String}\r\n */\r\n this.ofText = defaultsStr(f.of_text, ' of ');\r\n\r\n /**\r\n * Css class for the span containing total number of pages\r\n * @type {String}\r\n */\r\n this.nbPgSpanCssClass = defaultsStr(f.nb_pages_css_class, 'nbpg');\r\n\r\n /**\r\n * Determines if paging buttons are enabled (default: true)\r\n * @type {Boolean}\r\n */\r\n this.hasBtns = defaultsBool(f.btns, true);\r\n\r\n /**\r\n * Defines page selector type, two possible values: 'select', 'input'\r\n * @type {String}\r\n */\r\n this.pageSelectorType = defaultsStr(f.page_selector_type, SELECT);\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, CENTER);\r\n\r\n /**\r\n * Callback fired before the page is changed\r\n * @type {Function}\r\n */\r\n this.onBeforeChangePage = defaultsFn(f.on_before_change_page, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the page is changed\r\n * @type {Function}\r\n */\r\n this.onAfterChangePage = defaultsFn(f.on_after_change_page, EMPTY_FN);\r\n\r\n /**\r\n * Label preciding results per page select\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.slcResultsTxt = null;\r\n /**\r\n * Span containing next page button\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.btnNextCont = null;\r\n /**\r\n * Span containing previous page button\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.btnPrevCont = null;\r\n /**\r\n * Span containing last page button\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.btnLastCont = null;\r\n /**\r\n * Span containing first page button\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.btnFirstCont = null;\r\n /**\r\n * Span for tot nb pages\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.pgCont = null;\r\n /**\r\n * Span preceding pages select (contains 'Page')\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.pgBefore = null;\r\n /**\r\n * Span following pages select (contains ' of ')\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.pgAfter = null;\r\n\r\n let startRow = tf.refRow;\r\n let nrows = tf.getRowsNb(true);\r\n //calculates page nb\r\n this.nbPages = Math.ceil((nrows - startRow) / this.pageLength);\r\n\r\n let o = this;\r\n /**\r\n * Paging DOM events handlers\r\n * @type {String}\r\n * @private\r\n */\r\n this.evt = {\r\n slcIndex() {\r\n return (o.pageSelectorType === SELECT) ?\r\n o.pageSlc.options.selectedIndex :\r\n parseInt(o.pageSlc.value, 10) - 1;\r\n },\r\n nbOpts() {\r\n return (o.pageSelectorType === SELECT) ?\r\n parseInt(o.pageSlc.options.length, 10) - 1 :\r\n (o.nbPages - 1);\r\n },\r\n next() {\r\n let nextIndex = o.evt.slcIndex() < o.evt.nbOpts() ?\r\n o.evt.slcIndex() + 1 : 0;\r\n o.changePage(nextIndex);\r\n },\r\n prev() {\r\n let prevIndex = o.evt.slcIndex() > 0 ?\r\n o.evt.slcIndex() - 1 : o.evt.nbOpts();\r\n o.changePage(prevIndex);\r\n },\r\n last() {\r\n o.changePage(o.evt.nbOpts());\r\n },\r\n first() {\r\n o.changePage(0);\r\n },\r\n _detectKey(e) {\r\n if (isKeyPressed(e, [ENTER_KEY])) {\r\n if (tf.sorted) {\r\n tf.filter();\r\n o.changePage(o.evt.slcIndex());\r\n } else {\r\n o.changePage();\r\n }\r\n this.blur();\r\n }\r\n },\r\n slcPagesChange: null,\r\n nextEvt: null,\r\n prevEvt: null,\r\n lastEvt: null,\r\n firstEvt: null\r\n };\r\n }\r\n\r\n /**\r\n * Initialize DOM elements\r\n */\r\n init() {\r\n let slcPages;\r\n let tf = this.tf;\r\n let evt = this.evt;\r\n\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-feature', this, !isNull(this.tgtId));\r\n\r\n // Check resultsPerPage is in expected format and initialise the\r\n // results per page component\r\n if (this.hasResultsPerPage) {\r\n if (this.resultsPerPage.length < 2) {\r\n this.hasResultsPerPage = false;\r\n } else {\r\n this.pageLength = this.resultsPerPage[1][0];\r\n this.setResultsPerPage();\r\n }\r\n }\r\n\r\n evt.slcPagesChange = (event) => {\r\n let slc = event.target;\r\n this.changePage(slc.selectedIndex);\r\n };\r\n\r\n // Paging drop-down list selector\r\n if (this.pageSelectorType === SELECT) {\r\n slcPages = createElm(SELECT);\r\n slcPages.className = this.pgSlcCssClass;\r\n addEvt(slcPages, 'change', evt.slcPagesChange);\r\n }\r\n\r\n // Paging input selector\r\n if (this.pageSelectorType === INPUT) {\r\n slcPages = createElm(INPUT, ['value', this.currentPageNb]);\r\n slcPages.className = this.pgInpCssClass;\r\n addEvt(slcPages, 'keypress', evt._detectKey);\r\n }\r\n\r\n // btns containers\r\n let btnNextSpan = createElm('span');\r\n let btnPrevSpan = createElm('span');\r\n let btnLastSpan = createElm('span');\r\n let btnFirstSpan = createElm('span');\r\n\r\n if (this.hasBtns) {\r\n // Next button\r\n if (!this.btnNextPageHtml) {\r\n let btnNext = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnNextPageText],\r\n ['title', 'Next']\r\n );\r\n btnNext.className = this.btnCssClass;\r\n addEvt(btnNext, 'click', evt.next);\r\n btnNextSpan.appendChild(btnNext);\r\n } else {\r\n btnNextSpan.innerHTML = this.btnNextPageHtml;\r\n addEvt(btnNextSpan, 'click', evt.next);\r\n }\r\n // Previous button\r\n if (!this.btnPrevPageHtml) {\r\n let btnPrev = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnPrevPageText],\r\n ['title', 'Previous']\r\n );\r\n btnPrev.className = this.btnCssClass;\r\n addEvt(btnPrev, 'click', evt.prev);\r\n btnPrevSpan.appendChild(btnPrev);\r\n } else {\r\n btnPrevSpan.innerHTML = this.btnPrevPageHtml;\r\n addEvt(btnPrevSpan, 'click', evt.prev);\r\n }\r\n // Last button\r\n if (!this.btnLastPageHtml) {\r\n let btnLast = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnLastPageText],\r\n ['title', 'Last']\r\n );\r\n btnLast.className = this.btnCssClass;\r\n addEvt(btnLast, 'click', evt.last);\r\n btnLastSpan.appendChild(btnLast);\r\n } else {\r\n btnLastSpan.innerHTML = this.btnLastPageHtml;\r\n addEvt(btnLastSpan, 'click', evt.last);\r\n }\r\n // First button\r\n if (!this.btnFirstPageHtml) {\r\n let btnFirst = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnFirstPageText],\r\n ['title', 'First']\r\n );\r\n btnFirst.className = this.btnCssClass;\r\n addEvt(btnFirst, 'click', evt.first);\r\n btnFirstSpan.appendChild(btnFirst);\r\n } else {\r\n btnFirstSpan.innerHTML = this.btnFirstPageHtml;\r\n addEvt(btnFirstSpan, 'click', evt.first);\r\n }\r\n }\r\n\r\n // paging elements (buttons+drop-down list) are added to defined element\r\n let targetEl = !this.tgtId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.tgtId);\r\n targetEl.appendChild(btnFirstSpan);\r\n targetEl.appendChild(btnPrevSpan);\r\n\r\n let pgBeforeSpan = createElm('span');\r\n pgBeforeSpan.appendChild(createText(this.pageText));\r\n pgBeforeSpan.className = this.nbPgSpanCssClass;\r\n targetEl.appendChild(pgBeforeSpan);\r\n targetEl.appendChild(slcPages);\r\n let pgAfterSpan = createElm('span');\r\n pgAfterSpan.appendChild(createText(this.ofText));\r\n pgAfterSpan.className = this.nbPgSpanCssClass;\r\n targetEl.appendChild(pgAfterSpan);\r\n let pgSpan = createElm('span');\r\n pgSpan.className = this.nbPgSpanCssClass;\r\n pgSpan.appendChild(createText(' ' + this.nbPages + ' '));\r\n targetEl.appendChild(pgSpan);\r\n targetEl.appendChild(btnNextSpan);\r\n targetEl.appendChild(btnLastSpan);\r\n\r\n this.btnNextCont = btnNextSpan;\r\n this.btnPrevCont = btnPrevSpan;\r\n this.btnLastCont = btnLastSpan;\r\n this.btnFirstCont = btnFirstSpan;\r\n this.pgCont = pgSpan;\r\n this.pgBefore = pgBeforeSpan;\r\n this.pgAfter = pgAfterSpan;\r\n this.pageSlc = slcPages;\r\n\r\n this.setPagingInfo();\r\n\r\n if (!tf.fltGrid) {\r\n tf.validateAllRows();\r\n this.setPagingInfo(tf.validRowsIndex);\r\n }\r\n\r\n this.emitter.on(['after-filtering'], bound(this.resetPagingInfo, this));\r\n this.emitter.on(['change-page'], bound(this.changePageHandler, this));\r\n this.emitter.on(['change-page-results'],\r\n bound(this.changePageResultsHandler, this));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Reset paging when filters are already instantiated\r\n * @param {Boolean} filterTable Execute filtering once paging instanciated\r\n */\r\n reset(filterTable = false) {\r\n this.enable();\r\n this.init();\r\n\r\n if (filterTable) {\r\n this.tf.filter();\r\n }\r\n }\r\n\r\n /**\r\n * Reset paging info from scratch after a filtering process\r\n */\r\n resetPagingInfo() {\r\n this.startPagingRow = 0;\r\n this.currentPageNb = 1;\r\n this.setPagingInfo(this.tf.validRowsIndex);\r\n }\r\n\r\n /**\r\n * Calculate number of pages based on valid rows\r\n * Refresh paging select according to number of pages\r\n * @param {Array} validRows Collection of valid rows\r\n */\r\n setPagingInfo(validRows) {\r\n let tf = this.tf;\r\n let cont = !this.tgtId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.tgtId);\r\n\r\n //store valid rows indexes\r\n tf.validRowsIndex = validRows || tf.getValidRows(true);\r\n\r\n //calculate nb of pages\r\n this.nbPages = Math.ceil(tf.validRowsIndex.length / this.pageLength);\r\n //refresh page nb span\r\n this.pgCont.innerHTML = this.nbPages;\r\n //select clearing shortcut\r\n if (this.pageSelectorType === SELECT) {\r\n this.pageSlc.innerHTML = '';\r\n }\r\n\r\n if (this.nbPages > 0) {\r\n cont.style.visibility = 'visible';\r\n if (this.pageSelectorType === SELECT) {\r\n for (let z = 0; z < this.nbPages; z++) {\r\n let opt = createOpt(z + 1, z * this.pageLength, false);\r\n this.pageSlc.options[z] = opt;\r\n }\r\n } else {\r\n //input type\r\n this.pageSlc.value = this.currentPageNb;\r\n }\r\n\r\n } else {\r\n /*** if no results paging select and buttons are hidden ***/\r\n cont.style.visibility = 'hidden';\r\n }\r\n this.groupByPage(tf.validRowsIndex);\r\n }\r\n\r\n /**\r\n * Group table rows by page and display valid rows\r\n * @param {Array} validRows Collection of valid rows\r\n */\r\n groupByPage(validRows) {\r\n let tf = this.tf;\r\n let rows = tf.dom().rows;\r\n let startPagingRow = parseInt(this.startPagingRow, 10);\r\n let endPagingRow = startPagingRow + parseInt(this.pageLength, 10);\r\n\r\n //store valid rows indexes\r\n if (validRows) {\r\n tf.validRowsIndex = validRows;\r\n }\r\n\r\n //this loop shows valid rows of current page\r\n for (let h = 0, len = tf.getValidRowsNb(true); h < len; h++) {\r\n let validRowIdx = tf.validRowsIndex[h];\r\n let r = rows[validRowIdx];\r\n let isRowValid = r.getAttribute('validRow');\r\n let rowDisplayed = false;\r\n\r\n if (h >= startPagingRow && h < endPagingRow) {\r\n if (isNull(isRowValid) || Boolean(isRowValid === 'true')) {\r\n r.style.display = '';\r\n rowDisplayed = true;\r\n }\r\n } else {\r\n r.style.display = NONE;\r\n }\r\n this.emitter.emit('row-paged', tf, validRowIdx, h, rowDisplayed);\r\n }\r\n\r\n // broadcast grouping by page\r\n this.emitter.emit('grouped-by-page', tf, this);\r\n }\r\n\r\n /**\r\n * Return the current page number\r\n * @return {Number} Page number\r\n */\r\n getPage() {\r\n return this.currentPageNb;\r\n }\r\n\r\n /**\r\n * Show page defined by passed argument (string or number):\r\n * @param {String}/{Number} cmd possible string values: 'next',\r\n * 'previous', 'last', 'first' or page number as per param\r\n */\r\n setPage(cmd) {\r\n let tf = this.tf;\r\n if (!tf.isInitialized() || !this.isEnabled()) {\r\n return;\r\n }\r\n let btnEvt = this.evt,\r\n cmdtype = typeof cmd;\r\n if (cmdtype === 'string') {\r\n switch (cmd.toLowerCase()) {\r\n case 'next':\r\n btnEvt.next();\r\n break;\r\n case 'previous':\r\n btnEvt.prev();\r\n break;\r\n case 'last':\r\n btnEvt.last();\r\n break;\r\n case 'first':\r\n btnEvt.first();\r\n break;\r\n default:\r\n btnEvt.next();\r\n break;\r\n }\r\n }\r\n else if (cmdtype === 'number') {\r\n this.changePage(cmd - 1);\r\n }\r\n }\r\n\r\n /**\r\n * Generates UI elements for the number of results per page drop-down\r\n */\r\n setResultsPerPage() {\r\n let tf = this.tf;\r\n let evt = this.evt;\r\n\r\n if (this.pageLengthSlc || !this.resultsPerPage) {\r\n return;\r\n }\r\n\r\n evt.slcResultsChange = (ev) => {\r\n this.onChangeResultsPerPage();\r\n ev.target.blur();\r\n };\r\n\r\n let slcR = createElm(SELECT);\r\n slcR.className = this.resultsSlcCssClass;\r\n let slcRText = this.resultsPerPage[0],\r\n slcROpts = this.resultsPerPage[1];\r\n let slcRSpan = createElm('span');\r\n slcRSpan.className = this.resultsSpanCssClass;\r\n\r\n // results per page select is added to external element\r\n let targetEl = !this.pageLengthTgtId ?\r\n tf.feature('toolbar').container(RIGHT) :\r\n elm(this.pageLengthTgtId);\r\n slcRSpan.appendChild(createText(slcRText));\r\n\r\n let help = tf.feature('help');\r\n if (help && help.btn) {\r\n help.btn.parentNode.insertBefore(slcRSpan, help.btn);\r\n help.btn.parentNode.insertBefore(slcR, help.btn);\r\n } else {\r\n targetEl.appendChild(slcRSpan);\r\n targetEl.appendChild(slcR);\r\n }\r\n\r\n for (let r = 0; r < slcROpts.length; r++) {\r\n let currOpt = new Option(slcROpts[r], slcROpts[r], false, false);\r\n slcR.options[r] = currOpt;\r\n }\r\n addEvt(slcR, 'change', evt.slcResultsChange);\r\n this.slcResultsTxt = slcRSpan;\r\n this.pageLengthSlc = slcR;\r\n }\r\n\r\n /**\r\n * Remove number of results per page UI elements\r\n */\r\n removeResultsPerPage() {\r\n let tf = this.tf;\r\n if (!tf.isInitialized() || !this.pageLengthSlc ||\r\n !this.resultsPerPage) {\r\n return;\r\n }\r\n if (this.pageLengthSlc) {\r\n removeElm(this.pageLengthSlc);\r\n }\r\n if (this.slcResultsTxt) {\r\n removeElm(this.slcResultsTxt);\r\n }\r\n this.pageLengthSlc = null;\r\n this.slcResultsTxt = null;\r\n }\r\n\r\n /**\r\n * Change the page based on passed index\r\n * @param {Number} index Index of the page (0-n)\r\n */\r\n changePage(index) {\r\n let tf = this.tf;\r\n\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('before-page-change', tf, (index + 1));\r\n\r\n if (index === null) {\r\n index = this.pageSelectorType === SELECT ?\r\n this.pageSlc.options.selectedIndex : this.pageSlc.value - 1;\r\n }\r\n if (index >= 0 && index <= (this.nbPages - 1)) {\r\n this.onBeforeChangePage(this, (index + 1));\r\n\r\n this.currentPageNb = parseInt(index, 10) + 1;\r\n if (this.pageSelectorType === SELECT) {\r\n this.pageSlc.options[index].selected = true;\r\n } else {\r\n this.pageSlc.value = this.currentPageNb;\r\n }\r\n\r\n this.startPagingRow = (this.pageSelectorType === SELECT) ?\r\n this.pageSlc.value : (index * this.pageLength);\r\n\r\n this.groupByPage();\r\n\r\n this.onAfterChangePage(this, (index + 1));\r\n }\r\n\r\n this.emitter.emit('after-page-change', tf, (index + 1));\r\n }\r\n\r\n /**\r\n * Change the number of results per page based on passed value\r\n * @param {String} val The number of results per page\r\n */\r\n changeResultsPerPage(val) {\r\n if (!this.isEnabled() || isNaN(val)) {\r\n return;\r\n }\r\n\r\n this.pageLengthSlc.value = val;\r\n this.onChangeResultsPerPage();\r\n }\r\n\r\n /**\r\n * Change rows according to page results drop-down\r\n */\r\n onChangeResultsPerPage() {\r\n let tf = this.tf;\r\n\r\n if (!this.isEnabled() || tf.getValidRowsNb() === 0) {\r\n return;\r\n }\r\n\r\n let {\r\n pageLengthSlc: slcR, pageSelectorType, pageSlc, emitter\r\n } = this;\r\n\r\n emitter.emit('before-page-length-change', tf);\r\n\r\n let slcIndex = slcR.selectedIndex;\r\n let slcPagesSelIndex = (pageSelectorType === SELECT) ?\r\n pageSlc.selectedIndex : parseInt(pageSlc.value - 1, 10);\r\n this.pageLength = parseInt(slcR.options[slcIndex].value, 10);\r\n this.startPagingRow = this.pageLength * slcPagesSelIndex;\r\n\r\n if (!isNaN(this.pageLength)) {\r\n if (this.startPagingRow >= tf.nbFilterableRows) {\r\n this.startPagingRow = (tf.nbFilterableRows - this.pageLength);\r\n }\r\n this.setPagingInfo();\r\n\r\n if (pageSelectorType === SELECT) {\r\n let slcIdx = (pageSlc.options.length - 1 <= slcPagesSelIndex) ?\r\n (pageSlc.options.length - 1) :\r\n slcPagesSelIndex;\r\n pageSlc.options[slcIdx].selected = true;\r\n }\r\n }\r\n\r\n emitter.emit('after-page-length-change', tf, this.pageLength);\r\n }\r\n\r\n /**\r\n * Re-set page nb at page re-load\r\n */\r\n resetPage() {\r\n let tf = this.tf;\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n this.emitter.emit('before-reset-page', tf);\r\n let pgNb = tf.feature('store').getPageNb();\r\n if (pgNb !== '') {\r\n this.changePage((pgNb - 1));\r\n }\r\n this.emitter.emit('after-reset-page', tf, pgNb);\r\n }\r\n\r\n /**\r\n * Re-set page length value at page re-load\r\n */\r\n resetPageLength() {\r\n let tf = this.tf;\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n this.emitter.emit('before-reset-page-length', tf);\r\n let pglenIndex = tf.feature('store').getPageLength();\r\n\r\n if (pglenIndex !== '') {\r\n this.pageLengthSlc.options[pglenIndex].selected = true;\r\n this.changeResultsPerPage();\r\n }\r\n this.emitter.emit('after-reset-page-length', tf, pglenIndex);\r\n }\r\n\r\n /** @private */\r\n changePageHandler(tf, pageNumber) {\r\n this.setPage(pageNumber);\r\n }\r\n\r\n /** @private */\r\n changePageResultsHandler(tf, pageLength) {\r\n this.changeResultsPerPage(pageLength);\r\n }\r\n\r\n /**\r\n * Remove paging feature\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let evt = this.evt;\r\n\r\n if (this.pageSlc) {\r\n if (this.pageSelectorType === SELECT) {\r\n removeEvt(this.pageSlc, 'change', evt.slcPagesChange);\r\n }\r\n else if (this.pageSelectorType === INPUT) {\r\n removeEvt(this.pageSlc, 'keypress', evt._detectKey);\r\n }\r\n removeElm(this.pageSlc);\r\n }\r\n\r\n if (this.btnNextCont) {\r\n removeEvt(this.btnNextCont, 'click', evt.next);\r\n removeElm(this.btnNextCont);\r\n this.btnNextCont = null;\r\n }\r\n\r\n if (this.btnPrevCont) {\r\n removeEvt(this.btnPrevCont, 'click', evt.prev);\r\n removeElm(this.btnPrevCont);\r\n this.btnPrevCont = null;\r\n }\r\n\r\n if (this.btnLastCont) {\r\n removeEvt(this.btnLastCont, 'click', evt.last);\r\n removeElm(this.btnLastCont);\r\n this.btnLastCont = null;\r\n }\r\n\r\n if (this.btnFirstCont) {\r\n removeEvt(this.btnFirstCont, 'click', evt.first);\r\n removeElm(this.btnFirstCont);\r\n this.btnFirstCont = null;\r\n }\r\n\r\n if (this.pgBefore) {\r\n removeElm(this.pgBefore);\r\n this.pgBefore = null;\r\n }\r\n\r\n if (this.pgAfter) {\r\n removeElm(this.pgAfter);\r\n this.pgAfter = null;\r\n }\r\n\r\n if (this.pgCont) {\r\n removeElm(this.pgCont);\r\n this.pgCont = null;\r\n }\r\n\r\n if (this.hasResultsPerPage) {\r\n this.removeResultsPerPage();\r\n }\r\n\r\n this.emitter.off(['after-filtering'],\r\n bound(this.resetPagingInfo, this));\r\n this.emitter.off(['change-page'], bound(this.changePageHandler, this));\r\n this.emitter.off(['change-page-results'],\r\n bound(this.changePageResultsHandler, this));\r\n\r\n this.pageSlc = null;\r\n this.nbPages = 0;\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, elm, removeElm} from '../dom';\r\nimport {isEmpty, EMPTY_FN} from '../types';\r\nimport {NONE} from '../const';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\n\r\n/**\r\n * UI when filtering yields no matches\r\n * @export\r\n * @class NoResults\r\n * @extends {Feature}\r\n */\r\nexport class NoResults extends Feature {\r\n\r\n /**\r\n * Creates an instance of NoResults\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'noResults');\r\n\r\n //configuration object\r\n let f = this.config.no_results_message || {};\r\n\r\n /**\r\n * Text (accepts HTML)\r\n * @type {String}\r\n */\r\n this.content = defaultsStr(f.content, 'No results');\r\n\r\n /**\r\n * Custom container DOM element\r\n * @type {DOMElement}\r\n */\r\n this.customContainer = defaultsStr(f.custom_container, null);\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.customContainerId = defaultsStr(f.custom_container_id, null);\r\n\r\n /**\r\n * Indicates if UI is contained in a external element\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isExternal = !isEmpty(this.customContainer) ||\r\n !isEmpty(this.customContainerId);\r\n\r\n /**\r\n * Css class assigned to container element\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'no-results');\r\n\r\n /**\r\n * Stores container DOM element\r\n * @type {DOMElement}\r\n */\r\n this.cont = null;\r\n\r\n /**\r\n * Callback fired before the message is displayed\r\n * @type {Function}\r\n */\r\n this.onBeforeShow = defaultsFn(f.on_before_show_msg, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the message is displayed\r\n * @type {Function}\r\n */\r\n this.onAfterShow = defaultsFn(f.on_after_show_msg, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before the message is hidden\r\n * @type {Function}\r\n */\r\n this.onBeforeHide = defaultsFn(f.on_before_hide_msg, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the message is hidden\r\n * @type {Function}\r\n */\r\n this.onAfterHide = defaultsFn(f.on_after_hide_msg, EMPTY_FN);\r\n }\r\n\r\n /**\r\n * Initializes NoResults instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n let target = this.customContainer || elm(this.customContainerId) ||\r\n tf.dom();\r\n\r\n //container\r\n let cont = createElm('div');\r\n cont.className = this.cssClass;\r\n cont.innerHTML = this.content;\r\n\r\n if (this.isExternal) {\r\n target.appendChild(cont);\r\n } else {\r\n target.parentNode.insertBefore(cont, target.nextSibling);\r\n }\r\n\r\n this.cont = cont;\r\n\r\n // subscribe to after-filtering event\r\n this.emitter.on(\r\n ['initialized', 'after-filtering'],\r\n () => this.toggle()\r\n );\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Toggle no results message\r\n */\r\n toggle() {\r\n if (this.tf.getValidRowsNb() > 0) {\r\n this.hide();\r\n } else {\r\n this.show();\r\n }\r\n }\r\n\r\n /**\r\n * Show no results message\r\n */\r\n show() {\r\n if (!this.initialized || !this.isEnabled()) {\r\n return;\r\n }\r\n this.onBeforeShow(this.tf, this);\r\n\r\n this.setWidth();\r\n this.cont.style.display = 'block';\r\n\r\n this.onAfterShow(this.tf, this);\r\n }\r\n\r\n /**\r\n * Hide no results message\r\n */\r\n hide() {\r\n if (!this.initialized || !this.isEnabled()) {\r\n return;\r\n }\r\n this.onBeforeHide(this.tf, this);\r\n\r\n this.cont.style.display = NONE;\r\n\r\n this.onAfterHide(this.tf, this);\r\n }\r\n\r\n /**\r\n * Sets no results container width\r\n * @private\r\n */\r\n setWidth() {\r\n if (!this.initialized || this.isExternal || !this.isEnabled()) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n if (tf.gridLayout) {\r\n let gridLayout = tf.feature('gridLayout');\r\n this.cont.style.width = gridLayout.headTbl.clientWidth + 'px';\r\n } else {\r\n this.cont.style.width = (tf.dom().tHead ?\r\n tf.dom().tHead.clientWidth :\r\n tf.dom().tBodies[0].clientWidth) + 'px';\r\n }\r\n }\r\n\r\n /** Remove feature */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n removeElm(this.cont);\r\n this.cont = null;\r\n // unsubscribe to after-filtering event\r\n this.emitter.off(['after-filtering'], () => this.toggle());\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\nimport {addClass, removeClass} from '../dom';\nimport {defaultsStr} from '../settings';\nimport {bound} from '../event';\n\n/**\n * Rows with alternating background color for improved readability\n */\nexport class AlternateRows extends Feature {\n\n /**\n * Creates an instance of AlternateRows.\n *\n * @param {Object} tf TableFilter instance\n */\n constructor(tf) {\n super(tf, 'alternateRows');\n\n let config = this.config;\n /**\n * Css class for even rows (default: 'even')\n * @type {String}\n */\n this.evenCss = defaultsStr(config.even_row_css_class, 'even');\n\n /**\n * Css class for odd rows (default: 'odd')\n * @type {String}\n */\n this.oddCss = defaultsStr(config.odd_row_css_class, 'odd');\n }\n\n /**\n * Sets alternating rows color\n */\n init() {\n if (this.initialized) {\n return;\n }\n\n this.processAll();\n\n // Subscribe to events\n this.emitter.on(['row-processed', 'row-paged'],\n bound(this.processRowHandler, this));\n this.emitter.on(['column-sorted', 'rows-changed'],\n bound(this.processAll, this));\n\n /** @inherited */\n this.initialized = true;\n }\n\n /**\n * Apply background to all valid rows\n */\n processAll() {\n if (!this.isEnabled()) {\n return;\n }\n let tf = this.tf;\n let validRowsIndex = tf.getValidRows(true);\n let indexLen = validRowsIndex.length;\n let idx = 0;\n\n //alternates bg color\n for (let j = 0; j < indexLen; j++) {\n let rowIdx = validRowsIndex[j];\n this.setRowBg(rowIdx, idx);\n idx++;\n }\n }\n\n /**\n * Set/remove row background based on row validation\n * @param {Number} rowIdx Row index\n * @param {Number} arrIdx Array index\n * @param {Boolean} isValid Valid row flag\n */\n processRow(rowIdx, arrIdx, isValid) {\n if (isValid) {\n this.setRowBg(rowIdx, arrIdx);\n } else {\n this.removeRowBg(rowIdx);\n }\n }\n\n /**\n * Sets row background color\n * @param {Number} rowIdx Row index\n * @param {Number} idx Valid rows collection index needed to calculate bg\n * color\n * @private\n */\n setRowBg(rowIdx, idx) {\n if (!this.isEnabled() || isNaN(rowIdx)) {\n return;\n }\n let rows = this.tf.dom().rows;\n let i = isNaN(idx) ? rowIdx : idx;\n this.removeRowBg(rowIdx);\n\n addClass(rows[rowIdx], (i % 2) ? this.evenCss : this.oddCss);\n }\n\n /**\n * Removes row background color\n * @param {Number} idx Row index\n * @private\n */\n removeRowBg(idx) {\n if (isNaN(idx)) {\n return;\n }\n let rows = this.tf.dom().rows;\n removeClass(rows[idx], this.oddCss);\n removeClass(rows[idx], this.evenCss);\n }\n\n /** @private */\n processRowHandler(tf, rowIndex, arrIndex, isValid) {\n this.processRow(rowIndex, arrIndex, isValid);\n }\n\n /**\n * Removes all alternating backgrounds\n */\n destroy() {\n if (!this.initialized) {\n return;\n }\n\n let eachRow = this.tf.eachRow(0);\n eachRow((row, i) => this.removeRowBg(i));\n\n // Unsubscribe to events\n this.emitter.off(['row-processed', 'row-paged'],\n bound(this.processRowHandler, this));\n this.emitter.off(['column-sorted', 'rows-changed'],\n bound(this.processAll, this));\n\n this.initialized = false;\n }\n\n}\n","import {Feature} from '../feature';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {addEvt} from '../event';\r\nimport {defaultsStr} from '../settings';\r\nimport {isNull} from '../types';\r\nimport {RIGHT} from './toolbar';\r\n\r\n/**\r\n * Clear button UI component\r\n */\r\nexport class ClearButton extends Feature {\r\n\r\n /**\r\n * Creates an instance of ClearButton\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'btnReset');\r\n\r\n let f = this.config.btn_reset || {};\r\n\r\n /**\r\n * Container element ID\r\n * @type {String}\r\n */\r\n this.targetId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Text for the clear button\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, null);\r\n\r\n /**\r\n * Css class for reset button\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'reset');\r\n\r\n /**\r\n * Tooltip text for the clear button\r\n * @type {String}\r\n */\r\n this.tooltip = f.tooltip || 'Clear filters';\r\n\r\n /**\r\n * Custom Html string for the clear button\r\n * @type {String}\r\n */\r\n this.html = defaultsStr(f.html,\r\n (!tf.enableIcons || this.text ? null :\r\n ''));\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, RIGHT);\r\n\r\n /**\r\n * Clear button container element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.container = null;\r\n\r\n /**\r\n * Clear button element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.element = null;\r\n }\r\n\r\n /**\r\n * Click event handler for clear button\r\n * @private\r\n */\r\n onClick() {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n this.tf.clearFilters();\r\n }\r\n\r\n /**\r\n * Initialize clear button component\r\n */\r\n init() {\r\n let tf = this.tf;\r\n\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-feature', this, !isNull(this.targetId));\r\n\r\n let cont = createElm('span');\r\n\r\n let targetEl = !this.targetId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.targetId);\r\n targetEl.appendChild(cont);\r\n\r\n if (!this.html) {\r\n let fltReset = createElm('a', ['href', 'javascript:void(0);']);\r\n fltReset.className = this.cssClass;\r\n fltReset.appendChild(createText(this.text));\r\n cont.appendChild(fltReset);\r\n addEvt(fltReset, 'click', () => this.onClick());\r\n } else {\r\n cont.innerHTML = this.html;\r\n let resetEl = cont.firstChild;\r\n addEvt(resetEl, 'click', () => this.onClick());\r\n }\r\n this.element = cont.firstChild;\r\n this.container = cont;\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Destroy ClearButton instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n removeElm(this.element);\r\n removeElm(this.container);\r\n this.element = null;\r\n this.container = null;\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {root} from '../root';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {EMPTY_FN, isNull} from '../types';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\nimport {LEFT} from './toolbar';\r\n\r\nconst EVENTS = [\r\n 'after-filtering',\r\n 'after-populating-filter',\r\n 'after-page-change',\r\n 'after-clearing-filters',\r\n 'after-page-length-change',\r\n 'after-reset-page',\r\n 'after-reset-page-length',\r\n 'after-loading-extensions',\r\n 'after-loading-themes'\r\n];\r\n\r\n/**\r\n * Status bar UI component\r\n * @export\r\n * @class StatusBar\r\n * @extends {Feature}\r\n */\r\nexport class StatusBar extends Feature {\r\n\r\n /**\r\n * Creates an instance of StatusBar\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'statusBar');\r\n\r\n // Configuration object\r\n let f = this.config.status_bar || {};\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.targetId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.container = null;\r\n\r\n /**\r\n * Message container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.msgContainer = null;\r\n\r\n /**\r\n * Label container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.labelContainer = null;\r\n\r\n /**\r\n * Text preceding status message\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, '');\r\n\r\n /**\r\n * Css class for container element\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'status');\r\n\r\n /**\r\n * Message visibility duration in milliseconds\r\n * @type {Number}\r\n * @private\r\n */\r\n this.delay = 250;\r\n\r\n /**\r\n * Callback fired before the message is displayed\r\n * @type {Function}\r\n */\r\n this.onBeforeShowMsg = defaultsFn(f.on_before_show_msg, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the message is displayed\r\n * @type {Function}\r\n */\r\n this.onAfterShowMsg = defaultsFn(f.on_after_show_msg, EMPTY_FN);\r\n\r\n /**\r\n * Message appearing upon filtering\r\n * @type {String}\r\n */\r\n this.msgFilter = defaultsStr(f.msg_filter, 'Filtering data...');\r\n\r\n /**\r\n * Message appearing when a drop-down filter is populated\r\n * @type {String}\r\n */\r\n this.msgPopulate = defaultsStr(f.msg_populate, 'Populating filter...');\r\n\r\n /**\r\n * Message appearing when a checklist filter is populated\r\n * @type {String}\r\n */\r\n this.msgPopulateCheckList = defaultsStr(f.msg_populate_checklist,\r\n 'Populating list...');\r\n\r\n /**\r\n * Message appearing when a pagination page is changed\r\n * @type {String}\r\n */\r\n this.msgChangePage = defaultsStr(f.msg_change_page,\r\n 'Collecting paging data...');\r\n\r\n /**\r\n * Message appearing when filters are cleared\r\n * @type {String}\r\n */\r\n this.msgClear = defaultsStr(f.msg_clear, 'Clearing filters...');\r\n\r\n /**\r\n * Message appearing when the page length is changed\r\n * @type {String}\r\n */\r\n this.msgChangeResults = defaultsStr(f.msg_change_results,\r\n 'Changing results per page...');\r\n\r\n /**\r\n * Message appearing when the page is re-set\r\n * @type {String}\r\n */\r\n this.msgResetPage = defaultsStr(f.msg_reset_page, 'Re-setting page...');\r\n\r\n /**\r\n * Message appearing when the page length is re-set\r\n * @type {String}\r\n */\r\n this.msgResetPageLength = defaultsStr(f.msg_reset_page_length,\r\n 'Re-setting page length...');\r\n\r\n /**\r\n * Message appearing upon column sorting\r\n * @type {String}\r\n */\r\n this.msgSort = defaultsStr(f.msg_sort, 'Sorting data...');\r\n\r\n /**\r\n * Message appearing when extensions are loading\r\n * @type {String}\r\n */\r\n this.msgLoadExtensions = defaultsStr(f.msg_load_extensions,\r\n 'Loading extensions...');\r\n\r\n /**\r\n * Message appearing when themes are loading\r\n * @type {String}\r\n */\r\n this.msgLoadThemes = defaultsStr(f.msg_load_themes,\r\n 'Loading theme(s)...');\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, LEFT);\r\n }\r\n\r\n /**\r\n * Initializes StatusBar instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n let emitter = this.emitter;\r\n\r\n emitter.emit('initializing-feature', this, !isNull(this.targetId));\r\n\r\n // status bar container\r\n let statusDiv = createElm('div');\r\n statusDiv.className = this.cssClass;\r\n\r\n // status bar label\r\n let statusSpan = createElm('span');\r\n // preceding text\r\n let statusSpanText = createElm('span');\r\n statusSpanText.appendChild(createText(this.text));\r\n\r\n // target element container\r\n let targetEl = (!this.targetId) ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.targetId);\r\n\r\n // default container\r\n if (!this.targetId) {\r\n statusDiv.appendChild(statusSpanText);\r\n statusDiv.appendChild(statusSpan);\r\n targetEl.appendChild(statusDiv);\r\n } else {\r\n // custom container, no need to append statusDiv\r\n targetEl.appendChild(statusSpanText);\r\n targetEl.appendChild(statusSpan);\r\n }\r\n\r\n this.container = statusDiv;\r\n this.msgContainer = statusSpan;\r\n this.labelContainer = statusSpanText;\r\n\r\n // subscribe to events\r\n emitter.on(['before-filtering'], () => this.message(this.msgFilter));\r\n emitter.on(['before-populating-filter'],\r\n () => this.message(this.msgPopulate));\r\n emitter.on(['before-page-change'],\r\n () => this.message(this.msgChangePage));\r\n emitter.on(['before-clearing-filters'], () =>\r\n this.message(this.msgClear));\r\n emitter.on(['before-page-length-change'],\r\n () => this.message(this.msgChangeResults));\r\n emitter.on(['before-reset-page'],\r\n () => this.message(this.msgResetPage));\r\n emitter.on(['before-reset-page-length'],\r\n () => this.message(this.msgResetPageLength));\r\n emitter.on(['before-loading-extensions'],\r\n () => this.message(this.msgLoadExtensions));\r\n emitter.on(['before-loading-themes'],\r\n () => this.message(this.msgLoadThemes));\r\n\r\n emitter.on(EVENTS, () => this.message(''));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Display status message\r\n * @param {String} [t=''] Message to be displayed\r\n */\r\n message(t = '') {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n\r\n this.onBeforeShowMsg(this.tf, t);\r\n\r\n let d = t === '' ? this.delay : 1;\r\n root.setTimeout(() => {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n this.msgContainer.innerHTML = t;\r\n\r\n this.onAfterShowMsg(this.tf, t);\r\n }, d);\r\n }\r\n\r\n /**\r\n * Destroy StatusBar instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let emitter = this.emitter;\r\n\r\n this.container.innerHTML = '';\r\n if (!this.targetId) {\r\n removeElm(this.container);\r\n }\r\n this.labelContainer = null;\r\n this.msgContainer = null;\r\n this.container = null;\r\n\r\n // Unsubscribe to events\r\n emitter.off(['before-filtering'], () => this.message(this.msgFilter));\r\n emitter.off(['before-populating-filter'],\r\n () => this.message(this.msgPopulate));\r\n emitter.off(['before-page-change'],\r\n () => this.message(this.msgChangePage));\r\n emitter.off(['before-clearing-filters'],\r\n () => this.message(this.msgClear));\r\n emitter.off(['before-page-length-change'],\r\n () => this.message(this.msgChangeResults));\r\n emitter.off(['before-reset-page'], () =>\r\n this.message(this.msgResetPage));\r\n emitter.off(['before-reset-page-length'],\r\n () => this.message(this.msgResetPageLength));\r\n emitter.off(['before-loading-extensions'],\r\n () => this.message(this.msgLoadExtensions));\r\n emitter.off(['before-loading-themes'],\r\n () => this.message(this.msgLoadThemes));\r\n\r\n emitter.off(EVENTS, () => this.message(''));\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {EMPTY_FN, isNull} from '../types';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\nimport {LEFT} from './toolbar';\r\n\r\n/**\r\n * Rows counter UI component\r\n * @export\r\n * @class RowsCounter\r\n * @extends {Feature}\r\n */\r\nexport class RowsCounter extends Feature {\r\n\r\n /**\r\n * Creates an instance of RowsCounter\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'rowsCounter');\r\n\r\n // TableFilter configuration\r\n let f = this.config.rows_counter || {};\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.targetId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.container = null;\r\n\r\n /**\r\n * Container DOM element for label displaying the total number of rows\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.label = null;\r\n\r\n /**\r\n * Text preceding the total number of rows\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, 'Rows: ');\r\n\r\n /**\r\n * Separator symbol appearing between the first and last visible rows of\r\n * current page when paging is enabled. ie: Rows: 31-40 / 70\r\n * @type {String}\r\n */\r\n this.fromToTextSeparator = defaultsStr(f.separator, '-');\r\n\r\n /**\r\n * Separator symbol appearing between the first and last visible rows of\r\n * current page and the total number of filterable rows when paging is\r\n * enabled. ie: Rows: 31-40 / 70\r\n * @type {String}\r\n */\r\n this.overText = defaultsStr(f.over_text, ' / ');\r\n\r\n /**\r\n * Css class for container element\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'tot');\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, LEFT);\r\n\r\n /**\r\n * Callback fired before the counter is refreshed\r\n * @type {Function}\r\n */\r\n this.onBeforeRefreshCounter = defaultsFn(f.on_before_refresh_counter,\r\n EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the counter is refreshed\r\n * @type {Function}\r\n */\r\n this.onAfterRefreshCounter = defaultsFn(f.on_after_refresh_counter,\r\n EMPTY_FN);\r\n }\r\n\r\n /**\r\n * Initializes RowsCounter instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-feature', this, !isNull(this.targetId));\r\n\r\n let tf = this.tf;\r\n\r\n //rows counter container\r\n let countDiv = createElm('div');\r\n countDiv.className = this.cssClass;\r\n //rows counter label\r\n let countSpan = createElm('span');\r\n let countText = createElm('span');\r\n countText.appendChild(createText(this.text));\r\n\r\n // counter is added to defined element\r\n let targetEl = !this.targetId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.targetId);\r\n\r\n //default container: 'lDiv'\r\n if (!this.targetId) {\r\n countDiv.appendChild(countText);\r\n countDiv.appendChild(countSpan);\r\n targetEl.appendChild(countDiv);\r\n } else {\r\n //custom container, no need to append statusDiv\r\n targetEl.appendChild(countText);\r\n targetEl.appendChild(countSpan);\r\n }\r\n this.container = countDiv;\r\n this.label = countSpan;\r\n\r\n // subscribe to events\r\n this.emitter.on(['after-filtering', 'grouped-by-page'],\r\n () => this.refresh(tf.getValidRowsNb()));\r\n this.emitter.on(['rows-changed'], () => this.refresh());\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n this.refresh();\r\n\r\n this.emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Refreshes the rows counter\r\n * @param {Number} p Optional parameter the total number of rows to display\r\n */\r\n refresh(p) {\r\n if (!this.initialized || !this.isEnabled()) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n\r\n this.onBeforeRefreshCounter(tf, this.label);\r\n\r\n let totTxt;\r\n if (!tf.paging) {\r\n if (p && p !== '') {\r\n totTxt = p;\r\n } else {\r\n totTxt = tf.getFilterableRowsNb() - tf.nbHiddenRows;\r\n }\r\n } else {\r\n let paging = tf.feature('paging');\r\n if (paging) {\r\n let nbValidRows = tf.getValidRowsNb();\r\n //paging start row\r\n let pagingStartRow = parseInt(paging.startPagingRow, 10) +\r\n ((nbValidRows > 0) ? 1 : 0);\r\n let pagingEndRow =\r\n (pagingStartRow + paging.pageLength) - 1 <=\r\n nbValidRows ?\r\n pagingStartRow + paging.pageLength - 1 :\r\n nbValidRows;\r\n totTxt = pagingStartRow + this.fromToTextSeparator +\r\n pagingEndRow + this.overText + nbValidRows;\r\n }\r\n }\r\n\r\n this.label.innerHTML = totTxt;\r\n this.onAfterRefreshCounter(tf, this.label, totTxt);\r\n }\r\n\r\n /**\r\n * Remove feature\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n if (!this.targetId && this.container) {\r\n removeElm(this.container);\r\n } else {\r\n elm(this.targetId).innerHTML = '';\r\n }\r\n this.label = null;\r\n this.container = null;\r\n\r\n // unsubscribe to events\r\n this.emitter.off(['after-filtering', 'grouped-by-page'],\r\n () => this.refresh(tf.getValidRowsNb()));\r\n this.emitter.off(['rows-changed'], () => this.refresh());\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {addClass, removeClass, hasClass} from '../dom';\r\nimport {EMPTY_FN} from '../types';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\n\r\n/**\r\n * Visual indicator for filtered columns\r\n * @export\r\n * @class MarkActiveColumns\r\n * @extends {Feature}\r\n */\r\nexport class MarkActiveColumns extends Feature {\r\n\r\n /**\r\n * Create an instance of MarkActiveColumns\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'markActiveColumns');\r\n\r\n let config = this.config.mark_active_columns || {};\r\n\r\n /**\r\n * Css class for filtered (active) columns\r\n * @type {String}\r\n */\r\n this.headerCssClass = defaultsStr(config.header_css_class,\r\n 'activeHeader');\r\n\r\n /**\r\n * Css class for filtered (active) column cells\r\n * @type {String}\r\n */\r\n this.cellCssClass = defaultsStr(config.cell_css_class,\r\n 'activeCell');\r\n\r\n /**\r\n * Enable/disable column highlighting\r\n * @type {Boolean}\r\n */\r\n this.highlightColumn = Boolean(config.highlight_column);\r\n\r\n /**\r\n * Callback fired before a column is marked as filtered\r\n * @type {Function}\r\n */\r\n this.onBeforeActiveColumn = defaultsFn(config.on_before_active_column,\r\n EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a column is marked as filtered\r\n * @type {Function}\r\n */\r\n this.onAfterActiveColumn = defaultsFn(config.on_after_active_column,\r\n EMPTY_FN);\r\n }\r\n\r\n /**\r\n * Initialise MarkActiveColumns instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.on(['before-filtering'], () => this.clearActiveColumns());\r\n this.emitter.on(\r\n ['cell-processed'],\r\n (tf, colIndex) => this.markActiveColumn(colIndex)\r\n );\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Clear filtered columns visual indicator (background color)\r\n */\r\n clearActiveColumns() {\r\n let tf = this.tf;\r\n tf.eachCol((idx) => {\r\n removeClass(tf.getHeaderElement(idx), this.headerCssClass);\r\n\r\n if (this.highlightColumn) {\r\n this.eachColumnCell(idx,\r\n (cell) => removeClass(cell, this.cellCssClass));\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Mark currently filtered column\r\n * @param {Number} colIndex Column index\r\n */\r\n markActiveColumn(colIndex) {\r\n let tf = this.tf;\r\n let header = tf.getHeaderElement(colIndex);\r\n if (hasClass(header, this.headerCssClass)) {\r\n return;\r\n }\r\n\r\n this.onBeforeActiveColumn(this, colIndex);\r\n\r\n addClass(header, this.headerCssClass);\r\n\r\n if (this.highlightColumn) {\r\n this.eachColumnCell(colIndex,\r\n (cell) => addClass(cell, this.cellCssClass));\r\n }\r\n\r\n this.onAfterActiveColumn(this, colIndex);\r\n }\r\n\r\n /**\r\n * Column cells iterator\r\n * TODO: make public and move into TableFilter if used elsewhere\r\n * @param {Number} colIndex\r\n * @param {Function} fn\r\n * @param {DOMElement} tbl\r\n * @private\r\n */\r\n eachColumnCell(colIndex, fn = EMPTY_FN, tbl = this.tf.dom()) {\r\n // TODO: remove [].forEach when polyfill for PhanthomJs is available\r\n [].forEach.call(\r\n tbl.querySelectorAll(`tbody td:nth-child(${colIndex + 1})`), fn);\r\n }\r\n\r\n /**\r\n * Remove feature\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n this.clearActiveColumns();\r\n this.emitter.off(['before-filtering'], () => this.clearActiveColumns());\r\n this.emitter.off(\r\n ['cell-processed'],\r\n (tf, colIndex) => this.markActiveColumn(colIndex)\r\n );\r\n\r\n /** @inherited */\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {isUndef, EMPTY_FN} from '../types';\r\nimport {createElm, removeElm} from '../dom';\r\nimport {addEvt, cancelEvt, stopEvt, targetEvt, removeEvt} from '../event';\r\nimport {INPUT, NONE, CHECKLIST, MULTIPLE} from '../const';\r\nimport {root} from '../root';\r\nimport {defaultsStr, defaultsBool, defaultsArr, defaultsFn} from '../settings';\r\n\r\n/**\r\n * Pop-up filter component\r\n * @export\r\n * @class PopupFilter\r\n * @extends {Feature}\r\n */\r\nexport class PopupFilter extends Feature {\r\n\r\n /**\r\n * Creates an instance of PopupFilter\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'popupFilters');\r\n\r\n // Configuration object\r\n let f = this.config.popup_filters || {};\r\n\r\n /**\r\n * Close active popup filter upon filtering, enabled by default\r\n * @type {Boolean}\r\n */\r\n this.closeOnFiltering = defaultsBool(f.close_on_filtering, true);\r\n\r\n /**\r\n * Filter icon path\r\n * @type {String}\r\n */\r\n this.iconPath = defaultsStr(f.image, tf.themesPath + 'icn_filter.gif');\r\n\r\n /**\r\n * Active filter icon path\r\n * @type {string}\r\n */\r\n this.activeIconPath = defaultsStr(f.image_active,\r\n tf.themesPath + 'icn_filterActive.gif');\r\n\r\n /**\r\n * HTML for the filter icon\r\n * @type {string}\r\n */\r\n this.iconHtml = defaultsStr(f.image_html,\r\n '\"Column');\r\n\r\n /**\r\n * Css class assigned to the popup container element\r\n * @type {String}\r\n */\r\n this.placeholderCssClass = defaultsStr(f.placeholder_css_class,\r\n 'popUpPlaceholder');\r\n\r\n /**\r\n * Css class assigned to filter container element\r\n * @type {String}\r\n */\r\n this.containerCssClass = defaultsStr(f.div_css_class, 'popUpFilter');\r\n\r\n /**\r\n * Ensure filter's container element width matches column width, enabled\r\n * by default\r\n * @type {Boolean}\r\n */\r\n this.adjustToContainer = defaultsBool(f.adjust_to_container, true);\r\n\r\n /**\r\n * Callback fired before a popup filter is opened\r\n * @type {Function}\r\n */\r\n this.onBeforeOpen = defaultsFn(f.on_before_popup_filter_open, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a popup filter is opened\r\n * @type {Function}\r\n */\r\n this.onAfterOpen = defaultsFn(f.on_after_popup_filter_open, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before a popup filter is closed\r\n * @type {Function}\r\n */\r\n this.onBeforeClose = defaultsFn(f.on_before_popup_filter_close,\r\n EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a popup filter is closed\r\n * @type {Function}\r\n */\r\n this.onAfterClose = defaultsFn(f.on_after_popup_filter_close, EMPTY_FN);\r\n\r\n /**\r\n * Collection of filters spans\r\n * @type {Array}\r\n * @private\r\n */\r\n this.fltSpans = [];\r\n\r\n /**\r\n * Collection of filters icons\r\n * @type {Array}\r\n * @private\r\n */\r\n this.fltIcons = [];\r\n\r\n /**\r\n * Collection of filters icons cached after pop-up filters are removed\r\n * @type {Array}\r\n * @private\r\n */\r\n this.filtersCache = null;\r\n\r\n /**\r\n * Collection of filters containers\r\n * @type {Array}\r\n * @private\r\n */\r\n this.fltElms = defaultsArr(this.filtersCache, []);\r\n\r\n /**\r\n * Prefix for pop-up filter container ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfxDiv = 'popup_';\r\n\r\n /**\r\n * Column index of popup filter currently active\r\n * @type {Number}\r\n * @private\r\n */\r\n this.activeFilterIdx = -1;\r\n }\r\n\r\n /**\r\n * Click event handler for pop-up filter icon\r\n * @private\r\n */\r\n onClick(evt) {\r\n let elm = targetEvt(evt).parentNode;\r\n let colIndex = parseInt(elm.getAttribute('ci'), 10);\r\n\r\n this.closeAll(colIndex);\r\n this.toggle(colIndex);\r\n\r\n if (this.adjustToContainer) {\r\n let cont = this.fltElms[colIndex],\r\n header = this.tf.getHeaderElement(colIndex),\r\n headerWidth = header.clientWidth * 0.95;\r\n cont.style.width = parseInt(headerWidth, 10) + 'px';\r\n }\r\n cancelEvt(evt);\r\n stopEvt(evt);\r\n }\r\n\r\n /**\r\n * Mouse-up event handler handling popup filter auto-close behaviour\r\n * @private\r\n */\r\n onMouseup(evt) {\r\n if (this.activeFilterIdx === -1) {\r\n return;\r\n }\r\n let targetElm = targetEvt(evt);\r\n let activeFlt = this.fltElms[this.activeFilterIdx];\r\n let icon = this.fltIcons[this.activeFilterIdx];\r\n\r\n if (icon === targetElm) {\r\n return;\r\n }\r\n\r\n while (targetElm && targetElm !== activeFlt) {\r\n targetElm = targetElm.parentNode;\r\n }\r\n\r\n if (targetElm !== activeFlt) {\r\n this.close(this.activeFilterIdx);\r\n }\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Initialize DOM elements\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n\r\n // Enable external filters\r\n tf.externalFltIds = [''];\r\n\r\n // Override filters row index supplied by configuration\r\n tf.filtersRowIndex = 0;\r\n\r\n // Override headers row index if no grouped headers\r\n // TODO: Because of the filters row generation, headers row index needs\r\n // adjusting: prevent useless row generation\r\n if (tf.headersRow <= 1 && isNaN(tf.config().headers_row_index)) {\r\n tf.headersRow = 0;\r\n }\r\n\r\n // Adjust headers row index for grid-layout mode\r\n // TODO: Because of the filters row generation, headers row index needs\r\n // adjusting: prevent useless row generation\r\n if (tf.gridLayout) {\r\n tf.headersRow--;\r\n this.buildIcons();\r\n }\r\n\r\n // subscribe to events\r\n this.emitter.on(['before-filtering'], () => this.setIconsState());\r\n this.emitter.on(['after-filtering'], () => this.closeAll());\r\n this.emitter.on(['cell-processed'],\r\n (tf, cellIndex) => this.changeState(cellIndex, true));\r\n this.emitter.on(['filters-row-inserted'], () => this.buildIcons());\r\n this.emitter.on(['before-filter-init'],\r\n (tf, colIndex) => this.build(colIndex));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Reset previously destroyed feature\r\n */\r\n reset() {\r\n this.enable();\r\n this.init();\r\n this.buildIcons();\r\n this.buildAll();\r\n }\r\n\r\n /**\r\n * Build all filters icons\r\n */\r\n buildIcons() {\r\n let tf = this.tf;\r\n\r\n // TODO: Because of the filters row generation, headers row index needs\r\n // adjusting: prevent useless row generation\r\n tf.headersRow++;\r\n\r\n tf.eachCol(\r\n (i) => {\r\n let icon = createElm('span', ['ci', i]);\r\n icon.innerHTML = this.iconHtml;\r\n let header = tf.getHeaderElement(i);\r\n header.appendChild(icon);\r\n addEvt(icon, 'click', (evt) => this.onClick(evt));\r\n this.fltSpans[i] = icon;\r\n this.fltIcons[i] = icon.firstChild;\r\n },\r\n // continue condition function\r\n (i) => tf.getFilterType(i) === NONE\r\n );\r\n }\r\n\r\n /**\r\n * Build all pop-up filters elements\r\n */\r\n buildAll() {\r\n for (let i = 0; i < this.filtersCache.length; i++) {\r\n this.build(i, this.filtersCache[i]);\r\n }\r\n }\r\n\r\n /**\r\n * Build a specified pop-up filter elements\r\n * @param {Number} colIndex Column index\r\n * @param {Object} div Optional container DOM element\r\n */\r\n build(colIndex, div) {\r\n let tf = this.tf;\r\n let contId = `${this.prfxDiv}${tf.id}_${colIndex}`;\r\n let placeholder = createElm('div', ['class', this.placeholderCssClass]);\r\n let cont = div ||\r\n createElm('div', ['id', contId], ['class', this.containerCssClass]);\r\n tf.externalFltIds[colIndex] = cont.id;\r\n placeholder.appendChild(cont);\r\n\r\n let header = tf.getHeaderElement(colIndex);\r\n header.insertBefore(placeholder, header.firstChild);\r\n addEvt(cont, 'click', (evt) => stopEvt(evt));\r\n this.fltElms[colIndex] = cont;\r\n }\r\n\r\n /**\r\n * Toggle visibility of specified filter\r\n * @param {Number} colIndex Column index\r\n */\r\n toggle(colIndex) {\r\n if (!this.isOpen(colIndex)) {\r\n this.open(colIndex);\r\n } else {\r\n this.close(colIndex);\r\n }\r\n }\r\n\r\n /**\r\n * Open popup filter of specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n open(colIndex) {\r\n let tf = this.tf,\r\n container = this.fltElms[colIndex];\r\n\r\n this.onBeforeOpen(this, container, colIndex);\r\n\r\n container.style.display = 'block';\r\n this.activeFilterIdx = colIndex;\r\n addEvt(root, 'mouseup', (evt) => this.onMouseup(evt));\r\n\r\n if (tf.getFilterType(colIndex) === INPUT) {\r\n let flt = tf.getFilterElement(colIndex);\r\n if (flt) {\r\n flt.focus();\r\n }\r\n }\r\n\r\n this.onAfterOpen(this, container, colIndex);\r\n }\r\n\r\n /**\r\n * Close popup filter of specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n close(colIndex) {\r\n let container = this.fltElms[colIndex];\r\n\r\n this.onBeforeClose(this, container, colIndex);\r\n\r\n container.style.display = NONE;\r\n if (this.activeFilterIdx === colIndex) {\r\n this.activeFilterIdx = -1;\r\n }\r\n removeEvt(root, 'mouseup', (evt) => this.onMouseup(evt));\r\n\r\n this.onAfterClose(this, container, colIndex);\r\n }\r\n\r\n /**\r\n * Check if popup filter for specified column is open\r\n * @param {Number} colIndex Column index\r\n * @returns {Boolean}\r\n */\r\n isOpen(colIndex) {\r\n return this.fltElms[colIndex].style.display === 'block';\r\n }\r\n\r\n /**\r\n * Close all filters excepted for the specified one if any\r\n * @param {Number} exceptIdx Column index of the filter to not close\r\n */\r\n closeAll(exceptIdx) {\r\n // Do not close filters only if argument is undefined and close on\r\n // filtering option is disabled\r\n if (isUndef(exceptIdx) && !this.closeOnFiltering) {\r\n return;\r\n }\r\n for (let i = 0; i < this.fltElms.length; i++) {\r\n if (i === exceptIdx) {\r\n continue;\r\n }\r\n let fltType = this.tf.getFilterType(i);\r\n let isMultipleFilter =\r\n (fltType === CHECKLIST || fltType === MULTIPLE);\r\n\r\n // Always hide all single selection filter types but hide multiple\r\n // selection filter types only if index set\r\n if (!isMultipleFilter || !isUndef(exceptIdx)) {\r\n this.close(i);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Build all the icons representing the pop-up filters\r\n */\r\n setIconsState() {\r\n for (let i = 0; i < this.fltIcons.length; i++) {\r\n this.changeState(i, false);\r\n }\r\n }\r\n\r\n /**\r\n * Apply specified icon state\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} active Apply active state\r\n */\r\n changeState(colIndex, active) {\r\n let icon = this.fltIcons[colIndex];\r\n if (icon) {\r\n icon.src = active ? this.activeIconPath : this.iconPath;\r\n }\r\n }\r\n\r\n /**\r\n * Remove pop-up filters\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n this.filtersCache = [];\r\n for (let i = 0; i < this.fltElms.length; i++) {\r\n let container = this.fltElms[i],\r\n placeholder = container.parentNode,\r\n icon = this.fltSpans[i],\r\n iconImg = this.fltIcons[i];\r\n if (container) {\r\n removeElm(container);\r\n this.filtersCache[i] = container;\r\n }\r\n container = null;\r\n if (placeholder) {\r\n removeElm(placeholder);\r\n }\r\n placeholder = null;\r\n if (icon) {\r\n removeElm(icon);\r\n }\r\n icon = null;\r\n if (iconImg) {\r\n removeElm(iconImg);\r\n }\r\n iconImg = null;\r\n }\r\n this.fltElms = [];\r\n this.fltSpans = [];\r\n this.fltIcons = [];\r\n\r\n // TODO: expose an API to handle external filter IDs\r\n this.tf.externalFltIds = [];\r\n\r\n // unsubscribe to events\r\n this.emitter.off(['before-filtering'], () => this.setIconsState());\r\n this.emitter.off(['after-filtering'], () => this.closeAll());\r\n this.emitter.off(['cell-processed'],\r\n (tf, cellIndex) => this.changeState(cellIndex, true));\r\n this.emitter.off(['filters-row-inserted'], () => this.buildIcons());\r\n this.emitter.off(['before-filter-init'],\r\n (tf, colIndex) => this.build(colIndex));\r\n\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import {createText, createElm, getText} from '../dom';\r\nimport {isArray} from '../types';\r\nimport {rgxEsc} from '../string';\r\nimport {defaultsStr} from '../settings';\r\n\r\n/**\r\n * Highlight matched keywords upon filtering\r\n *\r\n * @export\r\n * @class HighlightKeyword\r\n */\r\nexport class HighlightKeyword {\r\n\r\n /**\r\n * Creates an instance of HighlightKeyword\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n let f = tf.config();\r\n\r\n /**\r\n * Css class for highlighted term\r\n * @type {String}\r\n */\r\n this.highlightCssClass = defaultsStr(f.highlight_css_class, 'keyword');\r\n\r\n /**\r\n * TableFilter instance\r\n * @type {TableFilter}\r\n */\r\n this.tf = tf;\r\n\r\n /**\r\n * TableFilter's emitter instance\r\n * @type {Emitter}\r\n */\r\n this.emitter = tf.emitter;\r\n }\r\n\r\n /**\r\n * Initializes HighlightKeyword instance\r\n */\r\n init() {\r\n this.emitter.on(\r\n ['before-filtering', 'destroy'],\r\n () => this.unhighlightAll()\r\n );\r\n this.emitter.on(\r\n ['highlight-keyword'],\r\n (tf, cell, term) => this._processTerm(cell, term)\r\n );\r\n }\r\n\r\n /**\r\n * Highlight occurences of searched term in passed node\r\n * @param {Node} node\r\n * @param {String} term Searched term\r\n * @param {String} cssClass Css class name\r\n *\r\n * TODO: refactor this method\r\n */\r\n highlight(node, term, cssClass) {\r\n // Iterate into this nodes childNodes\r\n if (node.hasChildNodes) {\r\n let children = node.childNodes;\r\n for (let i = 0; i < children.length; i++) {\r\n this.highlight(children[i], term, cssClass);\r\n }\r\n }\r\n\r\n if (node.nodeType === 3) {\r\n let nodeVal = node.nodeValue.toLowerCase();\r\n let termIdx = nodeVal.indexOf(term.toLowerCase());\r\n\r\n if (termIdx !== -1) {\r\n let pn = node.parentNode;\r\n if (pn && pn.className !== cssClass) {\r\n // term not highlighted yet\r\n let nv = node.nodeValue,\r\n // Create a load of replacement nodes\r\n before = createText(nv.substr(0, termIdx)),\r\n value = nv.substr(termIdx, term.length),\r\n after = createText(nv.substr(termIdx + term.length)),\r\n text = createText(value),\r\n container = createElm('span');\r\n container.className = cssClass;\r\n container.appendChild(text);\r\n pn.insertBefore(before, node);\r\n pn.insertBefore(container, node);\r\n pn.insertBefore(after, node);\r\n pn.removeChild(node);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Removes highlight to nodes matching passed string\r\n * @param {String} term\r\n * @param {String} cssClass Css class to remove\r\n */\r\n unhighlight(term, cssClass) {\r\n let highlightedNodes = this.tf.dom().querySelectorAll(`.${cssClass}`);\r\n for (let i = 0; i < highlightedNodes.length; i++) {\r\n let n = highlightedNodes[i];\r\n let nodeVal = getText(n);\r\n\r\n if (nodeVal.toLowerCase().indexOf(term.toLowerCase()) !== -1) {\r\n let parentNode = n.parentNode;\r\n parentNode.replaceChild(createText(nodeVal), n);\r\n parentNode.normalize();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clear all occurrences of highlighted nodes\r\n */\r\n unhighlightAll() {\r\n if (!this.tf.highlightKeywords) {\r\n return;\r\n }\r\n // iterate filters values to unhighlight all values\r\n this.tf.getFiltersValue().forEach((val) => {\r\n if (isArray(val)) {\r\n val.forEach((item) =>\r\n this.unhighlight(item, this.highlightCssClass));\r\n } else {\r\n this.unhighlight(val, this.highlightCssClass);\r\n }\r\n });\r\n }\r\n\r\n /** Remove feature */\r\n destroy() {\r\n this.emitter.off(\r\n ['before-filtering', 'destroy'],\r\n () => this.unhighlightAll()\r\n );\r\n this.emitter.off(\r\n ['highlight-keyword'],\r\n (tf, cell, term) => this._processTerm(cell, term)\r\n );\r\n }\r\n\r\n /**\r\n * Ensure filtering operators are handled before highlighting any match\r\n * @param {any} Table cell to look searched term into\r\n * @param {any} Searched termIdx\r\n */\r\n _processTerm(cell, term) {\r\n let tf = this.tf;\r\n let reLk = new RegExp(rgxEsc(tf.lkOperator));\r\n let reEq = new RegExp(tf.eqOperator);\r\n let reSt = new RegExp(tf.stOperator);\r\n let reEn = new RegExp(tf.enOperator);\r\n let reLe = new RegExp(tf.leOperator);\r\n let reGe = new RegExp(tf.geOperator);\r\n let reL = new RegExp(tf.lwOperator);\r\n let reG = new RegExp(tf.grOperator);\r\n let reD = new RegExp(tf.dfOperator);\r\n\r\n term = term\r\n .replace(reLk, '')\r\n .replace(reEq, '')\r\n .replace(reSt, '')\r\n .replace(reEn, '');\r\n\r\n if (reLe.test(term) || reGe.test(term) || reL.test(term) ||\r\n reG.test(term) || reD.test(term)) {\r\n term = getText(cell);\r\n }\r\n\r\n if (term === '') {\r\n return;\r\n }\r\n\r\n this.highlight(cell, term, this.highlightCssClass);\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {EMPTY_FN} from '../types';\r\nimport {root} from '../root';\r\nimport {NONE} from '../const';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\n\r\nconst EVENTS = [\r\n 'before-filtering',\r\n 'before-populating-filter',\r\n 'before-page-change',\r\n 'before-clearing-filters',\r\n 'before-page-length-change',\r\n 'before-reset-page',\r\n 'before-reset-page-length',\r\n 'before-loading-extensions',\r\n 'before-loading-themes'\r\n];\r\n\r\n/**\r\n * Activity indicator\r\n *\r\n * @export\r\n * @class Loader\r\n * @extends {Feature}\r\n */\r\nexport class Loader extends Feature {\r\n\r\n /**\r\n * Creates an instance of Loader.\r\n *\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'loader');\r\n\r\n let f = this.config.loader || {};\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.targetId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Loader container DOM element\r\n * @type {DOMElement}\r\n */\r\n this.cont = null;\r\n\r\n /**\r\n * Text displayed when indicator is visible\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, 'Loading...');\r\n\r\n /**\r\n * Custom HTML injected in Loader's container element\r\n * @type {String}\r\n */\r\n this.html = defaultsStr(f.html, null);\r\n\r\n /**\r\n * Css class for Loader's container element\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'loader');\r\n\r\n /**\r\n * Close delay in milliseconds\r\n * @type {Number}\r\n */\r\n this.closeDelay = 250;\r\n\r\n /**\r\n * Callback fired when loader is displayed\r\n * @type {Function}\r\n */\r\n this.onShow = defaultsFn(f.on_show_loader, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired when loader is closed\r\n * @type {Function}\r\n */\r\n this.onHide = defaultsFn(f.on_hide_loader, EMPTY_FN);\r\n }\r\n\r\n /**\r\n * Initializes Loader instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n let emitter = this.emitter;\r\n\r\n let containerDiv = createElm('div');\r\n containerDiv.className = this.cssClass;\r\n\r\n let targetEl = !this.targetId ?\r\n tf.dom().parentNode : elm(this.targetId);\r\n if (!this.targetId) {\r\n targetEl.insertBefore(containerDiv, tf.dom());\r\n } else {\r\n targetEl.appendChild(containerDiv);\r\n }\r\n this.cont = containerDiv;\r\n if (!this.html) {\r\n this.cont.appendChild(createText(this.text));\r\n } else {\r\n this.cont.innerHTML = this.html;\r\n }\r\n\r\n this.show(NONE);\r\n\r\n // Subscribe to events\r\n emitter.on(EVENTS, () => this.show(''));\r\n emitter.on(EVENTS, () => this.show(NONE));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Shows or hides activity indicator\r\n * @param {String} Two possible values: '' or 'none'\r\n */\r\n show(p) {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n\r\n let displayLoader = () => {\r\n if (!this.cont) {\r\n return;\r\n }\r\n if (p !== NONE) {\r\n this.onShow(this);\r\n }\r\n this.cont.style.display = p;\r\n if (p === NONE) {\r\n this.onHide(this);\r\n }\r\n };\r\n\r\n let t = p === NONE ? this.closeDelay : 1;\r\n root.setTimeout(displayLoader, t);\r\n }\r\n\r\n /**\r\n * Removes feature\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let emitter = this.emitter;\r\n\r\n removeElm(this.cont);\r\n this.cont = null;\r\n\r\n // Unsubscribe to events\r\n emitter.off(EVENTS, () => this.show(''));\r\n emitter.off(EVENTS, () => this.show(NONE));\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, removeElm, elm, tag} from '../dom';\r\nimport {addEvt, targetEvt} from '../event';\r\nimport {contains} from '../string';\r\nimport {NONE} from '../const';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsNb, defaultsArr\r\n} from '../settings';\r\n\r\n/**\r\n * Grid layout, table with fixed headers\r\n */\r\nexport class GridLayout extends Feature {\r\n\r\n /**\r\n * Creates an instance of GridLayout\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'gridLayout');\r\n\r\n let f = this.config.grid_layout || {};\r\n\r\n /**\r\n * Grid-layout container width as CSS string\r\n * @type {String}\r\n */\r\n this.width = defaultsStr(f.width, null);\r\n\r\n /**\r\n * Grid-layout container height as CSS string\r\n * @type {String}\r\n */\r\n this.height = defaultsStr(f.height, null);\r\n\r\n /**\r\n * Css class for main container element\r\n * @type {String}\r\n */\r\n this.mainContCssClass = defaultsStr(f.cont_css_class, 'grd_Cont');\r\n\r\n /**\r\n * Css class for body table container element\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.tbl_cont_css_class, 'grd_tblCont');\r\n\r\n /**\r\n * Css class for headers table container element\r\n * @type {String}\r\n */\r\n this.headContCssClass = defaultsStr(f.tbl_head_css_class,\r\n 'grd_headTblCont');\r\n\r\n /**\r\n * Css class for toolbar container element (rows counter, paging etc.)\r\n * @type {String}\r\n */\r\n this.infDivCssClass = defaultsStr(f.inf_grid_css_class, 'grd_inf');\r\n\r\n /**\r\n * Index of the headers row, default: 0\r\n * @type {Number}\r\n */\r\n this.headRowIndex = defaultsNb(f.headers_row_index, 0);\r\n\r\n /**\r\n * Collection of the header row indexes to be moved into headers table\r\n * @type {Array}\r\n */\r\n this.headRows = defaultsArr(f.headers_rows, [0]);\r\n\r\n /**\r\n * Enable or disable column filters generation, default: true\r\n * @type {Boolean}\r\n */\r\n this.filters = defaultsBool(f.filters, true);\r\n\r\n /**\r\n * Enable or disable column headers, default: false\r\n * @type {Boolean}\r\n */\r\n this.noHeaders = Boolean(f.no_headers);\r\n\r\n /**\r\n * Grid-layout default column widht as CSS string\r\n * @type {String}\r\n */\r\n this.defaultColWidth = defaultsStr(f.default_col_width, '100px');\r\n\r\n /**\r\n * List of column elements\r\n * @type {Array}\r\n * @private\r\n */\r\n this.colElms = [];\r\n\r\n /**\r\n * Prefix for grid-layout filter's cell ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfxGridFltTd = '_td_';\r\n\r\n /**\r\n * Prefix for grid-layout header's cell ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfxGridTh = 'tblHeadTh_';\r\n\r\n /**\r\n * Mark-up of original HTML table\r\n * @type {String}\r\n * @private\r\n */\r\n this.sourceTblHtml = tf.dom().outerHTML;\r\n\r\n /**\r\n * Indicates if working table has column elements\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.tblHasColTag = tag(tf.dom(), 'col').length > 0 ? true : false;\r\n\r\n /**\r\n * Main container element\r\n * @private\r\n */\r\n this.tblMainCont = null;\r\n\r\n /**\r\n * Table container element\r\n * @private\r\n */\r\n this.tblCont = null;\r\n\r\n /**\r\n * Headers' table container element\r\n * @private\r\n */\r\n this.headTblCont = null;\r\n\r\n /**\r\n * Headers' table element\r\n * @private\r\n */\r\n this.headTbl = null;\r\n\r\n // filters flag at TF level\r\n tf.fltGrid = this.filters;\r\n }\r\n\r\n /**\r\n * Generates a grid with fixed headers\r\n * TODO: reduce size of init by extracting single purposed methods\r\n */\r\n init() {\r\n let tf = this.tf;\r\n let tbl = tf.dom();\r\n\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n // Override relevant TableFilter properties\r\n this.setOverrides();\r\n\r\n // Assign default column widths\r\n this.setDefaultColWidths();\r\n\r\n //Main container: it will contain all the elements\r\n this.tblMainCont = this.createContainer(\r\n 'div', this.mainContCssClass);\r\n if (this.width) {\r\n this.tblMainCont.style.width = this.width;\r\n }\r\n tbl.parentNode.insertBefore(this.tblMainCont, tbl);\r\n\r\n //Table container: div wrapping content table\r\n this.tblCont = this.createContainer('div', this.contCssClass);\r\n this.setConfigWidth(this.tblCont);\r\n if (this.height) {\r\n this.tblCont.style.height = this.height;\r\n }\r\n tbl.parentNode.insertBefore(this.tblCont, tbl);\r\n let t = removeElm(tbl);\r\n this.tblCont.appendChild(t);\r\n\r\n //In case table width is expressed in %\r\n if (tbl.style.width === '') {\r\n let tblW = this.initialTableWidth();\r\n tbl.style.width = (contains('%', tblW) ?\r\n tbl.clientWidth : tblW) + 'px';\r\n }\r\n\r\n let d = removeElm(this.tblCont);\r\n this.tblMainCont.appendChild(d);\r\n\r\n //Headers table container: div wrapping headers table\r\n this.headTblCont = this.createContainer(\r\n 'div', this.headContCssClass);\r\n\r\n //Headers table\r\n this.headTbl = createElm('table');\r\n let tH = createElm('tHead');\r\n\r\n //1st row should be headers row, ids are added if not set\r\n //Those ids are used by the sort feature\r\n let hRow = tbl.rows[this.headRowIndex];\r\n let sortTriggers = this.getSortTriggerIds(hRow);\r\n\r\n //Filters row is created\r\n let filtersRow = this.createFiltersRow();\r\n\r\n //Headers row are moved from content table to headers table\r\n this.setHeadersRow(tH);\r\n\r\n this.headTbl.appendChild(tH);\r\n if (tf.filtersRowIndex === 0) {\r\n tH.insertBefore(filtersRow, hRow);\r\n } else {\r\n tH.appendChild(filtersRow);\r\n }\r\n\r\n this.headTblCont.appendChild(this.headTbl);\r\n this.tblCont.parentNode.insertBefore(this.headTblCont, this.tblCont);\r\n\r\n //THead needs to be removed in content table for sort feature\r\n let thead = tag(tbl, 'thead');\r\n if (thead.length > 0) {\r\n tbl.removeChild(thead[0]);\r\n }\r\n\r\n // ensure table layout is always set even if already set in css\r\n // definitions, potentially with custom css class this could be lost\r\n this.headTbl.style.tableLayout = 'fixed';\r\n tbl.style.tableLayout = 'fixed';\r\n\r\n //content table without headers needs col widths to be reset\r\n tf.setColWidths(this.headTbl);\r\n\r\n //Headers container width\r\n this.headTbl.style.width = tbl.style.width;\r\n //\r\n\r\n //scroll synchronisation\r\n addEvt(this.tblCont, 'scroll', (evt) => {\r\n let elm = targetEvt(evt);\r\n let scrollLeft = elm.scrollLeft;\r\n this.headTblCont.scrollLeft = scrollLeft;\r\n //New pointerX calc taking into account scrollLeft\r\n // if(!o.isPointerXOverwritten){\r\n // try{\r\n // o.Evt.pointerX = function(evt){\r\n // let e = evt || global.event;\r\n // let bdScrollLeft = tf_StandardBody().scrollLeft +\r\n // scrollLeft;\r\n // return (e.pageX + scrollLeft) ||\r\n // (e.clientX + bdScrollLeft);\r\n // };\r\n // o.isPointerXOverwritten = true;\r\n // } catch(err) {\r\n // o.isPointerXOverwritten = false;\r\n // }\r\n // }\r\n });\r\n\r\n // TODO: Trigger a custom event handled by sort extension\r\n let sort = tf.extension('sort');\r\n if (sort) {\r\n sort.asyncSort = true;\r\n sort.triggerIds = sortTriggers;\r\n }\r\n\r\n //Col elements are enough to keep column widths after sorting and\r\n //filtering\r\n this.setColumnElements();\r\n\r\n if (tf.popupFilters) {\r\n filtersRow.style.display = NONE;\r\n }\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Overrides TableFilter instance properties to adjust to grid layout mode\r\n * @private\r\n */\r\n setOverrides() {\r\n let tf = this.tf;\r\n tf.refRow = 0;\r\n tf.headersRow = 0;\r\n tf.filtersRowIndex = 1;\r\n }\r\n\r\n /**\r\n * Set grid-layout default column widths if column widths are not defined\r\n * @private\r\n */\r\n setDefaultColWidths() {\r\n let tf = this.tf;\r\n if (tf.colWidths.length > 0) {\r\n return;\r\n }\r\n\r\n tf.eachCol((k) => {\r\n let colW;\r\n let cell = tf.dom().rows[tf.getHeadersRowIndex()].cells[k];\r\n if (cell.width !== '') {\r\n colW = cell.width;\r\n } else if (cell.style.width !== '') {\r\n colW = parseInt(cell.style.width, 10);\r\n } else {\r\n colW = this.defaultColWidth;\r\n }\r\n tf.colWidths[k] = colW;\r\n });\r\n\r\n tf.setColWidths();\r\n }\r\n\r\n /**\r\n * Initial table width\r\n * @returns {Number}\r\n * @private\r\n */\r\n initialTableWidth() {\r\n let tbl = this.tf.dom();\r\n let width; //initial table width\r\n\r\n if (tbl.width !== '') {\r\n width = tbl.width;\r\n }\r\n else if (tbl.style.width !== '') {\r\n width = tbl.style.width;\r\n } else {\r\n width = tbl.clientWidth;\r\n }\r\n return parseInt(width, 10);\r\n }\r\n\r\n /**\r\n * Creates container element\r\n * @param {String} tag Tag name\r\n * @param {String} className Css class to assign to element\r\n * @returns {DOMElement}\r\n * @private\r\n */\r\n createContainer(tag, className) {\r\n let element = createElm(tag);\r\n element.className = className;\r\n return element;\r\n }\r\n\r\n /**\r\n * Creates filters row with cells\r\n * @returns {HTMLTableRowElement}\r\n * @private\r\n */\r\n createFiltersRow() {\r\n let tf = this.tf;\r\n let filtersRow = createElm('tr');\r\n if (this.filters && tf.fltGrid) {\r\n tf.externalFltIds = [];\r\n tf.eachCol((j) => {\r\n let fltTdId = `${tf.prfxFlt + j + this.prfxGridFltTd + tf.id}`;\r\n let cl = createElm(tf.fltCellTag, ['id', fltTdId]);\r\n filtersRow.appendChild(cl);\r\n tf.externalFltIds[j] = fltTdId;\r\n });\r\n }\r\n return filtersRow;\r\n }\r\n\r\n /**\r\n * Generates column elements if necessary and assigns their widths\r\n * @private\r\n */\r\n setColumnElements() {\r\n let tf = this.tf;\r\n let cols = tag(tf.dom(), 'col');\r\n this.tblHasColTag = cols.length > 0;\r\n\r\n for (let k = (tf.getCellsNb() - 1); k >= 0; k--) {\r\n let col;\r\n\r\n if (!this.tblHasColTag) {\r\n col = createElm('col');\r\n tf.dom().insertBefore(col, tf.dom().firstChild);\r\n } else {\r\n col = cols[k];\r\n }\r\n col.style.width = tf.colWidths[k];\r\n this.colElms[k] = col;\r\n }\r\n this.tblHasColTag = true;\r\n }\r\n\r\n /**\r\n * Sets headers row in headers table\r\n * @param {HTMLHeadElement} tableHead Table head element\r\n * @private\r\n */\r\n setHeadersRow(tableHead) {\r\n if (this.noHeaders) {\r\n // Handle table with no headers, assuming here headers do not\r\n // exist\r\n tableHead.appendChild(createElm('tr'));\r\n } else {\r\n // Headers row are moved from content table to headers table\r\n for (let i = 0; i < this.headRows.length; i++) {\r\n let row = this.tf.dom().rows[this.headRows[i]];\r\n tableHead.appendChild(row);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets width defined in configuration to passed element\r\n * @param {DOMElement} element DOM element\r\n * @private\r\n */\r\n setConfigWidth(element) {\r\n if (!this.width) {\r\n return;\r\n }\r\n if (this.width.indexOf('%') !== -1) {\r\n element.style.width = '100%';\r\n } else {\r\n element.style.width = this.width;\r\n }\r\n }\r\n\r\n /**\r\n * Returns a list of header IDs used for specifing external sort triggers\r\n * @param {HTMLTableRowElement} row DOM row element\r\n * @returns {Array} List of IDs\r\n * @private\r\n */\r\n getSortTriggerIds(row) {\r\n let tf = this.tf;\r\n let sortTriggers = [];\r\n tf.eachCol((n) => {\r\n let c = row.cells[n];\r\n let thId = c.getAttribute('id');\r\n if (!thId || thId === '') {\r\n thId = `${this.prfxGridTh + n}_${tf.id}`;\r\n c.setAttribute('id', thId);\r\n }\r\n sortTriggers.push(thId);\r\n });\r\n return sortTriggers;\r\n }\r\n\r\n /**\r\n * Removes the grid layout\r\n */\r\n destroy() {\r\n let tf = this.tf;\r\n let tbl = tf.dom();\r\n\r\n if (!this.initialized) {\r\n return;\r\n }\r\n let t = removeElm(tbl);\r\n this.tblMainCont.parentNode.insertBefore(t, this.tblMainCont);\r\n removeElm(this.tblMainCont);\r\n\r\n this.tblMainCont = null;\r\n this.headTblCont = null;\r\n this.headTbl = null;\r\n this.tblCont = null;\r\n\r\n tbl.outerHTML = this.sourceTblHtml;\r\n //needed to keep reference of table element for future usage\r\n this.tf.tbl = elm(tf.id);\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {root} from './root';\r\n\r\n/**\r\n * Cookie utilities\r\n */\r\n\r\nconst doc = root.document;\r\n\r\nexport default {\r\n\r\n /**\r\n * Write a cookie\r\n * @param {String} name Name of the cookie\r\n * @param {String} value Value of the cookie\r\n * @param {Number} hours Cookie duration in hours\r\n */\r\n write(name, value, hours) {\r\n let expire = '';\r\n if (hours) {\r\n expire = new Date((new Date()).getTime() + hours * 3600000);\r\n expire = '; expires=' + expire.toGMTString();\r\n }\r\n doc.cookie = name + '=' + escape(value) + expire;\r\n },\r\n\r\n /**\r\n * Read a cookie\r\n * @param {String} name Name of the cookie\r\n * @returns {String} Value of the cookie\r\n */\r\n read(name) {\r\n let cookieValue = '',\r\n search = name + '=';\r\n if (doc.cookie.length > 0) {\r\n let cookie = doc.cookie,\r\n offset = cookie.indexOf(search);\r\n if (offset !== -1) {\r\n offset += search.length;\r\n let end = cookie.indexOf(';', offset);\r\n if (end === -1) {\r\n end = cookie.length;\r\n }\r\n cookieValue = unescape(cookie.substring(offset, end));\r\n }\r\n }\r\n return cookieValue;\r\n },\r\n\r\n /**\r\n * Remove a cookie\r\n * @param {String} name Name of the cookie\r\n */\r\n remove(name) {\r\n this.write(name, '', -1);\r\n }\r\n\r\n};\r\n","import Cookie from '../cookie';\r\nimport {root} from '../root';\r\n\r\nconst JSON = root.JSON;\r\nconst localStorage = root.localStorage;\r\nconst location = root.location;\r\n\r\n/**\r\n * Checks if browser has Storage feature\r\n */\r\nexport const hasStorage = () => {\r\n return 'Storage' in root;\r\n};\r\n\r\n/**\r\n * Stores the features state in browser's local storage or cookie\r\n *\r\n * @export\r\n * @class Storage\r\n */\r\nexport class Storage {\r\n\r\n /**\r\n * Creates an instance of Storage\r\n *\r\n * @param {State} state Instance of State\r\n */\r\n constructor(state) {\r\n\r\n /**\r\n * State object\r\n * @type {State}\r\n * @private\r\n */\r\n this.state = state;\r\n\r\n /**\r\n * TableFilter object\r\n * @type {TableFilter}\r\n * @private\r\n */\r\n this.tf = state.tf;\r\n\r\n /**\r\n * Persist with local storage\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.enableLocalStorage = state.enableLocalStorage && hasStorage();\r\n\r\n /**\r\n * Persist with cookie\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.enableCookie = state.enableCookie && !this.enableLocalStorage;\r\n\r\n /**\r\n * Emitter object\r\n * @type {Emitter}\r\n * @private\r\n */\r\n this.emitter = state.emitter;\r\n\r\n /**\r\n * Cookie duration in hours from state object\r\n * @type {Number}\r\n * @private\r\n */\r\n this.duration = state.cookieDuration;\r\n }\r\n\r\n\r\n /**\r\n * Initializes the Storage object\r\n */\r\n init() {\r\n this.emitter.on(['state-changed'], (tf, state) => this.save(state));\r\n this.emitter.on(['initialized'], () => this.sync());\r\n }\r\n\r\n /**\r\n * Persists the features state on state changes\r\n *\r\n * @param {State} state Instance of State\r\n */\r\n save(state) {\r\n if (this.enableLocalStorage) {\r\n localStorage[this.getKey()] = JSON.stringify(state);\r\n } else {\r\n Cookie.write(this.getKey(), JSON.stringify(state), this.duration);\r\n }\r\n }\r\n\r\n /**\r\n * Turns stored string into a State JSON object\r\n *\r\n * @returns {Object} JSON object\r\n */\r\n retrieve() {\r\n let state = null;\r\n if (this.enableLocalStorage) {\r\n state = localStorage[this.getKey()];\r\n } else {\r\n state = Cookie.read(this.getKey());\r\n }\r\n\r\n if (!state) {\r\n return null;\r\n }\r\n return JSON.parse(state);\r\n }\r\n\r\n /**\r\n * Removes persisted state from storage\r\n */\r\n remove() {\r\n if (this.enableLocalStorage) {\r\n localStorage.removeItem(this.getKey());\r\n } else {\r\n Cookie.remove(this.getKey());\r\n }\r\n }\r\n\r\n /**\r\n * Applies persisted state to features\r\n */\r\n sync() {\r\n let state = this.retrieve();\r\n if (!state) {\r\n return;\r\n }\r\n // override current state with persisted one and sync features\r\n this.state.overrideAndSync(state);\r\n }\r\n\r\n /**\r\n * Returns the storage key\r\n *\r\n * @returns {String} Key\r\n */\r\n getKey() {\r\n return JSON.stringify({\r\n key: `${this.tf.prfxTf}_${this.tf.id}`,\r\n path: location.pathname\r\n });\r\n }\r\n\r\n /**\r\n * Release Storage event subscriptions and clear fields\r\n */\r\n destroy() {\r\n this.emitter.off(['state-changed'], (tf, state) => this.save(state));\r\n this.emitter.off(['initialized'], () => this.sync());\r\n\r\n this.remove();\r\n\r\n this.state = null;\r\n this.emitter = null;\r\n }\r\n}\r\n","import {addEvt, removeEvt} from '../event';\r\nimport {root} from '../root';\r\n\r\nconst JSON = root.JSON;\r\nconst location = root.location;\r\nconst decodeURIComponent = root.decodeURIComponent;\r\nconst encodeURIComponent = root.encodeURIComponent;\r\n\r\n/**\r\n * Checks if browser has onhashchange event\r\n */\r\nexport const hasHashChange = () => {\r\n let docMode = root.documentMode;\r\n return ('onhashchange' in root) && (docMode === undefined || docMode > 7);\r\n};\r\n\r\n/**\r\n * Manages state via URL hash changes\r\n *\r\n * @export\r\n * @class Hash\r\n */\r\nexport class Hash {\r\n\r\n /**\r\n * Creates an instance of Hash\r\n *\r\n * @param {State} state Instance of State\r\n */\r\n constructor(state) {\r\n /**\r\n * State object\r\n * @type {State}\r\n */\r\n this.state = state;\r\n\r\n /**\r\n * Cached URL hash\r\n * @type {String} Hash string\r\n * @private\r\n */\r\n this.lastHash = null;\r\n\r\n /**\r\n * Application event emitter instance\r\n * @type {Emitter}\r\n */\r\n this.emitter = state.emitter;\r\n\r\n /**\r\n * Bound sync wrapper for future use\r\n * @private\r\n */\r\n this.boundSync = null;\r\n }\r\n\r\n /**\r\n * Initializes the Hash object\r\n */\r\n init() {\r\n if (!hasHashChange()) {\r\n return;\r\n }\r\n\r\n this.lastHash = location.hash;\r\n //Store a bound sync wrapper\r\n this.boundSync = this.sync.bind(this);\r\n this.emitter.on(['state-changed'], (tf, state) => this.update(state));\r\n this.emitter.on(['initialized'], this.boundSync);\r\n addEvt(root, 'hashchange', this.boundSync);\r\n }\r\n\r\n /**\r\n * Updates the URL hash based on a state change\r\n *\r\n * @param {State} state Instance of State\r\n */\r\n update(state) {\r\n let hash = `#${encodeURIComponent(JSON.stringify(state))}`;\r\n if (this.lastHash === hash) {\r\n return;\r\n }\r\n\r\n location.hash = hash;\r\n this.lastHash = hash;\r\n }\r\n\r\n /**\r\n * Converts a URL hash into a state JSON object\r\n *\r\n * @param {String} hash URL hash fragment\r\n * @returns {Object} JSON object\r\n */\r\n parse(hash) {\r\n if (hash.indexOf('#') === -1) {\r\n return null;\r\n }\r\n hash = hash.substr(1);\r\n return JSON.parse(decodeURIComponent(hash));\r\n }\r\n\r\n /**\r\n * Applies current hash state to features\r\n */\r\n sync() {\r\n let state = this.parse(location.hash);\r\n if (!state) {\r\n return;\r\n }\r\n // override current state with persisted one and sync features\r\n this.state.overrideAndSync(state);\r\n }\r\n\r\n /**\r\n * Release Hash event subscriptions and clear fields\r\n */\r\n destroy() {\r\n this.emitter.off(['state-changed'], (tf, state) => this.update(state));\r\n this.emitter.off(['initialized'], this.boundSync);\r\n removeEvt(root, 'hashchange', this.boundSync);\r\n\r\n this.state = null;\r\n this.lastHash = null;\r\n this.emitter = null;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {Hash} from './hash';\r\nimport {Storage} from './storage';\r\nimport {isEmpty} from '../string';\r\nimport {isArray, isNull, isString, isUndef} from '../types';\r\nimport {defaultsBool, defaultsNb} from '../settings';\r\n\r\n/**\r\n * Features state object persistable with localStorage, cookie or URL hash\r\n *\r\n * @export\r\n * @class State\r\n * @extends {Feature}\r\n */\r\nexport class State extends Feature {\r\n\r\n /**\r\n * Creates an instance of State\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'state');\r\n\r\n let cfg = this.config.state || {};\r\n\r\n /**\r\n * Determines whether state is persisted with URL hash\r\n * @type {Boolean}\r\n */\r\n this.enableHash = cfg === true ||\r\n (isArray(cfg.types) && cfg.types.indexOf('hash') !== -1);\r\n\r\n /**\r\n * Determines whether state is persisted with localStorage\r\n * @type {Boolean}\r\n */\r\n this.enableLocalStorage = isArray(cfg.types) &&\r\n cfg.types.indexOf('local_storage') !== -1;\r\n\r\n /**\r\n * Determines whether state is persisted with localStorage\r\n * @type {Boolean}\r\n */\r\n this.enableCookie = isArray(cfg.types) &&\r\n cfg.types.indexOf('cookie') !== -1;\r\n\r\n /**\r\n * Persist filters values, enabled by default\r\n * @type {Boolean}\r\n */\r\n this.persistFilters = defaultsBool(cfg.filters, true);\r\n\r\n /**\r\n * Persist current page number when paging is enabled\r\n * @type {Boolean}\r\n */\r\n this.persistPageNumber = Boolean(cfg.page_number);\r\n\r\n /**\r\n * Persist page length when paging is enabled\r\n * @type {Boolean}\r\n */\r\n this.persistPageLength = Boolean(cfg.page_length);\r\n\r\n /**\r\n * Persist column sorting\r\n * @type {Boolean}\r\n */\r\n this.persistSort = Boolean(cfg.sort);\r\n\r\n /**\r\n * Persist columns visibility\r\n * @type {Boolean}\r\n */\r\n this.persistColsVisibility = Boolean(cfg.columns_visibility);\r\n\r\n /**\r\n * Persist filters row visibility\r\n * @type {Boolean}\r\n */\r\n this.persistFiltersVisibility = Boolean(cfg.filters_visibility);\r\n\r\n /**\r\n * Cookie duration in hours\r\n * @type {Boolean}\r\n */\r\n this.cookieDuration = defaultsNb(parseInt(cfg.cookie_duration, 10),\r\n 87600);\r\n\r\n /**\r\n * Enable Storage if localStorage or cookie is required\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.enableStorage = this.enableLocalStorage || this.enableCookie;\r\n\r\n /**\r\n * Storage instance if storage is required\r\n * @type {Storage}\r\n * @private\r\n */\r\n this.storage = null;\r\n\r\n /**\r\n * Hash instance if URL hash is required\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.hash = null;\r\n\r\n /**\r\n * Current page number\r\n * @type {Number}\r\n * @private\r\n */\r\n this.pageNb = null;\r\n\r\n /**\r\n * Current page length\r\n * @type {Number}\r\n * @private\r\n */\r\n this.pageLength = null;\r\n\r\n /**\r\n * Current column sorting\r\n * @type {Object}\r\n * @private\r\n */\r\n this.sort = null;\r\n\r\n /**\r\n * Current hidden columns\r\n * @type {Object}\r\n * @private\r\n */\r\n this.hiddenCols = null;\r\n\r\n /**\r\n * Filters row visibility\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.filtersVisibility = null;\r\n\r\n /**\r\n * State object\r\n * @type {Object}\r\n * @private\r\n */\r\n this.state = {};\r\n\r\n /**\r\n * Prefix for column ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfxCol = 'col_';\r\n\r\n /**\r\n * Prefix for page number ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.pageNbKey = 'page';\r\n\r\n /**\r\n * Prefix for page length ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.pageLengthKey = 'page_length';\r\n\r\n /**\r\n * Prefix for filters visibility ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.filtersVisKey = 'filters_visibility';\r\n }\r\n\r\n /**\r\n * Initializes State instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.on(['after-filtering'], () => this.update());\r\n this.emitter.on(['after-page-change', 'after-clearing-filters'],\r\n (tf, pageNb) => this.updatePage(pageNb));\r\n this.emitter.on(['after-page-length-change'],\r\n (tf, pageLength) => this.updatePageLength(pageLength));\r\n this.emitter.on(['column-sorted'],\r\n (tf, index, descending) => this.updateSort(index, descending));\r\n this.emitter.on(['sort-initialized'], () => this._syncSort());\r\n this.emitter.on(['columns-visibility-initialized'],\r\n () => this._syncColsVisibility());\r\n this.emitter.on(['column-shown', 'column-hidden'], (tf, feature,\r\n colIndex, hiddenCols) => this.updateColsVisibility(hiddenCols));\r\n this.emitter.on(['filters-visibility-initialized'],\r\n () => this._syncFiltersVisibility());\r\n this.emitter.on(['filters-toggled'],\r\n (tf, extension, visible) => this.updateFiltersVisibility(visible));\r\n\r\n if (this.enableHash) {\r\n this.hash = new Hash(this);\r\n this.hash.init();\r\n }\r\n if (this.enableStorage) {\r\n this.storage = new Storage(this);\r\n this.storage.init();\r\n }\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n\r\n /**\r\n * Update state object based on current features state\r\n */\r\n update() {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n\r\n if (this.persistFilters) {\r\n let filterValues = tf.getFiltersValue();\r\n\r\n filterValues.forEach((val, idx) => {\r\n let key = `${this.prfxCol}${idx}`;\r\n\r\n if (isString(val) && isEmpty(val)) {\r\n if (state.hasOwnProperty(key)) {\r\n state[key].flt = undefined;\r\n }\r\n } else {\r\n state[key] = state[key] || {};\r\n state[key].flt = val;\r\n }\r\n });\r\n }\r\n\r\n if (this.persistPageNumber) {\r\n if (isNull(this.pageNb)) {\r\n state[this.pageNbKey] = undefined;\r\n } else {\r\n state[this.pageNbKey] = this.pageNb;\r\n }\r\n }\r\n\r\n if (this.persistPageLength) {\r\n if (isNull(this.pageLength)) {\r\n state[this.pageLengthKey] = undefined;\r\n } else {\r\n state[this.pageLengthKey] = this.pageLength;\r\n }\r\n }\r\n\r\n if (this.persistSort) {\r\n if (!isNull(this.sort)) {\r\n // Remove previuosly sorted column\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1 && state[key]) {\r\n state[key].sort = undefined;\r\n }\r\n });\r\n\r\n let key = `${this.prfxCol}${this.sort.column}`;\r\n state[key] = state[key] || {};\r\n state[key].sort = { descending: this.sort.descending };\r\n }\r\n }\r\n\r\n if (this.persistColsVisibility) {\r\n if (!isNull(this.hiddenCols)) {\r\n // Clear previuosly hidden columns\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1 && state[key]) {\r\n state[key].hidden = undefined;\r\n }\r\n });\r\n\r\n this.hiddenCols.forEach((colIdx) => {\r\n let key = `${this.prfxCol}${colIdx}`;\r\n state[key] = state[key] || {};\r\n state[key].hidden = true;\r\n });\r\n }\r\n }\r\n\r\n if (this.persistFiltersVisibility) {\r\n if (isNull(this.filtersVisibility)) {\r\n state[this.filtersVisKey] = undefined;\r\n } else {\r\n state[this.filtersVisKey] = this.filtersVisibility;\r\n }\r\n }\r\n\r\n this.emitter.emit('state-changed', tf, state);\r\n }\r\n\r\n /**\r\n * Refresh page number field on page number changes\r\n *\r\n * @param {Number} pageNb Current page number\r\n */\r\n updatePage(pageNb) {\r\n this.pageNb = pageNb;\r\n this.update();\r\n }\r\n\r\n /**\r\n * Refresh page length field on page length changes\r\n *\r\n * @param {Number} pageLength Current page length value\r\n */\r\n updatePageLength(pageLength) {\r\n this.pageLength = pageLength;\r\n this.update();\r\n }\r\n\r\n /**\r\n * Refresh column sorting information on sort changes\r\n *\r\n * @param index {Number} Column index\r\n * @param {Boolean} descending Descending manner\r\n */\r\n updateSort(index, descending) {\r\n this.sort = {\r\n column: index,\r\n descending: descending\r\n };\r\n this.update();\r\n }\r\n\r\n /**\r\n * Refresh hidden columns information on columns visibility changes\r\n *\r\n * @param {Array} hiddenCols Columns indexes\r\n */\r\n updateColsVisibility(hiddenCols) {\r\n this.hiddenCols = hiddenCols;\r\n this.update();\r\n }\r\n\r\n /**\r\n * Refresh filters visibility on filters visibility change\r\n *\r\n * @param {Boolean} visible Visibility flad\r\n */\r\n updateFiltersVisibility(visible) {\r\n this.filtersVisibility = visible;\r\n this.update();\r\n }\r\n\r\n /**\r\n * Override state field\r\n *\r\n * @param state State object\r\n */\r\n override(state) {\r\n this.state = state;\r\n this.emitter.emit('state-changed', this.tf, state);\r\n }\r\n\r\n /**\r\n * Sync stored features state\r\n */\r\n sync() {\r\n let state = this.state;\r\n let tf = this.tf;\r\n\r\n this._syncFilters();\r\n\r\n if (this.persistPageNumber) {\r\n let pageNumber = state[this.pageNbKey];\r\n this.emitter.emit('change-page', tf, pageNumber);\r\n }\r\n\r\n if (this.persistPageLength) {\r\n let pageLength = state[this.pageLengthKey];\r\n this.emitter.emit('change-page-results', tf, pageLength);\r\n }\r\n\r\n this._syncSort();\r\n this._syncColsVisibility();\r\n this._syncFiltersVisibility();\r\n }\r\n\r\n /**\r\n * Override current state with passed one and sync features\r\n *\r\n * @param {Object} state State object\r\n */\r\n overrideAndSync(state) {\r\n // To prevent state to react to features changes, state is temporarily\r\n // disabled\r\n this.disable();\r\n // State is overriden with passed state object\r\n this.override(state);\r\n // New hash state is applied to features\r\n this.sync();\r\n // State is re-enabled\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Sync filters with stored values and filter table\r\n *\r\n * @private\r\n */\r\n _syncFilters() {\r\n if (!this.persistFilters) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n\r\n // clear all filters\r\n // TODO: use tf.clearFilters() once it allows to not filter the table\r\n tf.eachCol((colIdx) => tf.setFilterValue(colIdx, ''));\r\n\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1) {\r\n let colIdx = parseInt(key.replace(this.prfxCol, ''), 10);\r\n let val = state[key].flt;\r\n tf.setFilterValue(colIdx, val);\r\n }\r\n });\r\n\r\n tf.filter();\r\n }\r\n\r\n /**\r\n * Sync sorted column with stored sorting information and sort table\r\n *\r\n * @private\r\n */\r\n _syncSort() {\r\n if (!this.persistSort) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1) {\r\n let colIdx = parseInt(key.replace(this.prfxCol, ''), 10);\r\n if (!isUndef(state[key].sort)) {\r\n let sort = state[key].sort;\r\n this.emitter.emit('sort', tf, colIdx, sort.descending);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Sync hidden columns with stored information\r\n *\r\n * @private\r\n */\r\n _syncColsVisibility() {\r\n if (!this.persistColsVisibility) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n let hiddenCols = [];\r\n\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1) {\r\n let colIdx = parseInt(key.replace(this.prfxCol, ''), 10);\r\n if (!isUndef(state[key].hidden)) {\r\n hiddenCols.push(colIdx);\r\n }\r\n }\r\n });\r\n\r\n hiddenCols.forEach((colIdx) => {\r\n this.emitter.emit('hide-column', tf, colIdx);\r\n });\r\n }\r\n\r\n /**\r\n * Sync filters visibility with stored information\r\n *\r\n * @private\r\n */\r\n _syncFiltersVisibility() {\r\n if (!this.persistFiltersVisibility) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n let filtersVisibility = state[this.filtersVisKey];\r\n\r\n this.filtersVisibility = filtersVisibility;\r\n this.emitter.emit('show-filters', tf, filtersVisibility);\r\n }\r\n\r\n /**\r\n * Destroy State instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n this.state = {};\r\n\r\n this.emitter.off(['after-filtering'], () => this.update());\r\n this.emitter.off(['after-page-change', 'after-clearing-filters'],\r\n (tf, pageNb) => this.updatePage(pageNb));\r\n this.emitter.off(['after-page-length-change'],\r\n (tf, index) => this.updatePageLength(index));\r\n this.emitter.off(['column-sorted'],\r\n (tf, index, descending) => this.updateSort(index, descending));\r\n this.emitter.off(['sort-initialized'], () => this._syncSort());\r\n this.emitter.off(['columns-visibility-initialized'],\r\n () => this._syncColsVisibility());\r\n this.emitter.off(['column-shown', 'column-hidden'], (tf, feature,\r\n colIndex, hiddenCols) => this.updateColsVisibility(hiddenCols));\r\n this.emitter.off(['filters-visibility-initialized'],\r\n () => this._syncFiltersVisibility());\r\n this.emitter.off(['filters-toggled'],\r\n (tf, extension, visible) => this.updateFiltersVisibility(visible));\r\n\r\n if (this.enableHash) {\r\n this.hash.destroy();\r\n this.hash = null;\r\n }\r\n\r\n if (this.enableStorage) {\r\n this.storage.destroy();\r\n this.storage = null;\r\n }\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\nimport {createElm, createText, elm, removeElm} from '../dom';\nimport {addEvt, targetEvt, removeEvt} from '../event';\nimport {NONE} from '../const';\nimport {root} from '../root';\nimport {isEmpty, isNull} from '../types';\nimport {defaultsStr} from '../settings';\nimport {RIGHT} from './toolbar';\n\nconst WIKI_URL = 'https://github.com/koalyptus/TableFilter/wiki/' +\n '4.-Filter-operators';\nconst WEBSITE_URL = 'https://www.tablefilter.com/';\n\n/**\n * Help UI component\n */\nexport class Help extends Feature {\n\n /**\n * Creates an instance of Help\n * @param {TableFilter} tf TableFilter instance\n */\n constructor(tf) {\n super(tf, 'help');\n\n let f = this.config.help_instructions || {};\n\n /**\n * ID of main custom container element\n * @type {String}\n */\n this.tgtId = defaultsStr(f.target_id, null);\n\n /**\n * ID of custom container element for instructions\n * @type {String}\n */\n this.contTgtId = defaultsStr(f.container_target_id, null);\n\n /**\n * Instructions text (accepts HTML)\n * @type {String}\n */\n this.instrText = !isEmpty(f.text) ? f.text :\n 'Use the filters above each column to filter and limit table ' +\n 'data. Advanced searches can be performed by using the following ' +\n 'operators:
<, <=, >, ' +\n '>=, =, *, !, {, }, ' +\n '||,&&, [empty], [nonempty], ' +\n 'rgx:
' +\n 'Learn more
';\n\n /**\n * Instructions HTML\n * @type {String}\n */\n this.instrHtml = defaultsStr(f.html, null);\n\n /**\n * Help button text ('?')\n * @type {String}\n */\n this.btnText = defaultsStr(f.btn_text, '?');\n\n /**\n * Custom help button HTML\n * @type {String}\n */\n this.btnHtml = defaultsStr(f.btn_html, null);\n\n /**\n * Css class for help button\n * @type {String}\n */\n this.btnCssClass = defaultsStr(f.btn_css_class, 'helpBtn');\n\n /**\n * Css class for help container element\n * @type {String}\n */\n this.contCssClass = defaultsStr(f.container_css_class, 'helpCont');\n\n /**\n * Button DOM element\n * @type {DOMElement}\n */\n this.btn = null;\n\n /**\n * Help container DOM element\n * @type {DOMElement}\n */\n this.cont = null;\n\n /**\n * Bound mouseup wrapper\n * @private\n */\n this.boundMouseup = null;\n\n /**\n * Default HTML appended to instructions text\n * @type {String}\n */\n this.defaultHtml = '

TableFilter ' +\n 'v' + tf.version + '

' + '' + WEBSITE_URL + '' +\n '
©2015-' + tf.year + ' Max Guglielmi' +\n '
' +\n 'Close
';\n\n /**\n * Default position in toolbar ('left'|'center'|'right')\n * @type {String}\n */\n this.toolbarPosition = defaultsStr(f.toolbar_position, RIGHT);\n\n this.emitter.on(['init-help'], () => this.init());\n }\n\n /**\n * Mouse-up event handler handling popup auto-close behaviour\n * @private\n */\n onMouseup(evt) {\n let targetElm = targetEvt(evt);\n\n while (targetElm && targetElm !== this.cont && targetElm !== this.btn) {\n targetElm = targetElm.parentNode;\n }\n\n if (targetElm !== this.cont && targetElm !== this.btn) {\n this.toggle();\n }\n\n return;\n }\n\n /**\n * Initialise Help instance\n */\n init() {\n if (this.initialized) {\n return;\n }\n\n this.emitter.emit('initializing-feature', this, !isNull(this.tgtId));\n\n let tf = this.tf;\n\n let btn = createElm('span');\n let cont = createElm('div');\n\n this.boundMouseup = this.onMouseup.bind(this);\n\n //help button is added to defined element\n let targetEl = !this.tgtId ?\n tf.feature('toolbar').container(this.toolbarPosition) :\n elm(this.tgtId);\n targetEl.appendChild(btn);\n\n let divContainer = !this.contTgtId ? btn : elm(this.contTgtId);\n\n if (!this.btnHtml) {\n divContainer.appendChild(cont);\n let helplink = createElm('a', ['href', 'javascript:void(0);']);\n helplink.className = this.btnCssClass;\n helplink.appendChild(createText(this.btnText));\n btn.appendChild(helplink);\n addEvt(helplink, 'click', () => this.toggle());\n } else {\n btn.innerHTML = this.btnHtml;\n let helpEl = btn.firstChild;\n addEvt(helpEl, 'click', () => this.toggle());\n divContainer.appendChild(cont);\n }\n\n if (!this.instrHtml) {\n cont.innerHTML = this.instrText;\n cont.className = this.contCssClass;\n } else {\n if (this.contTgtId) {\n divContainer.appendChild(cont);\n }\n cont.innerHTML = this.instrHtml;\n if (!this.contTgtId) {\n cont.className = this.contCssClass;\n }\n }\n cont.innerHTML += this.defaultHtml;\n addEvt(cont, 'click', () => this.toggle());\n\n this.cont = cont;\n this.btn = btn;\n /** @inherited */\n this.initialized = true;\n\n this.emitter.emit('feature-initialized', this);\n }\n\n /**\n * Toggle help pop-up\n */\n toggle() {\n // check only if explicitily disabled as in this case undefined\n // signifies the help feature is enabled by default\n if (!this.isEnabled()) {\n return;\n }\n\n // ensure mouseup event handler is removed\n removeEvt(root, 'mouseup', this.boundMouseup);\n\n let divDisplay = this.cont.style.display;\n if (divDisplay === '' || divDisplay === NONE) {\n this.cont.style.display = 'inline';\n addEvt(root, 'mouseup', this.boundMouseup);\n } else {\n this.cont.style.display = NONE;\n }\n }\n\n /**\n * Remove help UI\n */\n destroy() {\n if (!this.initialized) {\n return;\n }\n removeElm(this.btn);\n this.btn = null;\n\n removeElm(this.cont);\n this.cont = null;\n\n this.boundMouseup = null;\n this.initialized = false;\n }\n\n}\n","import {Date as SugarDate} from 'sugar-date';\r\nimport 'sugar-date/locales';\r\nimport {Feature} from '../feature';\r\nimport {isObj, isArray} from '../types';\r\nimport {DATE} from '../const';\r\nimport {root} from '../root';\r\n\r\n/**\r\n * Wrapper for Sugar Date module providing datetime helpers and locales\r\n * @export\r\n * @class DateType\r\n */\r\nexport class DateType extends Feature {\r\n\r\n /**\r\n * Creates an instance of DateType\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'dateType');\r\n\r\n /**\r\n * Global locale\r\n * @type {String}\r\n */\r\n this.locale = tf.locale;\r\n\r\n /**\r\n * Sugar Date instance\r\n * @type {Object}\r\n */\r\n this.datetime = SugarDate;\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initialize DateType instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n // Set global locale\r\n this.datetime.setLocale(this.locale);\r\n\r\n // Add formats from column types configuration if any\r\n this.addConfigFormats(this.tf.colTypes);\r\n\r\n this.emitter.on(\r\n ['add-date-type-formats'],\r\n (tf, types) => this.addConfigFormats(types)\r\n );\r\n\r\n // Broadcast date-type initialization\r\n this.emitter.emit('date-type-initialized', this.tf, this);\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Parse a string representation of a date for a specified locale and return\r\n * a date object\r\n * @param {String} dateStr String representation of a date\r\n * @param {String} localeCode Locale code (ie 'en-us')\r\n * @returns {Date}\r\n */\r\n parse(dateStr, localeCode) {\r\n return this.datetime.create(dateStr, localeCode);\r\n }\r\n\r\n /**\r\n * Check string representation of a date for a specified locale is valid\r\n * @param {any} dateStr String representation of a date\r\n * @param {any} localeCode Locale code (ie 'en-us')\r\n * @returns {Boolean}\r\n */\r\n isValid(dateStr, localeCode) {\r\n return this.datetime.isValid(this.parse(dateStr, localeCode));\r\n }\r\n\r\n /**\r\n * Return the type object of a specified column as per configuration or\r\n * passed collection\r\n * @param {Number} colIndex Column index\r\n * @param {Array} types Collection of column types, optional\r\n * @returns {Object}\r\n */\r\n getOptions(colIndex, types) {\r\n types = types || this.tf.colTypes;\r\n let colType = types[colIndex];\r\n return isObj(colType) ? colType : {};\r\n }\r\n\r\n /**\r\n * Return the locale code for supplied column index as per configuration\r\n * or global setting\r\n * @param {Number} colIndex Column index\r\n * @returns {String} Locale code (ie: 'en-us')\r\n */\r\n getLocale(colIndex) {\r\n return this.getOptions(colIndex).locale || this.locale;\r\n }\r\n\r\n /**\r\n * Add date time format(s) to a locale as specified by the passed\r\n * collection of column types, ie:\r\n * [\r\n * 'string',\r\n * 'number',\r\n * { type: 'date', locale: 'en', format: ['{dd}/{MM}/{yyyy}']}\r\n * ]\r\n *\r\n * @param {Array} [types=[]] Collection of column types\r\n */\r\n addConfigFormats(types=[]) {\r\n types.forEach((type, idx) => {\r\n let options = this.getOptions(idx, types);\r\n if (options.type === DATE && options.hasOwnProperty('format')) {\r\n let locale = this.datetime.getLocale(\r\n options.locale || this.locale\r\n );\r\n let formats = isArray(options.format) ?\r\n options.format : [options.format];\r\n\r\n // Sugar date module throws exceptions with locale.addFormat\r\n try {\r\n formats.forEach((format) => {\r\n locale.addFormat(format);\r\n });\r\n } catch (ex) {\r\n root.console.error(ex);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Remove DateType instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n // TODO: remove added formats\r\n\r\n this.emitter.off(\r\n ['add-date-type-formats'],\r\n (tf, types) => this.addConfigFormats(types)\r\n );\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {BaseDropdown} from './baseDropdown';\r\nimport {createElm, createOpt, elm} from '../dom';\r\nimport {has} from '../array';\r\nimport {matchCase} from '../string';\r\nimport {addEvt, targetEvt} from '../event';\r\nimport {SELECT, MULTIPLE, NONE} from '../const';\r\nimport {defaultsStr, defaultsBool} from '../settings';\r\n\r\n/**\r\n * Dropdown filter UI component\r\n * @export\r\n * @class Dropdown\r\n * @extends {BaseDropdown}\r\n */\r\nexport class Dropdown extends BaseDropdown {\r\n\r\n /**\r\n * Creates an instance of Dropdown\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'dropdown');\r\n\r\n // Configuration object\r\n let f = this.config;\r\n\r\n /**\r\n * Enable the reset filter option as first item\r\n * @type {Boolean}\r\n */\r\n this.enableSlcResetFilter =\r\n defaultsBool(f.enable_slc_reset_filter, true);\r\n\r\n /**\r\n * Non empty option text\r\n * @type {String}\r\n */\r\n this.nonEmptyText = defaultsStr(f.non_empty_text, '(Non empty)');\r\n\r\n /**\r\n * Tooltip text appearing on multiple select\r\n * @type {String}\r\n */\r\n this.multipleSlcTooltip = defaultsStr(f.multiple_slc_tooltip,\r\n 'Use Ctrl/Cmd key for multiple selections');\r\n }\r\n\r\n\r\n /**\r\n * Drop-down filter focus event handler\r\n * @param {Event} e DOM Event\r\n * @private\r\n */\r\n onSlcFocus(e) {\r\n let elm = targetEvt(e);\r\n let tf = this.tf;\r\n // select is populated when element has focus\r\n if (tf.loadFltOnDemand && elm.getAttribute('filled') === '0') {\r\n let ct = elm.getAttribute('ct');\r\n this.build(ct);\r\n }\r\n this.emitter.emit('filter-focus', tf, elm);\r\n }\r\n\r\n /**\r\n * Drop-down filter change event handler\r\n * @private\r\n */\r\n onSlcChange() {\r\n if (this.tf.onSlcChange) {\r\n this.tf.filter();\r\n }\r\n }\r\n\r\n /**\r\n * Refresh all drop-down filters\r\n */\r\n refreshAll() {\r\n let selectFlts = this.tf.getFiltersByType(SELECT, true);\r\n let multipleFlts = this.tf.getFiltersByType(MULTIPLE, true);\r\n let colIdxs = selectFlts.concat(multipleFlts);\r\n this.refreshFilters(colIdxs);\r\n }\r\n\r\n /**\r\n * Initialize drop-down filter\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} isExternal External filter flag\r\n * @param {DOMElement} container Dom element containing the filter\r\n */\r\n init(colIndex, isExternal, container) {\r\n let tf = this.tf;\r\n let col = tf.getFilterType(colIndex);\r\n let externalFltTgtId = isExternal ?\r\n tf.externalFltIds[colIndex] : null;\r\n\r\n let slc = createElm(SELECT,\r\n ['id', tf.buildFilterId(colIndex)],\r\n ['ct', colIndex], ['filled', '0']\r\n );\r\n\r\n if (col === MULTIPLE) {\r\n slc.multiple = MULTIPLE;\r\n slc.title = this.multipleSlcTooltip;\r\n }\r\n slc.className = col.toLowerCase() === SELECT ?\r\n tf.fltCssClass : tf.fltMultiCssClass;\r\n\r\n //filter is appended in container element\r\n if (externalFltTgtId) {\r\n elm(externalFltTgtId).appendChild(slc);\r\n } else {\r\n container.appendChild(slc);\r\n }\r\n\r\n tf.fltIds.push(slc.id);\r\n\r\n if (!tf.loadFltOnDemand) {\r\n this.build(colIndex);\r\n } else {\r\n //1st option is created here since build isn't invoked\r\n let opt0 = createOpt(tf.getClearFilterText(colIndex), '');\r\n slc.appendChild(opt0);\r\n }\r\n\r\n addEvt(slc, 'change', () => this.onSlcChange());\r\n addEvt(slc, 'focus', (e) => this.onSlcFocus(e));\r\n\r\n this.emitter.on(\r\n ['build-select-filter'],\r\n (tf, colIndex, isLinked, isExternal) =>\r\n this.build(colIndex, isLinked, isExternal)\r\n );\r\n this.emitter.on(\r\n ['select-options'],\r\n (tf, colIndex, values) => this.selectOptions(colIndex, values)\r\n );\r\n this.emitter.on(['rows-changed'], () => this.refreshAll());\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Build drop-down filter UI\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} isLinked Enable linked filters behaviour\r\n */\r\n build(colIndex, isLinked = false) {\r\n let tf = this.tf;\r\n colIndex = Number(colIndex);\r\n\r\n this.emitter.emit('before-populating-filter', tf, colIndex);\r\n\r\n /** @inherited */\r\n this.opts = [];\r\n /** @inherited */\r\n this.optsTxt = [];\r\n\r\n let slc = tf.getFilterElement(colIndex);\r\n\r\n //custom select test\r\n /** @inherited */\r\n this.isCustom = tf.isCustomOptions(colIndex);\r\n\r\n //Retrieves custom values\r\n if (this.isCustom) {\r\n let customValues = tf.getCustomOptions(colIndex);\r\n this.opts = customValues[0];\r\n this.optsTxt = customValues[1];\r\n }\r\n\r\n //custom selects text\r\n let activeIdx;\r\n let activeFilterId = tf.getActiveFilterId();\r\n if (isLinked && activeFilterId) {\r\n activeIdx = tf.getColumnIndexFromFilterId(activeFilterId);\r\n }\r\n\r\n let excludedOpts = null,\r\n filteredDataCol = null;\r\n if (isLinked && tf.disableExcludedOptions) {\r\n excludedOpts = [];\r\n filteredDataCol = [];\r\n }\r\n\r\n let eachRow = tf.eachRow();\r\n eachRow(\r\n (row) => {\r\n let cellValue = tf.getCellValue(row.cells[colIndex]);\r\n //Vary Peter's patch\r\n let cellString = matchCase(cellValue, tf.caseSensitive);\r\n\r\n // checks if celldata is already in array\r\n if (!has(this.opts, cellString, tf.caseSensitive)) {\r\n this.opts.push(cellValue);\r\n }\r\n\r\n if (isLinked && tf.disableExcludedOptions) {\r\n let filteredCol = filteredDataCol[colIndex];\r\n if (!filteredCol) {\r\n filteredCol = tf.getVisibleColumnValues(colIndex);\r\n }\r\n if (!has(filteredCol, cellString, tf.caseSensitive) &&\r\n !has(excludedOpts, cellString, tf.caseSensitive)) {\r\n excludedOpts.push(cellValue);\r\n }\r\n }\r\n },\r\n // continue conditions function\r\n (row, k) => {\r\n // excluded rows don't need to appear on selects as always valid\r\n if (tf.excludeRows.indexOf(k) !== -1) {\r\n return true;\r\n }\r\n\r\n // checks if row has expected number of cells\r\n if (row.cells.length !== tf.nbCells || this.isCustom) {\r\n return true;\r\n }\r\n\r\n if (isLinked && !this.isValidLinkedValue(k, activeIdx)) {\r\n return true;\r\n }\r\n }\r\n );\r\n\r\n //sort options\r\n this.opts = this.sortOptions(colIndex, this.opts);\r\n if (excludedOpts) {\r\n excludedOpts = this.sortOptions(colIndex, excludedOpts);\r\n }\r\n\r\n //populates drop-down\r\n this.addOptions(colIndex, slc, isLinked, excludedOpts);\r\n\r\n this.emitter.emit('after-populating-filter', tf, colIndex, slc);\r\n }\r\n\r\n /**\r\n * Add drop-down options\r\n * @param {Number} colIndex Column index\r\n * @param {Object} slc Select Dom element\r\n * @param {Boolean} isLinked Enable linked refresh behaviour\r\n * @param {Array} excludedOpts Array of excluded options\r\n */\r\n addOptions(colIndex, slc, isLinked, excludedOpts) {\r\n let tf = this.tf,\r\n slcValue = slc.value;\r\n\r\n slc.innerHTML = '';\r\n slc = this.addFirstOption(slc);\r\n\r\n for (let y = 0; y < this.opts.length; y++) {\r\n if (this.opts[y] === '') {\r\n continue;\r\n }\r\n let val = this.opts[y]; //option value\r\n let lbl = this.isCustom ? this.optsTxt[y] : val; //option text\r\n let isDisabled = false;\r\n if (isLinked && tf.disableExcludedOptions &&\r\n has(excludedOpts, matchCase(val, tf.caseSensitive),\r\n tf.caseSensitive)) {\r\n isDisabled = true;\r\n }\r\n\r\n let opt;\r\n //fill select on demand\r\n if (tf.loadFltOnDemand && slcValue === this.opts[y] &&\r\n tf.getFilterType(colIndex) === SELECT) {\r\n opt = createOpt(lbl, val, true);\r\n } else {\r\n opt = createOpt(lbl, val, false);\r\n }\r\n if (isDisabled) {\r\n opt.disabled = true;\r\n }\r\n slc.appendChild(opt);\r\n }// for y\r\n\r\n slc.setAttribute('filled', '1');\r\n }\r\n\r\n /**\r\n * Add drop-down header option\r\n * @param {Object} slc Select DOM element\r\n */\r\n addFirstOption(slc) {\r\n let tf = this.tf;\r\n let colIdx = tf.getColumnIndexFromFilterId(slc.id);\r\n let opt0 = createOpt((!this.enableSlcResetFilter ?\r\n '' : tf.getClearFilterText(colIdx)), '');\r\n if (!this.enableSlcResetFilter) {\r\n opt0.style.display = NONE;\r\n }\r\n slc.appendChild(opt0);\r\n if (tf.enableEmptyOption) {\r\n let opt1 = createOpt(tf.emptyText, tf.emOperator);\r\n slc.appendChild(opt1);\r\n }\r\n if (tf.enableNonEmptyOption) {\r\n let opt2 = createOpt(tf.nonEmptyText, tf.nmOperator);\r\n slc.appendChild(opt2);\r\n }\r\n return slc;\r\n }\r\n\r\n /**\r\n * Select filter options programmatically\r\n * @param {Number} colIndex Column index\r\n * @param {Array} values Array of option values to select\r\n */\r\n selectOptions(colIndex, values = []) {\r\n let tf = this.tf;\r\n if (values.length === 0) {\r\n return;\r\n }\r\n let slc = tf.getFilterElement(colIndex);\r\n [].forEach.call(slc.options, (option) => {\r\n // Empty value means clear all selections and first option is the\r\n // clear all option\r\n if (values[0] === '' || option.value === '') {\r\n option.selected = false;\r\n }\r\n\r\n if (option.value !== '' && has(values, option.value, true)) {\r\n option.selected = true;\r\n }//if\r\n });\r\n }\r\n\r\n /**\r\n * Get filter values for a given column index\r\n * @param {Number} colIndex Column index\r\n * @returns {Array} values Array of selected values\r\n */\r\n getValues(colIndex) {\r\n let tf = this.tf;\r\n let slc = tf.getFilterElement(colIndex);\r\n let values = [];\r\n\r\n // IE >= 9 does not support the selectedOptions property :(\r\n if (slc.selectedOptions) {\r\n [].forEach.call(slc.selectedOptions,\r\n option => values.push(option.value));\r\n } else {\r\n [].forEach.call(slc.options, (option) => {\r\n if (option.selected) {\r\n values.push(option.value);\r\n }\r\n });\r\n }\r\n\r\n return values;\r\n }\r\n\r\n /**\r\n * Destroy Dropdown instance\r\n */\r\n destroy() {\r\n this.emitter.off(\r\n ['build-select-filter'],\r\n (colIndex, isLinked, isExternal) =>\r\n this.build(colIndex, isLinked, isExternal)\r\n );\r\n this.emitter.off(\r\n ['select-options'],\r\n (tf, colIndex, values) => this.selectOptions(colIndex, values)\r\n );\r\n this.emitter.off(['rows-changed'], () => this.refreshAll());\r\n this.initialized = false;\r\n }\r\n}\r\n","/**\n * Event emitter class\n */\nexport class Emitter {\n /**\n * Creates an instance of Emitter.\n */\n constructor() {\n /**\n * Events object\n * @type {Object}\n */\n this.events = {};\n }\n\n /**\n * Subscribe to an event\n * @param {Array} evts Collection of event names\n * @param {Function} fn Function invoked when event is emitted\n */\n on(evts, fn) {\n evts.forEach((evt) => {\n this.events[evt] = this.events[evt] || [];\n this.events[evt].push(fn);\n });\n }\n\n /**\n * Unsubscribe to an event\n * @param {Array} evts Collection of event names\n * @param {Function} fn Function invoked when event is emitted\n */\n off(evts, fn) {\n evts.forEach((evt) => {\n if (evt in this.events) {\n this.events[evt].splice(this.events[evt].indexOf(fn), 1);\n }\n });\n }\n\n /**\n * Emit an event\n * @param {String} evt Event name followed by any other argument passed to\n * the invoked function\n */\n emit(evt /*, args...*/) {\n if (evt in this.events) {\n for (let i = 0; i < this.events[evt].length; i++) {\n this.events[evt][i].apply(this, [].slice.call(arguments, 1));\n }\n }\n }\n}\n","import {addEvt, cancelEvt, stopEvt, targetEvt, isKeyPressed} from './event';\nimport {\n addClass, createElm, createOpt, elm, getText, getFirstTextNode,\n removeClass, tag\n} from './dom';\nimport {contains, matchCase, rgxEsc, trim} from './string';\nimport {isEmpty as isEmptyString} from './string';\nimport {\n isArray, isEmpty, isFn, isNumber, isObj, isString, isUndef, EMPTY_FN,\n isBoolean\n} from './types';\nimport {parse as parseNb} from './number';\nimport {\n defaultsBool, defaultsStr, defaultsFn,\n defaultsNb, defaultsArr\n} from './settings';\n\nimport {root} from './root';\nimport {Emitter} from './emitter';\nimport {Dropdown} from './modules/dropdown';\nimport {CheckList} from './modules/checkList';\n\nimport {\n INPUT, SELECT, MULTIPLE, CHECKLIST, NONE,\n ENTER_KEY, TAB_KEY, ESC_KEY, UP_ARROW_KEY, DOWN_ARROW_KEY,\n CELL_TAG, AUTO_FILTER_DELAY, NUMBER, DATE, FORMATTED_NUMBER,\n FEATURES\n} from './const';\n\nlet doc = root.document;\n\n/**\n * Makes HTML tables filterable and a bit more :)\n *\n * @export\n * @class TableFilter\n */\nexport class TableFilter {\n\n /**\n * Creates an instance of TableFilter\n * requires `table` or `id` arguments, `row` and `configuration` optional\n * @param {HTMLTableElement} table Table DOM element\n * @param {String} id Table id\n * @param {Number} row index indicating the 1st row\n * @param {Object} configuration object\n */\n constructor(...args) {\n /**\n * ID of current instance\n * @type {String}\n * @private\n */\n this.id = null;\n\n /**\n * Current version\n * @type {String}\n */\n this.version = '0.6.42';\n\n /**\n * Current year\n * @type {Number}\n * @private\n */\n this.year = new Date().getFullYear();\n\n /**\n * HTML Table DOM element\n * @type {DOMElement}\n * @private\n */\n this.tbl = null;\n\n /**\n * Calculated row's index from which starts filtering once filters\n * are generated\n * @type {Number}\n */\n this.refRow = null;\n\n /**\n * Index of the headers row\n * @type {Number}\n * @private\n */\n this.headersRow = null;\n\n /**\n * Configuration object\n * @type {Object}\n * @private\n */\n this.cfg = {};\n\n /**\n * Number of rows that can be filtered\n * @type {Number}\n * @private\n */\n this.nbFilterableRows = 0;\n\n /**\n * Number of cells in the reference row\n * @type {Number}\n * @private\n */\n this.nbCells = null;\n\n /**\n * Has a configuration object\n * @type {Object}\n * @private\n */\n this.hasConfig = false;\n\n /** @private */\n this.initialized = false;\n\n let startRow;\n\n // TODO: use for-of\n args.forEach((arg) => {\n if (typeof arg === 'object' && arg.nodeName === 'TABLE') {\n this.tbl = arg;\n this.id = arg.id || `tf_${new Date().getTime()}_`;\n this.tbl.id = this.id;\n } else if (isString(arg)) {\n this.id = arg;\n this.tbl = elm(arg);\n } else if (isNumber(arg)) {\n startRow = arg;\n } else if (isObj(arg)) {\n this.cfg = arg;\n this.hasConfig = true;\n }\n });\n\n if (!this.tbl || this.tbl.nodeName !== 'TABLE') {\n throw new Error(`Could not instantiate TableFilter: HTML table\n DOM element not found.`);\n }\n\n if (this.getRowsNb(true) === 0) {\n throw new Error(`Could not instantiate TableFilter: HTML table\n requires at least 1 row.`);\n }\n\n // configuration object\n let f = this.cfg;\n\n /**\n * Event emitter instance\n * @type {Emitter}\n */\n this.emitter = new Emitter();\n\n // start row\n this.refRow = isUndef(startRow) ? 2 : (startRow + 1);\n\n /**\n * Collection of filter type by column\n * @type {Array}\n * @private\n */\n this.filterTypes = [].map.call(\n (this.dom().rows[this.refRow] || this.dom().rows[0]).cells,\n (cell, idx) => {\n let colType = this.cfg[`col_${idx}`];\n return !colType ? INPUT : colType.toLowerCase();\n });\n\n /**\n * Base path for static assets\n * @type {String}\n */\n this.basePath = defaultsStr(f.base_path, 'tablefilter/');\n\n /*** filters' grid properties ***/\n\n /**\n * Enable/disable filters\n * @type {Boolean}\n */\n this.fltGrid = defaultsBool(f.grid, true);\n\n /**\n * Enable/disable grid layout (fixed headers)\n * @type {Object|Boolean}\n */\n this.gridLayout = isObj(f.grid_layout) || Boolean(f.grid_layout);\n\n /**\n * Filters row index\n * @type {Number}\n */\n this.filtersRowIndex = defaultsNb(f.filters_row_index, 0);\n\n /**\n * Headers row index\n * @type {Number}\n */\n this.headersRow = defaultsNb(f.headers_row_index,\n (this.filtersRowIndex === 0 ? 1 : 0));\n\n /**\n * Define the type of cell containing a filter (td/th)\n * @type {String}\n */\n this.fltCellTag = defaultsStr(f.filters_cell_tag, CELL_TAG);\n\n /**\n * List of filters IDs\n * @type {Array}\n * @private\n */\n this.fltIds = [];\n\n /**\n * List of valid rows indexes (rows visible upon filtering)\n * @type {Array}\n * @private\n */\n this.validRowsIndex = [];\n\n /*** filters' grid appearance ***/\n /**\n * Path for stylesheets\n * @type {String}\n */\n this.stylePath = this.getStylePath();\n\n /**\n * Main stylesheet path\n * @type {String}\n */\n this.stylesheet = this.getStylesheetPath();\n\n /**\n * Main stylesheet ID\n * @type {String}\n * @private\n */\n this.stylesheetId = this.id + '_style';\n\n /**\n * Css class for the filters row\n * @type {String}\n */\n this.fltsRowCssClass = defaultsStr(f.flts_row_css_class, 'fltrow');\n\n /**\n * Enable/disable icons (paging, reset button)\n * @type {Boolean}\n */\n this.enableIcons = defaultsBool(f.enable_icons, true);\n\n /**\n * Enable/disable alternating rows\n * @type {Boolean}\n */\n this.alternateRows = Boolean(f.alternate_rows);\n\n /**\n * Columns widths array\n * @type {Array}\n */\n this.colWidths = defaultsArr(f.col_widths, []);\n\n /**\n * Default column width when column widths are defined\n */\n this.defaultColWidth = defaultsNb(f.default_col_width, 100);\n\n /**\n * Css class for a filter element\n * @type {String}\n */\n this.fltCssClass = defaultsStr(f.flt_css_class, 'flt');\n\n /**\n * Css class for multiple select filters\n * @type {String}\n */\n this.fltMultiCssClass = defaultsStr(f.flt_multi_css_class, 'flt_multi');\n\n /**\n * Css class for small filter (when submit button is active)\n * @type {String}\n */\n this.fltSmallCssClass = defaultsStr(f.flt_small_css_class, 'flt_s');\n\n /**\n * Css class for single filter type\n * @type {String}\n */\n this.singleFltCssClass = defaultsStr((f.single_filter || {}).css_class,\n 'single_flt');\n\n /*** filters' grid behaviours ***/\n\n /**\n * Enable/disable enter key for input type filters\n * @type {Boolean}\n */\n this.enterKey = defaultsBool(f.enter_key, true);\n\n /**\n * Callback fired before filtering process starts\n * @type {Function}\n */\n this.onBeforeFilter = defaultsFn(f.on_before_filter, EMPTY_FN);\n\n /**\n * Callback fired after filtering process is completed\n * @type {Function}\n */\n this.onAfterFilter = defaultsFn(f.on_after_filter, EMPTY_FN);\n\n /**\n * Enable/disable case sensitivity filtering\n * @type {Boolean}\n */\n this.caseSensitive = Boolean(f.case_sensitive);\n\n /**\n * Indicate whether exact match filtering is enabled on a per column\n * basis\n * @type {Boolean}\n * @private\n */\n this.hasExactMatchByCol = isArray(f.columns_exact_match);\n\n /**\n * Exact match filtering per column array\n * @type {Array}\n */\n this.exactMatchByCol = this.hasExactMatchByCol ?\n f.columns_exact_match : [];\n\n /**\n * Globally enable/disable exact match filtering\n * @type {Boolean}\n */\n this.exactMatch = Boolean(f.exact_match);\n\n /**\n * Ignore diacritics globally or on a column basis\n * @type {Boolean|Array}\n */\n this.ignoreDiacritics = f.ignore_diacritics;\n\n /**\n * Enable/disable linked filters filtering mode\n * @type {Boolean}\n */\n this.linkedFilters = Boolean(f.linked_filters);\n\n /**\n * Enable/disable readonly state for excluded options when\n * linked filters filtering mode is on\n * @type {Boolean}\n */\n this.disableExcludedOptions = Boolean(f.disable_excluded_options);\n\n /**\n * Active filter ID\n * @type {String}\n * @private\n */\n this.activeFilterId = null;\n\n /**\n * Determine if there are excluded rows from filtering\n * @type {Boolean}\n * @private\n */\n this.hasExcludedRows = Boolean(isArray(f.exclude_rows) &&\n f.exclude_rows.length > 0);\n\n /**\n * List of row indexes to be excluded from filtering\n * @type {Array}\n */\n this.excludeRows = defaultsArr(f.exclude_rows, []);\n\n /**\n * List of containers IDs where external filters will be generated\n * @type {Array}\n */\n this.externalFltIds = defaultsArr(f.external_flt_ids, []);\n\n /**\n * Callback fired after filters are generated\n * @type {Function}\n */\n this.onFiltersLoaded = defaultsFn(f.on_filters_loaded, EMPTY_FN);\n\n /**\n * Enable/disable single filter mode\n * @type {Boolean|Object}\n */\n this.singleFlt = isObj(f.single_filter) ||\n Boolean(f.single_filter);\n\n /**\n * Specify columns to be excluded from single filter search, by default\n * searching in all columns:\n * single_filter: {\n * exclude_cols: [2, 7]\n * }\n */\n this.singleFltExcludeCols = isObj(f.single_filter) &&\n isArray(f.single_filter.exclude_cols) ?\n f.single_filter.exclude_cols : [];\n\n /**\n * Callback fired after a row is validated during filtering\n * @type {Function}\n */\n this.onRowValidated = defaultsFn(f.on_row_validated, EMPTY_FN);\n\n /**\n * Specify which column implements a custom cell parser to retrieve the\n * cell value:\n * cell_parser: {\n * cols: [0, 2],\n * parse: function(tf, cell, colIndex) {\n * // custom cell parser logic here\n * return cellValue;\n * }\n * }\n * @type {Object}\n */\n this.cellParser = isObj(f.cell_parser) && isFn(f.cell_parser.parse) &&\n isArray(f.cell_parser.cols) ?\n f.cell_parser : { cols: [], parse: EMPTY_FN };\n\n /**\n * Global watermark text for input filter type or watermark for each\n * filter if an array is supplied\n * @type {String|Array}\n */\n this.watermark = f.watermark || '';\n\n /**\n * Indicate whether watermark is on a per column basis\n * @type {Boolean}\n * @private\n */\n this.isWatermarkArray = isArray(this.watermark);\n\n /**\n * Indicate whether help UI component is disabled\n * @type {Boolean}\n */\n this.help = isUndef(f.help_instructions) ? undefined :\n (isObj(f.help_instructions) || Boolean(f.help_instructions));\n\n /**\n * Indicate whether pop-up filters UI is enabled\n * @type {Boolean|Object}\n */\n this.popupFilters = isObj(f.popup_filters) || Boolean(f.popup_filters);\n\n /**\n * Indicate whether filtered (active) columns indicator is enabled\n * @type {Boolean}\n */\n this.markActiveColumns = isObj(f.mark_active_columns) ||\n Boolean(f.mark_active_columns);\n\n /*** select filter's customisation and behaviours ***/\n /**\n * Text for clear option in drop-down filter types (1st option)\n * @type {String|Array}\n */\n this.clearFilterText = defaultsStr(f.clear_filter_text, 'Clear');\n\n /**\n * Indicate whether empty option is enabled in drop-down filter types\n * @type {Boolean}\n */\n this.enableEmptyOption = Boolean(f.enable_empty_option);\n\n /**\n * Text for empty option in drop-down filter types\n * @type {String}\n */\n this.emptyText = defaultsStr(f.empty_text, '(Empty)');\n\n /**\n * Indicate whether non-empty option is enabled in drop-down filter\n * types\n * @type {Boolean}\n */\n this.enableNonEmptyOption = Boolean(f.enable_non_empty_option);\n\n /**\n * Text for non-empty option in drop-down filter types\n * @type {String}\n */\n this.nonEmptyText = defaultsStr(f.non_empty_text, '(Non empty)');\n\n /**\n * Indicate whether drop-down filter types filter the table by default\n * on change event\n * @type {Boolean}\n */\n this.onSlcChange = defaultsBool(f.on_change, true);\n\n /**\n * Make drop-down filter types options sorted in alpha-numeric manner\n * by default globally or on a column basis\n * @type {Boolean|Array}\n */\n this.sortSlc = isUndef(f.sort_select) ? true :\n isArray(f.sort_select) ? f.sort_select : Boolean(f.sort_select);\n\n /**\n * Indicate whether options in drop-down filter types are sorted in a\n * ascending numeric manner\n * @type {Boolean}\n * @private\n */\n this.isSortNumAsc = Boolean(f.sort_num_asc);\n\n /**\n * List of columns implementing options sorting in a ascending numeric\n * manner\n * @type {Array}\n */\n this.sortNumAsc = this.isSortNumAsc ? f.sort_num_asc : [];\n\n /**\n * Indicate whether options in drop-down filter types are sorted in a\n * descending numeric manner\n * @type {Boolean}\n * @private\n */\n this.isSortNumDesc = Boolean(f.sort_num_desc);\n\n /**\n * List of columns implementing options sorting in a descending numeric\n * manner\n * @type {Array}\n */\n this.sortNumDesc = this.isSortNumDesc ? f.sort_num_desc : [];\n\n /**\n * Indicate whether drop-down filter types are populated on demand at\n * first usage\n * @type {Boolean}\n */\n this.loadFltOnDemand = Boolean(f.load_filters_on_demand);\n\n /**\n * Indicate whether custom drop-down filter options are implemented\n * @type {Boolean}\n */\n this.hasCustomOptions = isObj(f.custom_options);\n\n /**\n * Custom options definition of a per column basis, ie:\n *\tcustom_options: {\n * cols:[0, 1],\n * texts: [\n * ['a0', 'b0', 'c0'],\n * ['a1', 'b1', 'c1']\n * ],\n * values: [\n * ['a0', 'b0', 'c0'],\n * ['a1', 'b1', 'c1']\n * ],\n * sorts: [false, true]\n * }\n *\n * @type {Object}\n */\n this.customOptions = f.custom_options;\n\n /*** Filter operators ***/\n /**\n * Regular expression operator for input filter. Defaults to 'rgx:'\n * @type {String}\n */\n this.rgxOperator = defaultsStr(f.regexp_operator, 'rgx:');\n\n /**\n * Empty cells operator for input filter. Defaults to '[empty]'\n * @type {String}\n */\n this.emOperator = defaultsStr(f.empty_operator, '[empty]');\n\n /**\n * Non-empty cells operator for input filter. Defaults to '[nonempty]'\n * @type {String}\n */\n this.nmOperator = defaultsStr(f.nonempty_operator, '[nonempty]');\n\n /**\n * Logical OR operator for input filter. Defaults to '||'\n * @type {String}\n */\n this.orOperator = defaultsStr(f.or_operator, '||');\n\n /**\n * Logical AND operator for input filter. Defaults to '&&'\n * @type {String}\n */\n this.anOperator = defaultsStr(f.and_operator, '&&');\n\n /**\n * Greater than operator for input filter. Defaults to '>'\n * @type {String}\n */\n this.grOperator = defaultsStr(f.greater_operator, '>');\n\n /**\n * Lower than operator for input filter. Defaults to '<'\n * @type {String}\n */\n this.lwOperator = defaultsStr(f.lower_operator, '<');\n\n /**\n * Lower than or equal operator for input filter. Defaults to '<='\n * @type {String}\n */\n this.leOperator = defaultsStr(f.lower_equal_operator, '<=');\n\n /**\n * Greater than or equal operator for input filter. Defaults to '>='\n * @type {String}\n */\n this.geOperator = defaultsStr(f.greater_equal_operator, '>=');\n\n /**\n * Inequality operator for input filter. Defaults to '!'\n * @type {String}\n */\n this.dfOperator = defaultsStr(f.different_operator, '!');\n\n /**\n * Like operator for input filter. Defaults to '*'\n * @type {String}\n */\n this.lkOperator = defaultsStr(f.like_operator, '*');\n\n /**\n * Strict equality operator for input filter. Defaults to '='\n * @type {String}\n */\n this.eqOperator = defaultsStr(f.equal_operator, '=');\n\n /**\n * Starts with operator for input filter. Defaults to '='\n * @type {String}\n */\n this.stOperator = defaultsStr(f.start_with_operator, '{');\n\n /**\n * Ends with operator for input filter. Defaults to '='\n * @type {String}\n */\n this.enOperator = defaultsStr(f.end_with_operator, '}');\n\n // this.curExp = f.cur_exp || '^[¥£€$]';\n\n /**\n * Stored values separator\n * @type {String}\n */\n this.separator = defaultsStr(f.separator, ',');\n\n /**\n * Enable rows counter UI component\n * @type {Boolean|Object}\n */\n this.rowsCounter = isObj(f.rows_counter) || Boolean(f.rows_counter);\n\n /**\n * Enable status bar UI component\n * @type {Boolean|Object}\n */\n this.statusBar = isObj(f.status_bar) || Boolean(f.status_bar);\n\n /**\n * Enable activity/spinner indicator UI component\n * @type {Boolean|Object}\n */\n this.loader = isObj(f.loader) || Boolean(f.loader);\n\n /*** validation - reset buttons/links ***/\n /**\n * Enable filters submission button\n * @type {Boolean}\n */\n this.displayBtn = Boolean(f.btn);\n\n /**\n * Define filters submission button text\n * @type {String}\n */\n this.btnText = defaultsStr(f.btn_text, (!this.enableIcons ? 'Go' : ''));\n\n /**\n * Css class for filters submission button\n * @type {String}\n */\n this.btnCssClass = defaultsStr(f.btn_css_class,\n (!this.enableIcons ? 'btnflt' : 'btnflt_icon'));\n\n /**\n * Enable clear button\n * @type {Object|Boolean}\n */\n this.btnReset = isObj(f.btn_reset) || Boolean(f.btn_reset);\n\n /**\n * Callback fired before filters are cleared\n * @type {Function}\n */\n this.onBeforeReset = defaultsFn(f.on_before_reset, EMPTY_FN);\n\n /**\n * Callback fired after filters are cleared\n * @type {Function}\n */\n this.onAfterReset = defaultsFn(f.on_after_reset, EMPTY_FN);\n\n /**\n * Enable paging component\n * @type {Object|Boolean}\n */\n this.paging = isObj(f.paging) || Boolean(f.paging);\n\n /**\n * Number of hidden rows\n * @type {Number}\n * @private\n */\n this.nbHiddenRows = 0;\n\n /**\n * Enable auto-filter behaviour, table is filtered when a user\n * stops typing\n * @type {Object|Boolean}\n */\n this.autoFilter = isObj(f.auto_filter) || Boolean(f.auto_filter);\n\n /**\n * Auto-filter delay in milliseconds\n * @type {Number}\n */\n this.autoFilterDelay = isObj(f.auto_filter) &&\n isNumber(f.auto_filter.delay) ?\n f.auto_filter.delay : AUTO_FILTER_DELAY;\n\n /**\n * Indicate whether user is typing\n * @type {Boolean}\n * @private\n */\n this.isUserTyping = null;\n\n /**\n * Auto-filter interval ID\n * @type {String}\n * @private\n */\n this.autoFilterTimer = null;\n\n /**\n * Enable keyword highlighting behaviour\n * @type {Boolean}\n */\n this.highlightKeywords = Boolean(f.highlight_keywords);\n\n /**\n * Enable no results message UI component\n * @type {Object|Boolean}\n */\n this.noResults = isObj(f.no_results_message) ||\n Boolean(f.no_results_message);\n\n /**\n * Enable state persistence\n * @type {Object|Boolean}\n */\n this.state = isObj(f.state) || Boolean(f.state);\n\n /*** data types ***/\n\n /**\n * Enable date type module\n * @type {Boolean}\n * @private\n */\n this.dateType = true;\n\n /**\n * Define default locale, default to 'en' as per Sugar Date module:\n * https://sugarjs.com/docs/#/DateLocales\n * @type {String}\n */\n this.locale = defaultsStr(f.locale, 'en');\n\n /**\n * Define thousands separator ',' or '.', defaults to ','\n * @type {String}\n */\n this.thousandsSeparator = defaultsStr(f.thousands_separator, ',');\n\n /**\n * Define decimal separator ',' or '.', defaults to '.'\n * @type {String}\n */\n this.decimalSeparator = defaultsStr(f.decimal_separator, '.');\n\n /**\n * Define data types on a column basis, possible values 'string',\n * 'number', 'formatted-number', 'date', 'ipaddress' ie:\n * col_types : [\n * 'string', 'date', 'number',\n * { type: 'formatted-number', decimal: ',', thousands: '.' },\n * { type: 'date', locale: 'en-gb' },\n * { type: 'date', format: ['{dd}-{months}-{yyyy|yy}'] }\n * ]\n *\n * Refer to https://sugarjs.com/docs/#/DateParsing for exhaustive\n * information on date parsing formats supported by Sugar Date\n * @type {Array}\n */\n this.colTypes = isArray(f.col_types) ? f.col_types : [];\n\n /*** ids prefixes ***/\n /**\n * Main prefix\n * @private\n */\n this.prfxTf = 'TF';\n\n /**\n * Filter's ID prefix (inputs - selects)\n * @private\n */\n this.prfxFlt = 'flt';\n\n /**\n * Button's ID prefix\n * @private\n */\n this.prfxValButton = 'btn';\n\n /**\n * Responsive Css class\n * @private\n */\n this.prfxResponsive = 'resp';\n\n /*** extensions ***/\n /**\n * List of loaded extensions\n * @type {Array}\n */\n this.extensions = defaultsArr(f.extensions, []);\n\n /*** themes ***/\n /**\n * Enable default theme\n * @type {Boolean}\n */\n this.enableDefaultTheme = Boolean(f.enable_default_theme);\n\n /**\n * Determine whether themes are enables\n * @type {Boolean}\n * @private\n */\n this.hasThemes = (this.enableDefaultTheme || isArray(f.themes));\n\n /**\n * List of themes, ie:\n * themes: [{ name: 'skyblue' }]\n * @type {Array}\n */\n this.themes = defaultsArr(f.themes, []);\n\n /**\n * Define path to themes assets, defaults to\n * 'tablefilter/style/themes/'. Usage:\n * themes: [{ name: 'skyblue' }]\n * @type {Array}\n */\n this.themesPath = this.getThemesPath();\n\n /**\n * Enable responsive layout\n * @type {Boolean}\n */\n this.responsive = Boolean(f.responsive);\n\n /**\n * Enable toolbar component\n * @type {Object|Boolean}\n */\n this.toolbar = isObj(f.toolbar) || Boolean(f.toolbar);\n\n /**\n * Features registry\n * @private\n */\n this.Mod = {};\n\n /**\n * Extensions registry\n * @private\n */\n this.ExtRegistry = {};\n\n // conditionally instantiate required features\n this.instantiateFeatures(\n Object.keys(FEATURES).map((item) => FEATURES[item])\n );\n }\n\n /**\n * Initialise features and layout\n */\n init() {\n if (this.initialized) {\n return;\n }\n\n // import main stylesheet\n this.import(this.stylesheetId, this.getStylesheetPath(), null, 'link');\n\n let Mod = this.Mod;\n let inpclass;\n\n //loads theme\n this.loadThemes();\n\n const { dateType, help, state, markActiveColumns, gridLayout, loader,\n highlightKeyword, popupFilter, rowsCounter, statusBar, clearButton,\n alternateRows, noResults, paging, toolbar } = FEATURES;\n\n //explicitly initialise features in given order\n this.initFeatures([\n dateType,\n help,\n state,\n markActiveColumns,\n gridLayout,\n loader,\n highlightKeyword,\n popupFilter\n ]);\n\n //filters grid is not generated\n if (!this.fltGrid) {\n this._initNoFilters();\n } else {\n let fltrow = this._insertFiltersRow();\n\n this.nbCells = this.getCellsNb(this.refRow);\n this.nbFilterableRows = this.getRowsNb();\n\n let n = this.singleFlt ? 1 : this.nbCells;\n\n //build filters\n for (let i = 0; i < n; i++) {\n this.emitter.emit('before-filter-init', this, i);\n\n let fltCell = createElm(this.fltCellTag),\n col = this.getFilterType(i);\n\n if (this.singleFlt) {\n fltCell.colSpan = this.nbCells;\n }\n if (!this.gridLayout) {\n fltrow.appendChild(fltCell);\n }\n inpclass = (i === n - 1 && this.displayBtn) ?\n this.fltSmallCssClass : this.fltCssClass;\n\n //only 1 input for single search\n if (this.singleFlt) {\n col = INPUT;\n inpclass = this.singleFltCssClass;\n }\n\n //drop-down filters\n if (col === SELECT || col === MULTIPLE) {\n Mod.dropdown = Mod.dropdown || new Dropdown(this);\n Mod.dropdown.init(i, this.isExternalFlt(), fltCell);\n }\n // checklist\n else if (col === CHECKLIST) {\n Mod.checkList = Mod.checkList || new CheckList(this);\n Mod.checkList.init(i, this.isExternalFlt(), fltCell);\n } else {\n this._buildInputFilter(i, inpclass, fltCell);\n }\n\n // this adds submit button\n if (i === n - 1 && this.displayBtn) {\n this._buildSubmitButton(\n this.isExternalFlt() ?\n elm(this.externalFltIds[i]) :\n fltCell\n );\n }\n\n this.emitter.emit('after-filter-init', this, i);\n }\n\n this.emitter.on(['filter-focus'],\n (tf, filter) => this.setActiveFilterId(filter.id));\n\n }//if this.fltGrid\n\n /* Features */\n if (this.hasExcludedRows) {\n this.emitter.on(['after-filtering'], () => this.setExcludeRows());\n this.setExcludeRows();\n }\n\n this.initFeatures([\n rowsCounter,\n statusBar,\n clearButton,\n alternateRows,\n noResults,\n paging,\n toolbar\n ]);\n\n this.setColWidths();\n\n //TF css class is added to table\n if (!this.gridLayout) {\n addClass(this.dom(), this.prfxTf);\n if (this.responsive) {\n addClass(this.dom(), this.prfxResponsive);\n }\n if (this.colWidths.length > 0) {\n this.setFixedLayout();\n }\n }\n\n /* Load extensions */\n this.initExtensions();\n\n // Subscribe to events\n if (this.linkedFilters) {\n this.emitter.on(['after-filtering'], () => this.linkFilters());\n }\n\n this.initialized = true;\n\n this.onFiltersLoaded(this);\n\n this.emitter.emit('initialized', this);\n }\n\n /**\n * Detect key\n * @param {Event} evt\n */\n detectKey(evt) {\n if (!this.enterKey) {\n return;\n }\n\n if (isKeyPressed(evt, [ENTER_KEY])) {\n this.filter();\n cancelEvt(evt);\n stopEvt(evt);\n } else {\n this.isUserTyping = true;\n root.clearInterval(this.autoFilterTimer);\n this.autoFilterTimer = null;\n }\n }\n\n /**\n * Filter's keyup event: if auto-filter on, detect user is typing and filter\n * columns\n * @param {Event} evt\n */\n onKeyUp(evt) {\n if (!this.autoFilter) {\n return;\n }\n this.isUserTyping = false;\n\n function filter() {\n root.clearInterval(this.autoFilterTimer);\n this.autoFilterTimer = null;\n if (!this.isUserTyping) {\n this.filter();\n this.isUserTyping = null;\n }\n }\n\n if (isKeyPressed(evt,\n [ENTER_KEY, TAB_KEY, ESC_KEY, UP_ARROW_KEY, DOWN_ARROW_KEY])) {\n root.clearInterval(this.autoFilterTimer);\n this.autoFilterTimer = null;\n } else {\n if (this.autoFilterTimer !== null) {\n return;\n }\n this.autoFilterTimer = root.setInterval(\n filter.bind(this),\n this.autoFilterDelay);\n }\n }\n\n /**\n * Filter's keydown event: if auto-filter on, detect user is typing\n */\n onKeyDown() {\n if (this.autoFilter) {\n this.isUserTyping = true;\n }\n }\n\n /**\n * Filter's focus event\n * @param {Event} evt\n */\n onInpFocus(evt) {\n let elm = targetEvt(evt);\n this.emitter.emit('filter-focus', this, elm);\n }\n\n /**\n * Filter's blur event: if auto-filter on, clear interval on filter blur\n */\n onInpBlur() {\n if (this.autoFilter) {\n this.isUserTyping = false;\n root.clearInterval(this.autoFilterTimer);\n }\n this.emitter.emit('filter-blur', this);\n }\n\n /**\n * Insert filters row at initialization\n */\n _insertFiltersRow() {\n // TODO: prevent filters row generation for popup filters too,\n // to reduce and simplify headers row index adjusting across lib modules\n // (GridLayout, PopupFilter etc)\n if (this.gridLayout) {\n return;\n }\n let fltrow;\n\n let thead = tag(this.dom(), 'thead');\n if (thead.length > 0) {\n fltrow = thead[0].insertRow(this.filtersRowIndex);\n } else {\n fltrow = this.dom().insertRow(this.filtersRowIndex);\n }\n\n fltrow.className = this.fltsRowCssClass;\n\n if (this.isExternalFlt()) {\n fltrow.style.display = NONE;\n }\n\n this.emitter.emit('filters-row-inserted', this, fltrow);\n return fltrow;\n }\n\n /**\n * Initialize filtersless table\n */\n _initNoFilters() {\n if (this.fltGrid) {\n return;\n }\n this.refRow = this.refRow > 0 ? this.refRow - 1 : 0;\n this.nbFilterableRows = this.getRowsNb();\n }\n\n /**\n * Build input filter type\n * @param {Number} colIndex Column index\n * @param {String} cssClass Css class applied to filter\n * @param {DOMElement} container Container DOM element\n */\n _buildInputFilter(colIndex, cssClass, container) {\n let col = this.getFilterType(colIndex);\n let externalFltTgtId = this.isExternalFlt() ?\n this.externalFltIds[colIndex] : null;\n let inpType = col === INPUT ? 'text' : 'hidden';\n let inp = createElm(INPUT,\n ['id', this.buildFilterId(colIndex)],\n ['type', inpType], ['ct', colIndex]);\n\n if (inpType !== 'hidden' && this.watermark) {\n inp.setAttribute('placeholder',\n this.isWatermarkArray ? (this.watermark[colIndex] || '') :\n this.watermark\n );\n }\n inp.className = cssClass || this.fltCssClass;\n addEvt(inp, 'focus', (evt) => this.onInpFocus(evt));\n\n //filter is appended in custom element\n if (externalFltTgtId) {\n elm(externalFltTgtId).appendChild(inp);\n } else {\n container.appendChild(inp);\n }\n\n this.fltIds.push(inp.id);\n\n addEvt(inp, 'keypress', (evt) => this.detectKey(evt));\n addEvt(inp, 'keydown', () => this.onKeyDown());\n addEvt(inp, 'keyup', (evt) => this.onKeyUp(evt));\n addEvt(inp, 'blur', () => this.onInpBlur());\n }\n\n /**\n * Build submit button\n * @param {DOMElement} container Container DOM element\n */\n _buildSubmitButton(container) {\n let btn = createElm(INPUT,\n ['type', 'button'],\n ['value', this.btnText]\n );\n btn.className = this.btnCssClass;\n\n //filter is appended in container element\n container.appendChild(btn);\n\n addEvt(btn, 'click', () => this.filter());\n }\n\n /**\n * Istantiate the collection of features required by the\n * configuration and add them to the features registry. A feature is\n * described by a `class` and `name` fields and and optional `property`\n * field:\n * {\n * class: AClass,\n * name: 'aClass'\n * }\n * @param {Array} [features=[]]\n * @private\n */\n instantiateFeatures(features = []) {\n features.forEach((feature) => {\n // TODO: remove the property field.\n // Due to naming convention inconsistencies, a `property`\n // field is added to allow a conditional instanciation based\n // on that property on TableFilter, if supplied.\n feature.property = feature.property || feature.name;\n if (!this.hasConfig || this[feature.property] === true ||\n feature.enforce === true) {\n let {class: Cls, name} = feature;\n\n this.Mod[name] = this.Mod[name] || new Cls(this);\n }\n });\n }\n\n /**\n * Initialise the passed features collection. A feature is described by a\n * `class` and `name` fields and and optional `property` field:\n * {\n * class: AClass,\n * name: 'aClass'\n * }\n * @param {Array} [features=[]]\n * @private\n */\n initFeatures(features = []) {\n features.forEach((feature) => {\n let {property, name} = feature;\n if (this[property] === true && this.Mod[name]) {\n this.Mod[name].init();\n }\n });\n }\n\n /**\n * Return a feature instance for a given name\n * @param {String} name Name of the feature\n * @return {Object}\n */\n feature(name) {\n return this.Mod[name];\n }\n\n /**\n * Initialise all the extensions defined in the configuration object\n */\n initExtensions() {\n let exts = this.extensions;\n if (exts.length === 0) {\n return;\n }\n\n // Set config's publicPath dynamically for Webpack...\n __webpack_public_path__ = this.basePath;\n\n this.emitter.emit('before-loading-extensions', this);\n\n exts.forEach((ext) => {\n this.loadExtension(ext);\n });\n this.emitter.emit('after-loading-extensions', this);\n }\n\n /**\n * Load an extension module\n * @param {Object} ext Extension config object\n */\n loadExtension(ext) {\n if (!ext || !ext.name || this.hasExtension(ext.name)) {\n return;\n }\n\n let {name, path} = ext;\n let modulePath;\n\n if (name && path) {\n modulePath = ext.path + name;\n } else {\n name = name.replace('.js', '');\n modulePath = 'extensions/{}/{}'.replace(/{}/g, name);\n }\n\n // Require pattern for Webpack\n require(['./' + modulePath], (mod) => {\n /* eslint-disable */\n let inst = new mod.default(this, ext);\n /* eslint-enable */\n inst.init();\n this.ExtRegistry[name] = inst;\n });\n }\n\n /**\n * Get an extension instance\n * @param {String} name Name of the extension\n * @return {Object} Extension instance\n */\n extension(name) {\n return this.ExtRegistry[name];\n }\n\n /**\n * Check passed extension name exists\n * @param {String} name Name of the extension\n * @return {Boolean}\n */\n hasExtension(name) {\n return !isEmpty(this.ExtRegistry[name]);\n }\n\n /**\n * Register the passed extension instance with associated name\n * @param {Object} inst Extension instance\n * @param {String} name Name of the extension\n */\n registerExtension(inst, name) {\n this.ExtRegistry[name] = inst;\n }\n\n /**\n * Destroy all the extensions store in extensions registry\n */\n destroyExtensions() {\n let reg = this.ExtRegistry;\n\n Object.keys(reg).forEach((key) => {\n reg[key].destroy();\n reg[key] = undefined;\n });\n }\n\n /**\n * Load themes defined in the configuration object\n */\n loadThemes() {\n if (!this.hasThemes) {\n return;\n }\n\n let themes = this.themes;\n this.emitter.emit('before-loading-themes', this);\n\n //Default theme config\n if (this.enableDefaultTheme) {\n let defaultTheme = { name: 'default' };\n this.themes.push(defaultTheme);\n }\n\n themes.forEach((theme, i) => {\n let {name, path} = theme;\n let styleId = this.prfxTf + name;\n if (name && !path) {\n path = this.themesPath + name + '/' + name + '.css';\n }\n else if (!name && theme.path) {\n name = 'theme{0}'.replace('{0}', i);\n }\n\n if (!this.isImported(path, 'link')) {\n this.import(styleId, path, null, 'link');\n }\n });\n\n // Enable loader indicator\n this.loader = true;\n\n this.emitter.emit('after-loading-themes', this);\n }\n\n /**\n * Return stylesheet DOM element for a given theme name\n * @return {DOMElement} stylesheet element\n */\n getStylesheet(name = 'default') {\n return elm(this.prfxTf + name);\n }\n\n /**\n * Destroy filter grid\n */\n destroy() {\n if (!this.initialized) {\n return;\n }\n\n let emitter = this.emitter;\n\n if (this.isExternalFlt() && !this.popupFilters) {\n this.removeExternalFlts();\n }\n\n this.destroyExtensions();\n\n this.validateAllRows();\n\n // broadcast destroy event modules and extensions are subscribed to\n emitter.emit('destroy', this);\n\n if (this.fltGrid && !this.gridLayout) {\n this.dom().deleteRow(this.filtersRowIndex);\n }\n\n // unsubscribe to events\n if (this.hasExcludedRows) {\n emitter.off(['after-filtering'], () => this.setExcludeRows());\n }\n if (this.linkedFilters) {\n emitter.off(['after-filtering'], () => this.linkFilters());\n }\n this.emitter.off(['filter-focus'],\n (tf, filter) => this.setActiveFilterId(filter.id));\n\n removeClass(this.dom(), this.prfxTf);\n removeClass(this.dom(), this.prfxResponsive);\n\n this.nbHiddenRows = 0;\n this.validRowsIndex = [];\n this.fltIds = [];\n this.initialized = false;\n }\n\n /**\n * Remove all the external column filters\n */\n removeExternalFlts() {\n if (!this.isExternalFlt()) {\n return;\n }\n let ids = this.externalFltIds;\n ids.forEach((id) => {\n let externalFlt = elm(id);\n if (externalFlt) {\n externalFlt.innerHTML = '';\n }\n });\n }\n\n /**\n * Check if given column implements a filter with custom options\n * @param {Number} colIndex Column's index\n * @return {Boolean}\n */\n isCustomOptions(colIndex) {\n return this.hasCustomOptions &&\n this.customOptions.cols.indexOf(colIndex) !== -1;\n }\n\n /**\n * Returns an array [[value0, value1 ...],[text0, text1 ...]] with the\n * custom options values and texts\n * @param {Number} colIndex Column's index\n * @return {Array}\n */\n getCustomOptions(colIndex) {\n if (isEmpty(colIndex) || !this.isCustomOptions(colIndex)) {\n return;\n }\n\n let customOptions = this.customOptions;\n let cols = customOptions.cols;\n let optTxt = [], optArray = [];\n let index = cols.indexOf(colIndex);\n let slcValues = customOptions.values[index];\n let slcTexts = customOptions.texts[index];\n let slcSort = customOptions.sorts[index];\n\n for (let r = 0, len = slcValues.length; r < len; r++) {\n optArray.push(slcValues[r]);\n if (slcTexts[r]) {\n optTxt.push(slcTexts[r]);\n } else {\n optTxt.push(slcValues[r]);\n }\n }\n if (slcSort) {\n optArray.sort();\n optTxt.sort();\n }\n return [optArray, optTxt];\n }\n\n /**\n * Filter the table by retrieving the data from each cell in every single\n * row and comparing it to the search term for current column. A row is\n * hidden when all the search terms are not found in inspected row.\n */\n filter() {\n if (!this.fltGrid || !this.initialized) {\n return;\n }\n\n let emitter = this.emitter;\n\n //fire onbefore callback\n this.onBeforeFilter(this);\n emitter.emit('before-filtering', this);\n\n let hiddenRows = 0;\n\n this.validRowsIndex = [];\n // search args\n let searchArgs = this.getFiltersValue();\n\n let eachRow = this.eachRow();\n eachRow(\n (row, k) => {\n // already filtered rows display re-init\n row.style.display = '';\n\n let cells = row.cells;\n let nbCells = cells.length;\n\n let occurence = [],\n isMatch = true,\n //only for single filter search\n isSingleFltMatch = false;\n\n // this loop retrieves cell data\n for (let j = 0; j < nbCells; j++) {\n //searched keyword\n let sA = searchArgs[this.singleFlt ? 0 : j];\n\n if (sA === '') {\n continue;\n }\n\n let cellValue = matchCase(this.getCellValue(cells[j]),\n this.caseSensitive);\n\n //multiple search parameter operator ||\n let sAOrSplit = sA.toString().split(this.orOperator),\n //multiple search || parameter boolean\n hasMultiOrSA = sAOrSplit.length > 1,\n //multiple search parameter operator &&\n sAAndSplit = sA.toString().split(this.anOperator),\n //multiple search && parameter boolean\n hasMultiAndSA = sAAndSplit.length > 1;\n\n //detect operators or array query\n if (isArray(sA) || hasMultiOrSA || hasMultiAndSA) {\n let cS, s;\n let found = false;\n\n if (isArray(sA)) {\n s = sA;\n } else {\n s = hasMultiOrSA ? sAOrSplit : sAAndSplit;\n }\n // isolate search term and check occurence in cell data\n for (let w = 0, len = s.length; w < len; w++) {\n cS = trim(s[w]);\n found = this._match(cS, cellValue, j);\n\n if (found) {\n emitter.emit('highlight-keyword', this,\n cells[j], cS);\n }\n if ((hasMultiOrSA && found) ||\n (hasMultiAndSA && !found)) {\n break;\n }\n if (isArray(sA) && found) {\n break;\n }\n }\n occurence[j] = found;\n\n }\n //single search parameter\n else {\n occurence[j] = this._match(trim(sA), cellValue, j);\n if (occurence[j]) {\n emitter.emit('highlight-keyword', this, cells[j],\n sA);\n }\n }\n\n if (!occurence[j]) {\n isMatch = false;\n }\n\n if (this.singleFlt &&\n this.singleFltExcludeCols.indexOf(j) === -1 &&\n occurence[j]) {\n isSingleFltMatch = true;\n }\n\n emitter.emit('cell-processed', this, j, cells[j]);\n }//for j\n\n if (isSingleFltMatch) {\n isMatch = true;\n }\n\n this.validateRow(k, isMatch);\n if (!isMatch) {\n hiddenRows++;\n }\n\n emitter.emit('row-processed', this, k,\n this.validRowsIndex.length - 1, isMatch);\n },\n // continue condition\n (row) => row.cells.length !== this.nbCells\n );\n\n this.nbHiddenRows = hiddenRows;\n\n //fire onafterfilter callback\n this.onAfterFilter(this);\n\n emitter.emit('after-filtering', this, searchArgs);\n }\n\n /**\n * Match search term in cell data\n * @param {String} term Search term\n * @param {String} cellValue Cell data\n * @param {Number} colIdx Column index\n * @return {Boolean}\n * @private\n */\n _match(term, cellValue, colIdx) {\n let numData;\n let decimal = this.getDecimal(colIdx);\n let reLe = new RegExp(this.leOperator),\n reGe = new RegExp(this.geOperator),\n reL = new RegExp(this.lwOperator),\n reG = new RegExp(this.grOperator),\n reD = new RegExp(this.dfOperator),\n reLk = new RegExp(rgxEsc(this.lkOperator)),\n reEq = new RegExp(this.eqOperator),\n reSt = new RegExp(this.stOperator),\n reEn = new RegExp(this.enOperator),\n // re_an = new RegExp(this.anOperator),\n // re_cr = new RegExp(this.curExp),\n reEm = this.emOperator,\n reNm = this.nmOperator,\n reRe = new RegExp(rgxEsc(this.rgxOperator));\n\n term = matchCase(term, this.caseSensitive);\n\n let occurence = false;\n\n //Search arg operator tests\n let hasLO = reL.test(term),\n hasLE = reLe.test(term),\n hasGR = reG.test(term),\n hasGE = reGe.test(term),\n hasDF = reD.test(term),\n hasEQ = reEq.test(term),\n hasLK = reLk.test(term),\n // hatermN = re_an.test(term),\n hasST = reSt.test(term),\n hasEN = reEn.test(term),\n hasEM = (reEm === term),\n hasNM = (reNm === term),\n hasRE = reRe.test(term);\n\n // Check for dates or resolve date type\n if (this.hasType(colIdx, [DATE])) {\n let dte1, dte2;\n\n let dateType = this.Mod.dateType;\n let isValidDate = dateType.isValid.bind(dateType);\n let parseDate = dateType.parse.bind(dateType);\n let locale = dateType.getLocale(colIdx);\n\n // Search arg dates tests\n let isLDate = hasLO &&\n isValidDate(term.replace(reL, ''), locale);\n let isLEDate = hasLE &&\n isValidDate(term.replace(reLe, ''), locale);\n let isGDate = hasGR &&\n isValidDate(term.replace(reG, ''), locale);\n let isGEDate = hasGE &&\n isValidDate(term.replace(reGe, ''), locale);\n let isDFDate = hasDF &&\n isValidDate(term.replace(reD, ''), locale);\n let isEQDate = hasEQ &&\n isValidDate(term.replace(reEq, ''), locale);\n\n dte1 = parseDate(cellValue, locale);\n\n // lower equal date\n if (isLEDate) {\n dte2 = parseDate(term.replace(reLe, ''), locale);\n occurence = dte1 <= dte2;\n }\n // lower date\n else if (isLDate) {\n dte2 = parseDate(term.replace(reL, ''), locale);\n occurence = dte1 < dte2;\n }\n // greater equal date\n else if (isGEDate) {\n dte2 = parseDate(term.replace(reGe, ''), locale);\n occurence = dte1 >= dte2;\n }\n // greater date\n else if (isGDate) {\n dte2 = parseDate(term.replace(reG, ''), locale);\n occurence = dte1 > dte2;\n }\n // different date\n else if (isDFDate) {\n dte2 = parseDate(term.replace(reD, ''), locale);\n occurence = dte1.toString() !== dte2.toString();\n }\n // equal date\n else if (isEQDate) {\n dte2 = parseDate(term.replace(reEq, ''), locale);\n occurence = dte1.toString() === dte2.toString();\n }\n // searched keyword with * operator doesn't have to be a date\n else if (reLk.test(term)) {// like date\n occurence = contains(term.replace(reLk, ''), cellValue,\n false, this.caseSensitive);\n }\n else if (isValidDate(term)) {\n dte2 = parseDate(term, locale);\n occurence = dte1.toString() === dte2.toString();\n }\n //empty\n else if (hasEM) {\n occurence = isEmptyString(cellValue);\n }\n //non-empty\n else if (hasNM) {\n occurence = !isEmptyString(cellValue);\n } else {\n occurence = contains(term, cellValue,\n this.isExactMatch(colIdx), this.caseSensitive);\n }\n } else {\n // Convert to number anyways to auto-resolve type in case not\n // defined by configuration. Order is important first try to\n // parse formatted number then fallback to Number coercion\n // to avoid false positives with Number\n numData = parseNb(cellValue, decimal) || Number(cellValue);\n\n // first checks if there is any operator (<,>,<=,>=,!,*,=,{,},\n // rgx:)\n\n //regexp\n if (hasRE) {\n //in case regexp throws\n try {\n //operator is removed\n let srchArg = term.replace(reRe, '');\n let rgx = new RegExp(srchArg);\n occurence = rgx.test(cellValue);\n } catch (ex) {\n occurence = false;\n }\n }\n // lower equal\n else if (hasLE) {\n occurence = numData <= parseNb(\n term.replace(reLe, ''),\n decimal\n );\n }\n //greater equal\n else if (hasGE) {\n occurence = numData >= parseNb(\n term.replace(reGe, ''),\n decimal\n );\n }\n //lower\n else if (hasLO) {\n occurence = numData < parseNb(\n term.replace(reL, ''),\n decimal\n );\n }\n //greater\n else if (hasGR) {\n occurence = numData > parseNb(\n term.replace(reG, ''),\n decimal\n );\n }\n //different\n else if (hasDF) {\n occurence = contains(term.replace(reD, ''), cellValue,\n false, this.caseSensitive) ? false : true;\n }\n //like\n else if (hasLK) {\n occurence = contains(term.replace(reLk, ''), cellValue,\n false, this.caseSensitive);\n }\n //equal\n else if (hasEQ) {\n occurence = contains(term.replace(reEq, ''), cellValue,\n true, this.caseSensitive);\n }\n //starts with\n else if (hasST) {\n occurence = cellValue.indexOf(term.replace(reSt, '')) === 0 ?\n true : false;\n }\n //ends with\n else if (hasEN) {\n let searchArg = term.replace(reEn, '');\n occurence =\n cellValue.lastIndexOf(searchArg, cellValue.length - 1) ===\n (cellValue.length - 1) - (searchArg.length - 1) &&\n cellValue.lastIndexOf(searchArg, cellValue.length - 1)\n > -1 ? true : false;\n }\n //empty\n else if (hasEM) {\n occurence = isEmptyString(cellValue);\n }\n //non-empty\n else if (hasNM) {\n occurence = !isEmptyString(cellValue);\n } else {\n // If numeric type data, perform a strict equality test and\n // fallback to unformatted number string comparison\n if (numData &&\n this.hasType(colIdx, [NUMBER, FORMATTED_NUMBER]) &&\n !this.singleFlt) {\n // parseNb can return 0 for strings which are not\n // formatted numbers, in that case return the original\n // string. TODO: handle this in parseNb\n term = parseNb(term, decimal) || term;\n occurence = numData === term ||\n contains(term.toString(), numData.toString(),\n this.isExactMatch(colIdx), this.caseSensitive);\n } else {\n // Finally test search term is contained in cell data\n occurence = contains(\n term,\n cellValue,\n this.isExactMatch(colIdx),\n this.caseSensitive,\n this.ignoresDiacritics(colIdx)\n );\n }\n }\n\n }//else\n\n return occurence;\n }\n\n /**\n * Return the data of a specified column\n * @param {Number} colIndex Column index\n * @param {Boolean} [includeHeaders=false] Include headers row\n * @param {Array} [exclude=[]] List of row indexes to be excluded\n * @return Flat list of data for a column\n */\n getColumnData(colIndex, includeHeaders = false, exclude = []) {\n return this.getColValues(colIndex, includeHeaders, true, exclude);\n }\n\n /**\n * Return the values of a specified column\n * @param {Number} colIndex Column index\n * @param {Boolean} [includeHeaders=false] Include headers row\n * @param {Array} [exclude=[]] List of row indexes to be excluded\n * @return Flat list of values for a column\n */\n getColumnValues(colIndex, includeHeaders = false, exclude = []) {\n return this.getColValues(colIndex, includeHeaders, false, exclude);\n }\n\n /**\n * Return the data of a specified column\n * @param {Number} colIndex Column index\n * @param {Boolean} [includeHeaders=false] Include headers row\n * @param {Boolean} [typed=false] Return a typed value\n * @param {Array} [exclude=[]] List of row indexes to be excluded\n * @return {Array} Flat list of data for a column\n * @private\n */\n getColValues(\n colIndex,\n includeHeaders = false,\n typed = false,\n exclude = []\n ) {\n let colValues = [];\n let getContent = typed ? this.getCellData.bind(this) :\n this.getCellValue.bind(this);\n\n if (includeHeaders) {\n colValues.push(this.getHeadersText()[colIndex]);\n }\n\n let eachRow = this.eachRow();\n eachRow((row, i) => {\n // checks if current row index appears in exclude array\n let isExludedRow = exclude.indexOf(i) !== -1;\n let cells = row.cells;\n\n // checks if row has exact cell # and is not excluded\n if (cells.length === this.nbCells && !isExludedRow) {\n let data = getContent(cells[colIndex]);\n colValues.push(data);\n }\n });\n return colValues;\n }\n\n /**\n * Return the filter's value of a specified column\n * @param {Number} index Column index\n * @return {String} Filter value\n */\n getFilterValue(index) {\n if (!this.fltGrid) {\n return;\n }\n let fltValue = '';\n let flt = this.getFilterElement(index);\n if (!flt) {\n return fltValue;\n }\n\n let fltColType = this.getFilterType(index);\n if (fltColType !== MULTIPLE && fltColType !== CHECKLIST) {\n fltValue = flt.value;\n }\n //mutiple select\n else if (fltColType === MULTIPLE) {\n fltValue = this.feature('dropdown').getValues(index);\n }\n //checklist\n else if (fltColType === CHECKLIST) {\n fltValue = this.feature('checkList').getValues(index);\n }\n //return an empty string if collection is empty or contains a single\n //empty string\n if (isArray(fltValue) && fltValue.length === 0 ||\n (fltValue.length === 1 && fltValue[0] === '')) {\n fltValue = '';\n }\n\n return fltValue;\n }\n\n /**\n * Return the filters' values\n * @return {Array} List of filters' values\n */\n getFiltersValue() {\n if (!this.fltGrid) {\n return;\n }\n let searchArgs = [];\n\n this.fltIds.forEach((id, i) => {\n let fltValue = this.getFilterValue(i);\n if (isArray(fltValue)) {\n searchArgs.push(fltValue);\n } else {\n searchArgs.push(trim(fltValue));\n }\n });\n return searchArgs;\n }\n\n /**\n * Return the ID of a specified column's filter\n * @param {Number} index Column's index\n * @return {String} ID of the filter element\n */\n getFilterId(index) {\n if (!this.fltGrid) {\n return;\n }\n return this.fltIds[index];\n }\n\n /**\n * Return the list of ids of filters matching a specified type.\n * Note: hidden filters are also returned\n *\n * @param {String} type Filter type string ('input', 'select', 'multiple',\n * 'checklist')\n * @param {Boolean} bool If true returns columns indexes instead of IDs\n * @return {[type]} List of element IDs or column indexes\n */\n getFiltersByType(type, bool) {\n if (!this.fltGrid) {\n return;\n }\n let arr = [];\n for (let i = 0, len = this.fltIds.length; i < len; i++) {\n let fltType = this.getFilterType(i);\n if (fltType === type.toLowerCase()) {\n let a = bool ? i : this.fltIds[i];\n arr.push(a);\n }\n }\n return arr;\n }\n\n /**\n * Return the filter's DOM element for a given column\n * @param {Number} index Column's index\n * @return {DOMElement}\n */\n getFilterElement(index) {\n return elm(this.fltIds[index]);\n }\n\n /**\n * Return the number of cells for a given row index\n * @param {Number} rowIndex Index of the row\n * @return {Number} Number of cells\n */\n getCellsNb(rowIndex = 0) {\n let tr = this.dom().rows[rowIndex >= 0 ? rowIndex : 0];\n return tr ? tr.cells.length : 0;\n }\n\n /**\n * Return the number of working rows starting from reference row if\n * defined\n * @param {Boolean} includeHeaders Include the headers row(s)\n * @return {Number} Number of working rows\n */\n getRowsNb(includeHeaders) {\n let nbRows = this.getWorkingRows().length;\n if (this.dom().tHead) {\n return includeHeaders ?\n nbRows + this.dom().querySelectorAll('thead > tr').length :\n nbRows;\n }\n return includeHeaders ? nbRows : nbRows - this.refRow;\n }\n\n /**\n * Return the collection of the working rows, that is, the rows belonging\n * to the tbody section(s)\n * @returns {Array}\n */\n getWorkingRows() {\n return doc.querySelectorAll(`table#${this.id} > tbody > tr`);\n }\n\n /**\n * Return the text content of a given cell\n * @param {DOMElement} Cell's DOM element\n * @return {String}\n */\n getCellValue(cell) {\n let idx = cell.cellIndex;\n let cellParser = this.cellParser;\n // Invoke cellParser for this column if any\n if (cellParser.cols.indexOf(idx) !== -1) {\n return cellParser.parse(this, cell, idx);\n } else {\n return getText(cell);\n }\n }\n\n /**\n * Return the typed data of a given cell based on the column type definition\n * @param {DOMElement} cell Cell's DOM element\n * @return {String|Number|Date}\n */\n getCellData(cell) {\n let colIndex = cell.cellIndex;\n let value = this.getCellValue(cell);\n\n if (this.hasType(colIndex, [FORMATTED_NUMBER])) {\n return parseNb(value, this.getDecimal(colIndex));\n }\n else if (this.hasType(colIndex, [NUMBER])) {\n return Number(value);\n }\n else if (this.hasType(colIndex, [DATE])){\n let dateType = this.Mod.dateType;\n return dateType.parse(value, dateType.getLocale(colIndex));\n }\n\n return value;\n }\n\n /**\n * Return the table data based on its columns data type definitions\n * with following structure:\n * [\n * [rowIndex, [data0, data1...]],\n * [rowIndex, [data0, data1...]]\n * ]\n * @param {Boolean} [includeHeaders=false] Include headers row\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\n * @return {Array}\n */\n getData(includeHeaders = false, excludeHiddenCols = false) {\n return this.getTableData(includeHeaders, excludeHiddenCols, true);\n }\n\n /**\n * Return the table values with following structure:\n * [\n * [rowIndex, [value0, value1...]],\n * [rowIndex, [value0, value1...]]\n * ]\n * @param {Boolean} [includeHeaders=false] Include headers row\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\n * @return {Array}\n */\n getValues(includeHeaders = false, excludeHiddenCols = false) {\n return this.getTableData(includeHeaders, excludeHiddenCols, false);\n }\n\n /**\n * Return the table data with following structure:\n * [\n * [rowIndex, [value0, value1...]],\n * [rowIndex, [value0, value1...]]\n * ]\n * @param {Boolean} [includeHeaders=false] Include headers row\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\n * @param {Boolean} [typed=false] Return typed value\n * @return {Array}\n * @private\n *\n * TODO: provide an API returning data in JSON format\n */\n getTableData(\n includeHeaders = false,\n excludeHiddenCols = false,\n typed = false\n ) {\n let tblData = [];\n let getContent = typed ? this.getCellData.bind(this) :\n this.getCellValue.bind(this);\n\n if (includeHeaders) {\n let headers = this.getHeadersText(excludeHiddenCols);\n tblData.push([this.getHeadersRowIndex(), headers]);\n }\n\n let eachRow = this.eachRow();\n eachRow((row, k) => {\n let rowData = [k, []];\n let cells = row.cells;\n for (let j = 0, len = cells.length; j < len; j++) {\n if (excludeHiddenCols && this.hasExtension('colsVisibility')) {\n if (this.extension('colsVisibility').isColHidden(j)) {\n continue;\n }\n }\n let cellContent = getContent(cells[j]);\n rowData[1].push(cellContent);\n }\n tblData.push(rowData);\n });\n return tblData;\n }\n\n /**\n * Return the filtered table data based on its columns data type definitions\n * with following structure:\n * [\n * [rowIndex, [data0, data1...]],\n * [rowIndex, [data0, data1...]]\n * ]\n * @param {Boolean} [includeHeaders=false] Include headers row\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\n * @return {Array}\n *\n * TODO: provide an API returning data in JSON format\n */\n getFilteredData(includeHeaders = false, excludeHiddenCols = false) {\n return this.filteredData(includeHeaders, excludeHiddenCols, true);\n }\n\n /**\n * Return the filtered table values with following structure:\n * [\n * [rowIndex, [value0, value1...]],\n * [rowIndex, [value0, value1...]]\n * ]\n * @param {Boolean} [includeHeaders=false] Include headers row\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\n * @return {Array}\n *\n * TODO: provide an API returning data in JSON format\n */\n getFilteredValues(includeHeaders = false, excludeHiddenCols = false) {\n return this.filteredData(includeHeaders, excludeHiddenCols, false);\n }\n\n /**\n * Return the filtered data with following structure:\n * [\n * [rowIndex, [value0, value1...]],\n * [rowIndex, [value0, value1...]]\n * ]\n * @param {Boolean} [includeHeaders=false] Include headers row\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\n * @param {Boolean} [typed=false] Return typed value\n * @return {Array}\n * @private\n *\n * TODO: provide an API returning data in JSON format\n */\n filteredData(\n includeHeaders = false,\n excludeHiddenCols = false,\n typed = false\n ) {\n if (this.validRowsIndex.length === 0) {\n return [];\n }\n let rows = this.dom().rows,\n filteredData = [];\n let getContent = typed ? this.getCellData.bind(this) :\n this.getCellValue.bind(this);\n\n if (includeHeaders) {\n let headers = this.getHeadersText(excludeHiddenCols);\n filteredData.push([this.getHeadersRowIndex(), headers]);\n }\n\n let validRows = this.getValidRows(true);\n for (let i = 0; i < validRows.length; i++) {\n let rData = [this.validRowsIndex[i], []],\n cells = rows[this.validRowsIndex[i]].cells;\n for (let k = 0; k < cells.length; k++) {\n if (excludeHiddenCols && this.hasExtension('colsVisibility')) {\n if (this.extension('colsVisibility').isColHidden(k)) {\n continue;\n }\n }\n let cellValue = getContent(cells[k]);\n rData[1].push(cellValue);\n }\n filteredData.push(rData);\n }\n return filteredData;\n }\n\n /**\n * Return the filtered data for a given column index\n * @param {any} colIndex Colmun's index\n * @param {boolean} [includeHeaders=false] Optional Include headers row\n * @param {any} [exclude=[]] Optional List of row indexes to be excluded\n * @return {Array} Flat list of typed values [data0, data1, data2...]\n *\n * TODO: provide an API returning data in JSON format\n */\n getFilteredColumnData(colIndex, includeHeaders = false, exclude = []) {\n return this.getFilteredDataCol(\n colIndex, includeHeaders, true, exclude, false);\n }\n\n /**\n * Return the filtered and visible data for a given column index\n * @param {any} colIndex Colmun's index\n * @param {boolean} [includeHeaders=false] Optional Include headers row\n * @param {any} [exclude=[]] Optional List of row indexes to be excluded\n * @return {Array} Flat list of typed values [data0, data1, data2...]\n *\n * TODO: provide an API returning data in JSON format\n */\n getVisibleColumnData(colIndex, includeHeaders = false, exclude = []) {\n return this.getFilteredDataCol(\n colIndex, includeHeaders, true, exclude, true);\n }\n\n /**\n * Return the filtered values for a given column index\n * @param {any} colIndex Colmun's index\n * @param {boolean} [includeHeaders=false] Optional Include headers row\n * @param {any} [exclude=[]] Optional List of row indexes to be excluded\n * @return {Array} Flat list of values ['value0', 'value1', 'value2'...]\n *\n * TODO: provide an API returning data in JSON format\n */\n getFilteredColumnValues(colIndex, includeHeaders = false, exclude = []) {\n return this.getFilteredDataCol(\n colIndex, includeHeaders, false, exclude, false);\n }\n\n /**\n * Return the filtered and visible values for a given column index\n * @param {any} colIndex Colmun's index\n * @param {boolean} [includeHeaders=false] Optional Include headers row\n * @param {any} [exclude=[]] Optional List of row indexes to be excluded\n * @return {Array} Flat list of values ['value0', 'value1', 'value2'...]\n *\n * TODO: provide an API returning data in JSON format\n */\n getVisibleColumnValues(colIndex, includeHeaders = false, exclude = []) {\n return this.getFilteredDataCol(\n colIndex, includeHeaders, false, exclude, true);\n }\n\n /**\n * Return the filtered data for a given column index\n * @param {Number} colIndex Colmun's index\n * @param {Boolean} [includeHeaders=false] Include headers row\n * @param {Boolean} [typed=false] Return typed value\n * @param {Array} [exclude=[]] List of row indexes to be excluded\n * @param {Boolean} [visible=true] Return only filtered and visible data\n * (relevant for paging)\n * @return {Array} Flat list of values ['val0','val1','val2'...]\n * @private\n *\n * TODO: provide an API returning data in JSON format\n */\n getFilteredDataCol(\n colIndex,\n includeHeaders = false,\n typed = false,\n exclude = [],\n visible = true\n ) {\n if (isUndef(colIndex)) {\n return [];\n }\n\n let rows = this.dom().rows;\n let getContent = typed ? this.getCellData.bind(this) :\n this.getCellValue.bind(this);\n\n // ensure valid rows index do not contain excluded rows and row is\n // displayed\n let validRows = this.getValidRows(true).filter((rowIdx) => {\n return exclude.indexOf(rowIdx) === -1 &&\n (visible ?\n this.getRowDisplay(rows[rowIdx]) !== 'none' :\n true);\n });\n\n // convert column value to expected type if necessary\n let validColValues = validRows.map((rowIdx) => {\n return getContent(rows[rowIdx].cells[colIndex]);\n });\n\n if (includeHeaders) {\n validColValues.unshift(this.getHeadersText()[colIndex]);\n }\n\n return validColValues;\n }\n\n /**\n * Get the display value of a row\n * @param {HTMLTableRowElement} row DOM element of the row\n * @return {String} Usually 'none' or ''\n */\n getRowDisplay(row) {\n return row.style.display;\n }\n\n /**\n * Validate/invalidate row by setting the 'validRow' attribute on the row\n * @param {Number} rowIndex Index of the row\n * @param {Boolean} isValid\n */\n validateRow(rowIndex, isValid) {\n let row = this.dom().rows[rowIndex];\n if (!row || !isBoolean(isValid)) {\n return;\n }\n\n // always visible rows are valid\n if (this.excludeRows.indexOf(rowIndex) !== -1) {\n isValid = true;\n }\n\n let displayFlag = isValid ? '' : NONE,\n validFlag = isValid ? 'true' : 'false';\n row.style.display = displayFlag;\n\n if (this.paging) {\n row.setAttribute('validRow', validFlag);\n }\n\n if (isValid) {\n if (this.validRowsIndex.indexOf(rowIndex) === -1) {\n this.validRowsIndex.push(rowIndex);\n }\n\n this.onRowValidated(this, rowIndex);\n this.emitter.emit('row-validated', this, rowIndex);\n }\n }\n\n /**\n * Validate all filterable rows\n */\n validateAllRows() {\n if (!this.initialized) {\n return;\n }\n this.validRowsIndex = [];\n for (let k = this.refRow; k < this.nbFilterableRows; k++) {\n this.validateRow(k, true);\n }\n }\n\n /**\n * Set search value to a given filter\n * @param {Number} index Column's index\n * @param {String or Array} query searcharg Search term\n */\n setFilterValue(index, query = '') {\n if (!this.fltGrid) {\n return;\n }\n let slc = this.getFilterElement(index),\n fltColType = this.getFilterType(index);\n\n if (!slc) {\n return;\n }\n\n if (fltColType !== MULTIPLE && fltColType !== CHECKLIST) {\n if (this.loadFltOnDemand && !this.initialized) {\n this.emitter.emit('build-select-filter', this, index,\n this.linkedFilters, this.isExternalFlt());\n }\n slc.value = query;\n }\n //multiple selects\n else if (fltColType === MULTIPLE) {\n let values = isArray(query) ? query :\n query.split(' ' + this.orOperator + ' ');\n\n if (this.loadFltOnDemand && !this.initialized) {\n this.emitter.emit('build-select-filter', this, index,\n this.linkedFilters, this.isExternalFlt());\n }\n\n this.emitter.emit('select-options', this, index, values);\n }\n //checklist\n else if (fltColType === CHECKLIST) {\n let values = [];\n if (this.loadFltOnDemand && !this.initialized) {\n this.emitter.emit('build-checklist-filter', this, index,\n this.linkedFilters);\n }\n if (isArray(query)) {\n values = query;\n } else {\n query = matchCase(query, this.caseSensitive);\n values = query.split(' ' + this.orOperator + ' ');\n }\n\n this.emitter.emit('select-checklist-options', this, index, values);\n }\n }\n\n /**\n * Make passed or default working table element width fixed\n * @param {TableElement} tbl optional table DOM element\n */\n setFixedLayout(tbl = this.dom()) {\n let colWidths = this.colWidths;\n let tableWidth = tbl.clientWidth;\n\n if (colWidths.length > 0) {\n let defaultWidth = this.defaultColWidth;\n tableWidth = colWidths\n .reduce((x, y) =>\n parseInt((x || defaultWidth), 10) +\n parseInt((y || defaultWidth), 10)\n );\n }\n\n tbl.style.width = `${tableWidth}px`;\n tbl.style.tableLayout = 'fixed';\n }\n\n /**\n * Set passed or default working table columns' widths with configuration\n * values\n * @param {TableElement} tbl optional table DOM element\n */\n setColWidths(tbl = this.dom()) {\n let colWidths = this.colWidths;\n if (colWidths.length === 0) {\n return;\n }\n\n let colTags = tag(tbl, 'col');\n let tblHasColTag = colTags.length > 0;\n let frag = !tblHasColTag ? doc.createDocumentFragment() : null;\n\n this.eachCol((k) => {\n let col;\n if (tblHasColTag) {\n col = colTags[k];\n } else {\n col = createElm('col');\n frag.appendChild(col);\n }\n col.style.width = colWidths[k];\n });\n\n if (!tblHasColTag) {\n tbl.insertBefore(frag, tbl.firstChild);\n }\n }\n\n /**\n * Exclude rows from actions\n */\n setExcludeRows() {\n if (!this.hasExcludedRows) {\n return;\n }\n this.excludeRows.forEach((rowIdx) => this.validateRow(rowIdx, true));\n }\n\n /**\n * Clear all the filters' values\n */\n clearFilters() {\n if (!this.fltGrid) {\n return;\n }\n\n this.emitter.emit('before-clearing-filters', this);\n this.onBeforeReset(this, this.getFiltersValue());\n\n for (let i = 0, len = this.fltIds.length; i < len; i++) {\n this.setFilterValue(i, '');\n }\n\n this.filter();\n\n this.onAfterReset(this);\n this.emitter.emit('after-clearing-filters', this);\n }\n\n /**\n * Return the ID of the current active filter\n * @return {String}\n */\n getActiveFilterId() {\n return this.activeFilterId;\n }\n\n /**\n * Set the ID of the current active filter\n * @param {String} filterId Element ID\n */\n setActiveFilterId(filterId) {\n this.activeFilterId = filterId;\n }\n\n /**\n * Return the column index for a given filter ID\n * @param {string} [filterId=''] Filter ID\n * @return {Number} Column index\n */\n getColumnIndexFromFilterId(filterId = '') {\n let idx = filterId.split('_')[0];\n idx = idx.split(this.prfxFlt)[1];\n return parseInt(idx, 10);\n }\n\n /**\n * Build filter element ID for a given column index\n * @param {any} colIndex\n * @return {String} Filter element ID string\n * @private\n */\n buildFilterId(colIndex) {\n return `${this.prfxFlt}${colIndex}_${this.id}`;\n }\n\n /**\n * Check if has external filters\n * @returns {Boolean}\n * @private\n */\n isExternalFlt() {\n return this.externalFltIds.length > 0;\n }\n\n /**\n * Returns styles path\n * @returns {String}\n * @private\n */\n getStylePath() {\n return defaultsStr(this.config.style_path, this.basePath + 'style/');\n }\n\n /**\n * Returns main stylesheet path\n * @returns {String}\n * @private\n */\n getStylesheetPath() {\n return defaultsStr(this.config.stylesheet,\n this.getStylePath() + 'tablefilter.css');\n }\n\n /**\n * Returns themes path\n * @returns {String}\n * @private\n */\n getThemesPath() {\n return defaultsStr(this.config.themes_path,\n this.getStylePath() + 'themes/');\n }\n\n /**\n * Make specified column's filter active\n * @param colIndex Index of a column\n */\n activateFilter(colIndex) {\n if (isUndef(colIndex)) {\n return;\n }\n this.setActiveFilterId(this.getFilterId(colIndex));\n }\n\n /**\n * Refresh the filters subject to linking ('select', 'multiple',\n * 'checklist' type)\n */\n linkFilters() {\n if (!this.linkedFilters || !this.activeFilterId) {\n return;\n }\n let slcA1 = this.getFiltersByType(SELECT, true),\n slcA2 = this.getFiltersByType(MULTIPLE, true),\n slcA3 = this.getFiltersByType(CHECKLIST, true),\n slcIndex = slcA1.concat(slcA2);\n slcIndex = slcIndex.concat(slcA3);\n\n slcIndex.forEach((colIdx) => {\n let curSlc = this.getFilterElement(colIdx);\n let slcSelectedValue = this.getFilterValue(colIdx);\n\n //1st option needs to be inserted\n if (this.loadFltOnDemand) {\n let opt0 = createOpt(this.getClearFilterText(colIdx), '');\n curSlc.innerHTML = '';\n curSlc.appendChild(opt0);\n }\n\n if (slcA3.indexOf(colIdx) !== -1) {\n this.emitter.emit('build-checklist-filter', this, colIdx,\n true);\n } else {\n this.emitter.emit('build-select-filter', this, colIdx,\n true);\n }\n\n this.setFilterValue(colIdx, slcSelectedValue);\n });\n }\n\n /**\n * Determine if passed filter column implements exact query match\n * @param {Number} colIndex Column index\n * @return {Boolean}\n */\n isExactMatch(colIndex) {\n let fltType = this.getFilterType(colIndex);\n return this.exactMatchByCol[colIndex] || this.exactMatch ||\n fltType !== INPUT;\n }\n\n /**\n * Check if passed row is valid\n * @param {Number} rowIndex Row index\n * @return {Boolean}\n */\n isRowValid(rowIndex) {\n return this.getValidRows().indexOf(rowIndex) !== -1;\n }\n\n /**\n * Check if passed row is visible\n * @param {Number} rowIndex Row index\n * @return {Boolean}\n */\n isRowDisplayed(rowIndex) {\n let row = this.dom().rows[rowIndex];\n return this.getRowDisplay(row) === '';\n }\n\n /**\n * Check if specified column filter ignores diacritics.\n * Note this is only applicable to input filter types.\n * @param {Number} colIndex Column index\n * @return {Boolean}\n */\n ignoresDiacritics(colIndex) {\n let ignoreDiac = this.ignoreDiacritics;\n if (isArray(ignoreDiac)) {\n return ignoreDiac[colIndex];\n }\n return Boolean(ignoreDiac);\n }\n\n /**\n * Return clear all text for specified filter column\n * @param {Number} colIndex Column index\n * @return {String}\n */\n getClearFilterText(colIndex) {\n let clearText = this.clearFilterText;\n if (isArray(clearText)) {\n return clearText[colIndex];\n }\n return clearText;\n }\n\n /**\n * Column iterator invoking continue and break condition callbacks if any\n * then calling supplied callback for each item\n * @param {Function} [fn=EMPTY_FN] callback\n * @param {Function} [continueFn=EMPTY_FN] continue condition callback\n * @param {Function} [breakFn=EMPTY_FN] break condition callback\n */\n eachCol(fn = EMPTY_FN, continueFn = EMPTY_FN, breakFn = EMPTY_FN) {\n let len = this.getCellsNb(this.refRow);\n for (let i = 0; i < len; i++) {\n if (continueFn(i) === true) {\n continue;\n }\n if (breakFn(i) === true) {\n break;\n }\n fn(i);\n }\n }\n\n /**\n * Rows iterator starting from supplied row index or defaulting to reference\n * row index. Closure function accepts a callback function and optional\n * continue and break callbacks.\n * @param {Number} startIdx Row index from which filtering starts\n */\n eachRow(startIdx = this.refRow) {\n return (fn = EMPTY_FN, continueFn = EMPTY_FN, breakFn = EMPTY_FN) => {\n let rows = this.dom().rows;\n let len = this.getRowsNb(true);\n for (let i = startIdx; i < len; i++) {\n if (continueFn(rows[i], i) === true) {\n continue;\n }\n if (breakFn(rows[i], i) === true) {\n break;\n }\n fn(rows[i], i);\n }\n };\n }\n\n /**\n * Check if passed script or stylesheet is already imported\n * @param {String} filePath Ressource path\n * @param {String} type Possible values: 'script' or 'link'\n * @return {Boolean}\n */\n isImported(filePath, type = 'script') {\n let imported = false,\n attr = type === 'script' ? 'src' : 'href',\n files = tag(doc, type);\n for (let i = 0, len = files.length; i < len; i++) {\n if (isUndef(files[i][attr])) {\n continue;\n }\n if (files[i][attr].match(filePath)) {\n imported = true;\n break;\n }\n }\n return imported;\n }\n\n /**\n * Import script or stylesheet\n * @param {String} fileId Ressource ID\n * @param {String} filePath Ressource path\n * @param {Function} callback Callback\n * @param {String} type Possible values: 'script' or 'link'\n */\n import(fileId, filePath, callback, type = 'script') {\n if (this.isImported(filePath, type)) {\n return;\n }\n let o = this,\n isLoaded = false,\n file,\n head = tag(doc, 'head')[0];\n\n if (type.toLowerCase() === 'link') {\n file = createElm('link',\n ['id', fileId], ['type', 'text/css'],\n ['rel', 'stylesheet'], ['href', filePath]\n );\n } else {\n file = createElm('script',\n ['id', fileId],\n ['type', 'text/javascript'], ['src', filePath]\n );\n }\n\n //Browser <> IE onload event works only for scripts, not for stylesheets\n file.onload = file.onreadystatechange = () => {\n if (!isLoaded &&\n (!this.readyState || this.readyState === 'loaded' ||\n this.readyState === 'complete')) {\n isLoaded = true;\n if (typeof callback === 'function') {\n callback.call(null, o);\n }\n }\n };\n file.onerror = () => {\n throw new Error(`TableFilter could not load: ${filePath}`);\n };\n head.appendChild(file);\n }\n\n /**\n * Check if table has filters grid\n * @return {Boolean}\n */\n isInitialized() {\n return this.initialized;\n }\n\n /**\n * Get list of filter IDs\n * @return {Array} List of filters ids\n */\n getFiltersId() {\n return this.fltIds || [];\n }\n\n /**\n * Get filtered (valid) rows indexes\n * @param {Boolean} reCalc Force calculation of filtered rows list\n * @return {Array} List of row indexes\n */\n getValidRows(reCalc) {\n if (!reCalc) {\n return this.validRowsIndex;\n }\n\n this.validRowsIndex = [];\n\n let eachRow = this.eachRow();\n eachRow((row) => {\n if (!this.paging) {\n if (this.getRowDisplay(row) !== NONE) {\n this.validRowsIndex.push(row.rowIndex);\n }\n } else {\n if (row.getAttribute('validRow') === 'true' ||\n row.getAttribute('validRow') === null) {\n this.validRowsIndex.push(row.rowIndex);\n }\n }\n });\n return this.validRowsIndex;\n }\n\n /**\n * Get the index of the row containing the filters\n * @return {Number}\n */\n getFiltersRowIndex() {\n return this.filtersRowIndex;\n }\n\n /**\n * Get the index of the headers row\n * @return {Number}\n */\n getHeadersRowIndex() {\n return this.headersRow;\n }\n\n /**\n * Get the row index from where the filtering process start (1st filterable\n * row)\n * @return {Number}\n */\n getStartRowIndex() {\n return this.refRow;\n }\n\n /**\n * Get the index of the last row\n * @return {Number}\n */\n getLastRowIndex() {\n let nbRows = this.getRowsNb(true);\n return (nbRows - 1);\n }\n\n /**\n * Determine whether the specified column has one of the passed types\n * @param {Number} colIndex Column index\n * @param {Array} [types=[]] List of column types\n * @return {Boolean}\n */\n hasType(colIndex, types = []) {\n if (this.colTypes.length === 0) {\n return false;\n }\n let colType = this.colTypes[colIndex];\n if (isObj(colType)) {\n colType = colType.type;\n }\n return types.indexOf(colType) !== -1;\n }\n\n /**\n * Get the header DOM element for a given column index\n * @param {Number} colIndex Column index\n * @return {Element}\n */\n getHeaderElement(colIndex) {\n let table = this.gridLayout ? this.Mod.gridLayout.headTbl : this.dom();\n let tHead = tag(table, 'thead');\n let rowIdx = this.getHeadersRowIndex();\n let header;\n if (tHead.length === 0) {\n header = table.rows[rowIdx].cells[colIndex];\n }\n if (tHead.length === 1) {\n header = tHead[0].rows[rowIdx].cells[colIndex];\n }\n return header;\n }\n\n /**\n * Return the list of headers' text\n * @param {Boolean} excludeHiddenCols Optional: exclude hidden columns\n * @return {Array} list of headers' text\n */\n getHeadersText(excludeHiddenCols = false) {\n let headers = [];\n this.eachCol(\n (j) => {\n let header = this.getHeaderElement(j);\n let headerText = getFirstTextNode(header);\n headers.push(headerText);\n },\n // continue condition function\n (j) => {\n if (excludeHiddenCols && this.hasExtension('colsVisibility')) {\n return this.extension('colsVisibility').isColHidden(j);\n }\n return false;\n }\n );\n return headers;\n }\n\n /**\n * Return the filter type for a specified column\n * @param {Number} colIndex Column's index\n * @return {String}\n */\n getFilterType(colIndex) {\n return this.filterTypes[colIndex];\n }\n\n /**\n * Get the total number of filterable rows\n * @return {Number}\n */\n getFilterableRowsNb() {\n return this.getRowsNb(false);\n }\n\n /**\n * Return the total number of valid rows\n * @param {Boolean} [reCalc=false] Forces calculation of filtered rows\n * @return {Number}\n */\n getValidRowsNb(reCalc = false) {\n return this.getValidRows(reCalc).length;\n }\n\n /**\n * Return the working DOM element\n * @return {HTMLTableElement}\n */\n dom() {\n return this.tbl;\n }\n\n /**\n * Return the decimal separator for supplied column as per column type\n * configuration or global setting\n * @param {Number} colIndex Column index\n * @returns {String} '.' or ','\n */\n getDecimal(colIndex) {\n let decimal = this.decimalSeparator;\n if (this.hasType(colIndex, [FORMATTED_NUMBER])) {\n let colType = this.colTypes[colIndex];\n if (colType.hasOwnProperty('decimal')) {\n decimal = colType.decimal;\n }\n }\n return decimal;\n }\n\n /**\n * Get the configuration object (literal object)\n * @return {Object}\n */\n config() {\n return this.cfg;\n }\n}\n","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Traditional Chinese locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('zh-TW')\n *\n */\naddLocale('zh-TW', {\n 'ampmFront': true,\n 'numeralUnits': true,\n 'allowsFullWidth': true,\n 'timeMarkerOptional': true,\n 'units': '毫秒,秒鐘,分鐘,小時,天,個星期|週,個月,年',\n 'weekdays': '星期日|日|週日|星期天,星期一|一|週一,星期二|二|週二,星期三|三|週三,星期四|四|週四,星期五|五|週五,星期六|六|週六',\n 'numerals': '〇,一,二,三,四,五,六,七,八,九',\n 'placeholders': '十,百,千,万',\n 'short': '{yyyy}/{MM}/{dd}',\n 'medium': '{yyyy}年{M}月{d}日',\n 'long': '{yyyy}年{M}月{d}日{time}',\n 'full': '{yyyy}年{M}月{d}日{weekday}{time}',\n 'stamp': '{yyyy}年{M}月{d}日{H}:{mm}{dow}',\n 'time': '{tt}{h}點{mm}分',\n 'past': '{num}{unit}{sign}',\n 'future': '{num}{unit}{sign}',\n 'duration': '{num}{unit}',\n 'timeSuffixes': ',秒,分鐘?,點|時,日|號,,月,年',\n 'ampm': '上午,下午',\n 'modifiers': [\n { 'name': 'day', 'src': '大前天', 'value': -3 },\n { 'name': 'day', 'src': '前天', 'value': -2 },\n { 'name': 'day', 'src': '昨天', 'value': -1 },\n { 'name': 'day', 'src': '今天', 'value': 0 },\n { 'name': 'day', 'src': '明天', 'value': 1 },\n { 'name': 'day', 'src': '後天', 'value': 2 },\n { 'name': 'day', 'src': '大後天', 'value': 3 },\n { 'name': 'sign', 'src': '前', 'value': -1 },\n { 'name': 'sign', 'src': '後', 'value': 1 },\n { 'name': 'shift', 'src': '上|去', 'value': -1 },\n { 'name': 'shift', 'src': '這', 'value': 0 },\n { 'name': 'shift', 'src': '下|明', 'value': 1 }\n ],\n 'parse': [\n '{num}{unit}{sign}',\n '{shift}{unit:5-7}',\n '{year?}{month}',\n '{year}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift}{weekday}',\n '{year?}{month?}{date}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"zh-TW\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Simplified Chinese locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('zh-CN')\n *\n */\naddLocale('zh-CN', {\n 'ampmFront': true,\n 'numeralUnits': true,\n 'allowsFullWidth': true,\n 'timeMarkerOptional': true,\n 'units': '毫秒,秒钟,分钟,小时,天,个星期|周,个月,年',\n 'weekdays': '星期日|日|周日|星期天,星期一|一|周一,星期二|二|周二,星期三|三|周三,星期四|四|周四,星期五|五|周五,星期六|六|周六',\n 'numerals': '〇,一,二,三,四,五,六,七,八,九',\n 'placeholders': '十,百,千,万',\n 'short': '{yyyy}-{MM}-{dd}',\n 'medium': '{yyyy}年{M}月{d}日',\n 'long': '{yyyy}年{M}月{d}日{time}',\n 'full': '{yyyy}年{M}月{d}日{weekday}{time}',\n 'stamp': '{yyyy}年{M}月{d}日{H}:{mm}{dow}',\n 'time': '{tt}{h}点{mm}分',\n 'past': '{num}{unit}{sign}',\n 'future': '{num}{unit}{sign}',\n 'duration': '{num}{unit}',\n 'timeSuffixes': ',秒,分钟?,点|时,日|号,,月,年',\n 'ampm': '上午,下午',\n 'modifiers': [\n { 'name': 'day', 'src': '大前天', 'value': -3 },\n { 'name': 'day', 'src': '前天', 'value': -2 },\n { 'name': 'day', 'src': '昨天', 'value': -1 },\n { 'name': 'day', 'src': '今天', 'value': 0 },\n { 'name': 'day', 'src': '明天', 'value': 1 },\n { 'name': 'day', 'src': '后天', 'value': 2 },\n { 'name': 'day', 'src': '大后天', 'value': 3 },\n { 'name': 'sign', 'src': '前', 'value': -1 },\n { 'name': 'sign', 'src': '后', 'value': 1 },\n { 'name': 'shift', 'src': '上|去', 'value': -1 },\n { 'name': 'shift', 'src': '这', 'value': 0 },\n { 'name': 'shift', 'src': '下|明', 'value': 1 }\n ],\n 'parse': [\n '{num}{unit}{sign}',\n '{shift}{unit:5-7}',\n '{year?}{month}',\n '{year}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift}{weekday}',\n '{year?}{month?}{date}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"zh-CN\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Swedish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('sv')\n *\n */\naddLocale('sv', {\n 'plural': true,\n 'units': 'millisekund:|er,sekund:|er,minut:|er,timm:e|ar,dag:|ar,veck:a|or|an,månad:|er|en+manad:|er|en,år:||et+ar:||et',\n 'months': 'jan:uari|,feb:ruari|,mar:s|,apr:il|,maj,jun:i|,jul:i|,aug:usti|,sep:tember|,okt:ober|,nov:ember|,dec:ember|',\n 'weekdays': 'sön:dag|+son:dag|,mån:dag||dagen+man:dag||dagen,tis:dag|,ons:dag|,tor:sdag|,fre:dag|,lör:dag||dag',\n 'numerals': 'noll,en|ett,två|tva,tre,fyra,fem,sex,sju,åtta|atta,nio,tio',\n 'tokens': 'den,för|for',\n 'articles': 'den',\n 'short': '{yyyy}-{MM}-{dd}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full': '{weekday} {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'förrgår|i förrgår|iförrgår|forrgar|i forrgar|iforrgar', 'value': -2 },\n { 'name': 'day', 'src': 'går|i går|igår|gar|i gar|igar', 'value': -1 },\n { 'name': 'day', 'src': 'dag|i dag|idag', 'value': 0 },\n { 'name': 'day', 'src': 'morgon|i morgon|imorgon', 'value': 1 },\n { 'name': 'day', 'src': 'över morgon|övermorgon|i över morgon|i övermorgon|iövermorgon|over morgon|overmorgon|i over morgon|i overmorgon|iovermorgon', 'value': 2 },\n { 'name': 'sign', 'src': 'sedan|sen', 'value': -1 },\n { 'name': 'sign', 'src': 'om', 'value': 1 },\n { 'name': 'shift', 'src': 'i förra|förra|i forra|forra', 'value': -1 },\n { 'name': 'shift', 'src': 'denna', 'value': 0 },\n { 'name': 'shift', 'src': 'nästa|nasta', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{1?} {num} {unit} {sign}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift} {weekday}',\n '{0?} {weekday?},? {date} {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{day|weekday}',\n '{shift} {weekday}',\n '{0?} {weekday?},? {date} {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"sv\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Russian locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('ru')\n *\n */\naddLocale('ru', {\n 'firstDayOfWeekYear': 1,\n 'units': 'миллисекунд:а|у|ы|,секунд:а|у|ы|,минут:а|у|ы|,час:||а|ов,день|день|дня|дней,недел:я|ю|и|ь|е,месяц:||а|ев|е,год|год|года|лет|году',\n 'months': 'янв:аря||.|арь,фев:раля||р.|раль,мар:та||т,апр:еля||.|ель,мая|май,июн:я||ь,июл:я||ь,авг:уста||.|уст,сен:тября||т.|тябрь,окт:ября||.|ябрь,ноя:бря||брь,дек:абря||.|абрь',\n 'weekdays': 'воскресенье|вс,понедельник|пн,вторник|вт,среда|ср,четверг|чт,пятница|пт,суббота|сб',\n 'numerals': 'ноль,од:ин|ну,дв:а|е,три,четыре,пять,шесть,семь,восемь,девять,десять',\n 'tokens': 'в|на,г\\\\.?(?:ода)?',\n 'short': '{dd}.{MM}.{yyyy}',\n 'medium': '{d} {month} {yyyy} г.',\n 'long': '{d} {month} {yyyy} г., {time}',\n 'full': '{weekday}, {d} {month} {yyyy} г., {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'timeMarkers': 'в',\n 'ampm': ' утра, вечера',\n 'modifiers': [\n { 'name': 'day', 'src': 'позавчера', 'value': -2 },\n { 'name': 'day', 'src': 'вчера', 'value': -1 },\n { 'name': 'day', 'src': 'сегодня', 'value': 0 },\n { 'name': 'day', 'src': 'завтра', 'value': 1 },\n { 'name': 'day', 'src': 'послезавтра', 'value': 2 },\n { 'name': 'sign', 'src': 'назад', 'value': -1 },\n { 'name': 'sign', 'src': 'через', 'value': 1 },\n { 'name': 'shift', 'src': 'прошл:ый|ой|ом', 'value': -1 },\n { 'name': 'shift', 'src': 'следующ:ий|ей|ем', 'value': 1 }\n ],\n 'relative': function(num, unit, ms, format) {\n var numberWithUnit, last = num.toString().slice(-1), mult;\n switch(true) {\n case num >= 11 && num <= 15: mult = 3; break;\n case last == 1: mult = 1; break;\n case last >= 2 && last <= 4: mult = 2; break;\n default: mult = 3;\n }\n numberWithUnit = num + ' ' + this['units'][(mult * 8) + unit];\n switch(format) {\n case 'duration': return numberWithUnit;\n case 'past': return numberWithUnit + ' назад';\n case 'future': return 'через ' + numberWithUnit;\n }\n },\n 'parse': [\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{months} {year?}',\n '{0?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{0?} {shift} {weekday}',\n '{date} {months?} {year?} {1?}'\n ],\n 'timeFrontParse': [\n '{0?} {shift} {weekday}',\n '{date} {months?} {year?} {1?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"ru\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Portuguese locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('pt')\n *\n */\naddLocale('pt', {\n 'plural': true,\n 'units': 'milisegundo:|s,segundo:|s,minuto:|s,hora:|s,dia:|s,semana:|s,mês|mêses|mes|meses,ano:|s',\n 'months': 'jan:eiro|,fev:ereiro|,mar:ço|,abr:il|,mai:o|,jun:ho|,jul:ho|,ago:sto|,set:embro|,out:ubro|,nov:embro|,dez:embro|',\n 'weekdays': 'dom:ingo|,seg:unda-feira|,ter:ça-feira|,qua:rta-feira|,qui:nta-feira|,sex:ta-feira|,sáb:ado||ado',\n 'numerals': 'zero,um:|a,dois|duas,três|tres,quatro,cinco,seis,sete,oito,nove,dez',\n 'tokens': 'a,de',\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} de {Month} de {yyyy}',\n 'long': '{d} de {Month} de {yyyy} {time}',\n 'full': '{Weekday}, {d} de {Month} de {yyyy} {time}',\n 'stamp': '{Dow} {d} {Mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'às',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'anteontem', 'value': -2 },\n { 'name': 'day', 'src': 'ontem', 'value': -1 },\n { 'name': 'day', 'src': 'hoje', 'value': 0 },\n { 'name': 'day', 'src': 'amanh:ã|a', 'value': 1 },\n { 'name': 'sign', 'src': 'atrás|atras|há|ha', 'value': -1 },\n { 'name': 'sign', 'src': 'daqui a', 'value': 1 },\n { 'name': 'shift', 'src': 'passad:o|a', 'value': -1 },\n { 'name': 'shift', 'src': 'próximo|próxima|proximo|proxima', 'value': 1 }\n ],\n 'parse': [\n '{months} {1?} {year?}',\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{0?} {unit:5-7} {shift}',\n '{0?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{0?} {shift} {weekday}',\n '{date} {1?} {months?} {1?} {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {day|weekday}',\n '{date} {1?} {months?} {1?} {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"pt\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Polish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('pl')\n *\n */\naddLocale('pl', {\n 'plural': true,\n 'units': 'milisekund:a|y|,sekund:a|y|,minut:a|y|,godzin:a|y|,dzień|dni|dni,tydzień|tygodnie|tygodni,miesiąc|miesiące|miesięcy,rok|lata|lat',\n 'months': 'sty:cznia||czeń,lut:ego||y,mar:ca||zec,kwi:etnia||ecień,maj:a|,cze:rwca||rwiec,lip:ca||iec,sie:rpnia||rpień,wrz:eśnia||esień,paź:dziernika||dziernik,lis:topada||topad,gru:dnia||dzień',\n 'weekdays': 'nie:dziela||dzielę,pon:iedziałek|,wt:orek|,śr:oda||odę,czw:artek|,piątek|pt,sobota|sb|sobotę',\n 'numerals': 'zero,jeden|jedną,dwa|dwie,trzy,cztery,pięć,sześć,siedem,osiem,dziewięć,dziesięć',\n 'tokens': 'w|we,roku',\n 'short': '{dd}.{MM}.{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full' : '{weekday}, {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'timeMarkers': 'o',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'przedwczoraj', 'value': -2 },\n { 'name': 'day', 'src': 'wczoraj', 'value': -1 },\n { 'name': 'day', 'src': 'dzisiaj|dziś', 'value': 0 },\n { 'name': 'day', 'src': 'jutro', 'value': 1 },\n { 'name': 'day', 'src': 'pojutrze', 'value': 2 },\n { 'name': 'sign', 'src': 'temu|przed', 'value': -1 },\n { 'name': 'sign', 'src': 'za', 'value': 1 },\n { 'name': 'shift', 'src': 'zeszły|zeszła|ostatni|ostatnia', 'value': -1 },\n { 'name': 'shift', 'src': 'następny|następna|następnego|przyszły|przyszła|przyszłego', 'value': 1 }\n ],\n 'relative': function (num, unit, ms, format) {\n // special cases for relative days\n var DAY = 4;\n if (unit === DAY) {\n if (num === 1 && format === 'past') return 'wczoraj';\n if (num === 1 && format === 'future') return 'jutro';\n if (num === 2 && format === 'past') return 'przedwczoraj';\n if (num === 2 && format === 'future') return 'pojutrze';\n }\n\n var mult;\n var last = +num.toFixed(0).slice(-1);\n var last2 = +num.toFixed(0).slice(-2);\n switch (true) {\n case num === 1: mult = 0; break;\n case last2 >= 12 && last2 <= 14: mult = 2; break;\n case last >= 2 && last <= 4: mult = 1; break;\n default: mult = 2;\n }\n var text = this['units'][(mult * 8) + unit];\n var prefix = num + ' ';\n\n // changing to accusative case for 'past' and 'future' formats\n // (only singular feminine unit words are different in accusative, each of which ends with 'a')\n if ((format === 'past' || format === 'future') && num === 1) {\n text = text.replace(/a$/, 'ę');\n }\n\n text = prefix + text;\n switch (format) {\n case 'duration': return text;\n case 'past': return text + ' temu';\n case 'future': return 'za ' + text;\n }\n },\n 'parse': [\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{months} {year?}',\n '{shift} {unit:5-7}',\n '{0} {shift?} {weekday}'\n ],\n 'timeFrontParse': [\n '{day|weekday}',\n '{date} {months} {year?} {1?}',\n '{0?} {shift?} {weekday}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"pl\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Norwegian locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('no')\n *\n */\naddLocale('no', {\n 'plural': true,\n 'units': 'millisekund:|er,sekund:|er,minutt:|er,tim:e|er,dag:|er,uk:e|er|en,måned:|er|en+maaned:|er|en,år:||et+aar:||et',\n 'months': 'januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember',\n 'weekdays': 'søndag|sondag,mandag,tirsdag,onsdag,torsdag,fredag,lørdag|lordag',\n 'numerals': 'en|et,to,tre,fire,fem,seks,sju|syv,åtte,ni,ti',\n 'tokens': 'den,for',\n 'articles': 'den',\n 'short':'d. {d}. {month} {yyyy}',\n 'long': 'den {d}. {month} {yyyy} {H}:{mm}',\n 'full': '{Weekday} den {d}. {month} {yyyy} {H}:{mm}:{ss}',\n 'past': '{num} {unit} {sign}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'forgårs|i forgårs|forgaars|i forgaars', 'value': -2 },\n { 'name': 'day', 'src': 'i går|igår|i gaar|igaar', 'value': -1 },\n { 'name': 'day', 'src': 'i dag|idag', 'value': 0 },\n { 'name': 'day', 'src': 'i morgen|imorgen', 'value': 1 },\n { 'name': 'day', 'src': 'overimorgen|overmorgen|over i morgen', 'value': 2 },\n { 'name': 'sign', 'src': 'siden', 'value': -1 },\n { 'name': 'sign', 'src': 'om', 'value': 1 },\n { 'name': 'shift', 'src': 'i siste|siste', 'value': -1 },\n { 'name': 'shift', 'src': 'denne', 'value': 0 },\n { 'name': 'shift', 'src': 'neste', 'value': 1 }\n ],\n 'parse': [\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{1?} {num} {unit} {sign}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{date} {month}',\n '{shift} {weekday}',\n '{0?} {weekday?},? {date?} {month}\\\\.? {year}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"no\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Dutch locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('nl')\n *\n */\naddLocale('nl', {\n 'plural': true,\n 'units': 'milliseconde:|n,seconde:|n,minu:ut|ten,uur,dag:|en,we:ek|ken,maand:|en,jaar',\n 'months': 'jan:uari|,feb:ruari|,maart|mrt,apr:il|,mei,jun:i|,jul:i|,aug:ustus|,sep:tember|,okt:ober|,nov:ember|,dec:ember|',\n 'weekdays': 'zondag|zo,maandag|ma,dinsdag|di,woensdag|wo|woe,donderdag|do,vrijdag|vr|vrij,zaterdag|za',\n 'numerals': 'nul,een,twee,drie,vier,vijf,zes,zeven,acht,negen,tien',\n 'short': '{dd}-{MM}-{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {Month} {yyyy} {time}',\n 'full': '{weekday} {d} {Month} {yyyy} {time}',\n 'stamp': '{dow} {d} {Mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{num} {unit} {sign}',\n 'duration': '{num} {unit}',\n 'timeMarkers': \"'s,om\",\n 'modifiers': [\n { 'name': 'day', 'src': 'gisteren', 'value': -1 },\n { 'name': 'day', 'src': 'vandaag', 'value': 0 },\n { 'name': 'day', 'src': 'morgen', 'value': 1 },\n { 'name': 'day', 'src': 'overmorgen', 'value': 2 },\n { 'name': 'sign', 'src': 'geleden', 'value': -1 },\n { 'name': 'sign', 'src': 'vanaf nu', 'value': 1 },\n { 'name': 'shift', 'src': 'laatste|vorige|afgelopen', 'value': -1 },\n { 'name': 'shift', 'src': 'volgend:|e', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{num} {unit} {sign}',\n '{0?} {unit:5-7} {shift}',\n '{0?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date} {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date} {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"nl\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Korean locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('ko')\n *\n */\naddLocale('ko', {\n 'ampmFront': true,\n 'numeralUnits': true,\n 'units': '밀리초,초,분,시간,일,주,개월|달,년|해',\n 'weekdays': '일:요일|,월:요일|,화:요일|,수:요일|,목:요일|,금:요일|,토:요일|',\n 'numerals': '영|제로,일|한,이,삼,사,오,육,칠,팔,구,십',\n 'short': '{yyyy}.{MM}.{dd}',\n 'medium': '{yyyy}년 {M}월 {d}일',\n 'long': '{yyyy}년 {M}월 {d}일 {time}',\n 'full': '{yyyy}년 {M}월 {d}일 {weekday} {time}',\n 'stamp': '{yyyy}년 {M}월 {d}일 {H}:{mm} {dow}',\n 'time': '{tt} {h}시 {mm}분',\n 'past': '{num}{unit} {sign}',\n 'future': '{num}{unit} {sign}',\n 'duration': '{num}{unit}',\n 'timeSuffixes': ',초,분,시,일,,월,년',\n 'ampm': '오전,오후',\n 'modifiers': [\n { 'name': 'day', 'src': '그저께', 'value': -2 },\n { 'name': 'day', 'src': '어제', 'value': -1 },\n { 'name': 'day', 'src': '오늘', 'value': 0 },\n { 'name': 'day', 'src': '내일', 'value': 1 },\n { 'name': 'day', 'src': '모레', 'value': 2 },\n { 'name': 'sign', 'src': '전', 'value': -1 },\n { 'name': 'sign', 'src': '후', 'value': 1 },\n { 'name': 'shift', 'src': '지난|작', 'value': -1 },\n { 'name': 'shift', 'src': '이번|올', 'value': 0 },\n { 'name': 'shift', 'src': '다음|내', 'value': 1 }\n ],\n 'parse': [\n '{num}{unit} {sign}',\n '{shift?} {unit:5-7}',\n '{year?} {month}',\n '{year}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift} {unit:5?} {weekday}',\n '{year?} {month?} {date} {weekday?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"ko\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Japanese locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('ja')\n *\n */\naddLocale('ja', {\n 'ampmFront': true,\n 'numeralUnits': true,\n 'allowsFullWidth': true,\n 'timeMarkerOptional': true,\n 'firstDayOfWeek': 0,\n 'firstDayOfWeekYear': 1,\n 'units': 'ミリ秒,秒,分,時間,日,週間|週,ヶ月|ヵ月|月,年|年度',\n 'weekdays': '日:曜日||曜,月:曜日||曜,火:曜日||曜,水:曜日||曜,木:曜日||曜,金:曜日||曜,土:曜日||曜',\n 'numerals': '〇,一,二,三,四,五,六,七,八,九',\n 'placeholders': '十,百,千,万',\n 'timeSuffixes': ',秒,分,時,日,,月,年度?',\n 'short': '{yyyy}/{MM}/{dd}',\n 'medium': '{yyyy}年{M}月{d}日',\n 'long': '{yyyy}年{M}月{d}日{time}',\n 'full': '{yyyy}年{M}月{d}日{time} {weekday}',\n 'stamp': '{yyyy}年{M}月{d}日 {H}:{mm} {dow}',\n 'time': '{tt}{h}時{mm}分',\n 'past': '{num}{unit}{sign}',\n 'future': '{num}{unit}{sign}',\n 'duration': '{num}{unit}',\n 'ampm': '午前,午後',\n 'modifiers': [\n { 'name': 'day', 'src': '一昨々日|前々々日', 'value': -3 },\n { 'name': 'day', 'src': '一昨日|おととい|前々日', 'value': -2 },\n { 'name': 'day', 'src': '昨日|前日', 'value': -1 },\n { 'name': 'day', 'src': '今日|当日|本日', 'value': 0 },\n { 'name': 'day', 'src': '明日|翌日|次日', 'value': 1 },\n { 'name': 'day', 'src': '明後日|翌々日', 'value': 2 },\n { 'name': 'day', 'src': '明々後日|翌々々日', 'value': 3 },\n { 'name': 'sign', 'src': '前', 'value': -1 },\n { 'name': 'sign', 'src': '後', 'value': 1 },\n { 'name': 'edge', 'src': '始|初日|頭', 'value': -2 },\n { 'name': 'edge', 'src': '末|尻', 'value': 2 },\n { 'name': 'edge', 'src': '末日', 'value': 1 },\n { 'name': 'shift', 'src': '一昨々|前々々', 'value': -3 },\n { 'name': 'shift', 'src': '一昨|前々|先々', 'value': -2 },\n { 'name': 'shift', 'src': '先|昨|去|前', 'value': -1 },\n { 'name': 'shift', 'src': '今|本|当', 'value': 0 },\n { 'name': 'shift', 'src': '来|明|翌|次', 'value': 1 },\n { 'name': 'shift', 'src': '明後|翌々|次々|再来|さ来', 'value': 2 },\n { 'name': 'shift', 'src': '明々後|翌々々', 'value': 3 }\n ],\n 'parse': [\n '{month}{edge}',\n '{num}{unit}{sign}',\n '{year?}{month}',\n '{year}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift}{unit:5}{weekday?}',\n '{shift}{unit:7}{month}{edge}',\n '{shift}{unit:7}{month?}{date?}',\n '{shift}{unit:6}{edge?}{date?}',\n '{year?}{month?}{date}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"ja\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Italian locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('it')\n *\n */\naddLocale('it', {\n 'plural': true,\n 'units': 'millisecond:o|i,second:o|i,minut:o|i,or:a|e,giorn:o|i,settiman:a|e,mes:e|i,ann:o|i',\n 'months': 'gen:naio|,feb:braio|,mar:zo|,apr:ile|,mag:gio|,giu:gno|,lug:lio|,ago:sto|,set:tembre|,ott:obre|,nov:embre|,dic:embre|',\n 'weekdays': 'dom:enica|,lun:edì||edi,mar:tedì||tedi,mer:coledì||coledi,gio:vedì||vedi,ven:erdì||erdi,sab:ato|',\n 'numerals': \"zero,un:|a|o|',due,tre,quattro,cinque,sei,sette,otto,nove,dieci\",\n 'tokens': \"l'|la|il\",\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full': '{weekday}, {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{num} {unit} {sign}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'alle',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'ieri', 'value': -1 },\n { 'name': 'day', 'src': 'oggi', 'value': 0 },\n { 'name': 'day', 'src': 'domani', 'value': 1 },\n { 'name': 'day', 'src': 'dopodomani', 'value': 2 },\n { 'name': 'sign', 'src': 'fa', 'value': -1 },\n { 'name': 'sign', 'src': 'da adesso', 'value': 1 },\n { 'name': 'shift', 'src': 'scors:o|a', 'value': -1 },\n { 'name': 'shift', 'src': 'prossim:o|a', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{num} {unit} {sign}',\n '{0?} {unit:5-7} {shift}',\n '{0?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date} {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date} {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"it\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * French locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('fr')\n *\n */\naddLocale('fr', {\n 'plural': true,\n 'units': 'milliseconde:|s,seconde:|s,minute:|s,heure:|s,jour:|s,semaine:|s,mois,an:|s|née|nee',\n 'months': 'janv:ier|,févr:ier|+fevr:ier|,mars,avr:il|,mai,juin,juil:let|,août,sept:embre|,oct:obre|,nov:embre|,déc:embre|+dec:embre|',\n 'weekdays': 'dim:anche|,lun:di|,mar:di|,mer:credi|,jeu:di|,ven:dredi|,sam:edi|',\n 'numerals': 'zéro,un:|e,deux,trois,quatre,cinq,six,sept,huit,neuf,dix',\n 'tokens': \"l'|la|le,er\",\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full': '{weekday} {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{sign} {num} {unit}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'à',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'hier', 'value': -1 },\n { 'name': 'day', 'src': \"aujourd'hui\", 'value': 0 },\n { 'name': 'day', 'src': 'demain', 'value': 1 },\n { 'name': 'sign', 'src': 'il y a', 'value': -1 },\n { 'name': 'sign', 'src': \"dans|d'ici\", 'value': 1 },\n { 'name': 'shift', 'src': 'derni:èr|er|ère|ere', 'value': -1 },\n { 'name': 'shift', 'src': 'prochain:|e', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{sign} {num} {unit}',\n '{0?} {unit:5-7} {shift}'\n ],\n 'timeParse': [\n '{day|weekday} {shift?}',\n '{weekday?},? {0?} {date}{1?} {months}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{0?} {weekday} {shift}',\n '{weekday?},? {0?} {date}{1?} {months}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"fr\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Finnish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('fi')\n *\n */\naddLocale('fi', {\n 'plural': true,\n 'units': 'millisekun:ti|tia|nin|teja|tina,sekun:ti|tia|nin|teja|tina,minuut:ti|tia|in|teja|tina,tun:ti|tia|nin|teja|tina,päiv:ä|ää|än|iä|änä,viik:ko|koa|on|olla|koja|kona,kuukau:si|tta|den+kuussa,vuo:si|tta|den|sia|tena|nna',\n 'months': 'tammi:kuuta||kuu,helmi:kuuta||kuu,maalis:kuuta||kuu,huhti:kuuta||kuu,touko:kuuta||kuu,kesä:kuuta||kuu,heinä:kuuta||kuu,elo:kuuta||kuu,syys:kuuta||kuu,loka:kuuta||kuu,marras:kuuta||kuu,joulu:kuuta||kuu',\n 'weekdays': 'su:nnuntai||nnuntaina,ma:anantai||anantaina,ti:istai||istaina,ke:skiviikko||skiviikkona,to:rstai||rstaina,pe:rjantai||rjantaina,la:uantai||uantaina',\n 'numerals': 'nolla,yksi|ensimmäinen,kaksi|toinen,kolm:e|as,neljä:|s,vii:si|des,kuu:si|des,seitsemä:n|s,kahdeksa:n|s,yhdeksä:n|s,kymmene:n|s',\n 'short': '{d}.{M}.{yyyy}',\n 'medium': '{d}. {month} {yyyy}',\n 'long': '{d}. {month} {yyyy} klo {time}',\n 'full': '{weekday} {d}. {month} {yyyy} klo {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}.{mm}',\n 'timeMarkers': 'klo,kello',\n 'ordinalSuffix': '.',\n 'relative': function(num, unit, ms, format) {\n var units = this['units'];\n function numberWithUnit(mult) {\n return num + ' ' + units[(8 * mult) + unit];\n }\n function baseUnit() {\n return numberWithUnit(num === 1 ? 0 : 1);\n }\n switch(format) {\n case 'duration': return baseUnit();\n case 'past': return baseUnit() + ' sitten';\n case 'future': return numberWithUnit(2) + ' kuluttua';\n }\n },\n 'modifiers': [\n { 'name': 'day', 'src': 'toissa päivänä', 'value': -2 },\n { 'name': 'day', 'src': 'eilen|eilistä', 'value': -1 },\n { 'name': 'day', 'src': 'tänään', 'value': 0 },\n { 'name': 'day', 'src': 'huomenna|huomista', 'value': 1 },\n { 'name': 'day', 'src': 'ylihuomenna|ylihuomista', 'value': 2 },\n { 'name': 'sign', 'src': 'sitten|aiemmin', 'value': -1 },\n { 'name': 'sign', 'src': 'päästä|kuluttua|myöhemmin', 'value': 1 },\n { 'name': 'edge', 'src': 'lopussa', 'value': 2 },\n { 'name': 'edge', 'src': 'ensimmäinen|ensimmäisenä', 'value': -2 },\n { 'name': 'shift', 'src': 'edel:linen|lisenä', 'value': -1 },\n { 'name': 'shift', 'src': 'viime', 'value': -1 },\n { 'name': 'shift', 'src': 'tä:llä|ssä|nä|mä', 'value': 0 },\n { 'name': 'shift', 'src': 'seuraava|seuraavana|tuleva|tulevana|ensi', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {day|weekday}',\n '{num?} {unit} {sign}',\n '{weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"fi\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Spanish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('es')\n *\n */\naddLocale('es', {\n 'plural': true,\n 'units': 'milisegundo:|s,segundo:|s,minuto:|s,hora:|s,día|días|dia|dias,semana:|s,mes:|es,año|años|ano|anos',\n 'months': 'ene:ro|,feb:rero|,mar:zo|,abr:il|,may:o|,jun:io|,jul:io|,ago:sto|,sep:tiembre|,oct:ubre|,nov:iembre|,dic:iembre|',\n 'weekdays': 'dom:ingo|,lun:es|,mar:tes|,mié:rcoles|+mie:rcoles|,jue:ves|,vie:rnes|,sáb:ado|+sab:ado|',\n 'numerals': 'cero,uno,dos,tres,cuatro,cinco,seis,siete,ocho,nueve,diez',\n 'tokens': 'el,la,de',\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} de {Month} de {yyyy}',\n 'long': '{d} de {Month} de {yyyy} {time}',\n 'full': '{weekday}, {d} de {month} de {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{sign} {num} {unit}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'a las',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'anteayer', 'value': -2 },\n { 'name': 'day', 'src': 'ayer', 'value': -1 },\n { 'name': 'day', 'src': 'hoy', 'value': 0 },\n { 'name': 'day', 'src': 'mañana|manana', 'value': 1 },\n { 'name': 'sign', 'src': 'hace', 'value': -1 },\n { 'name': 'sign', 'src': 'dentro de', 'value': 1 },\n { 'name': 'shift', 'src': 'pasad:o|a', 'value': -1 },\n { 'name': 'shift', 'src': 'próximo|próxima|proximo|proxima', 'value': 1 }\n ],\n 'parse': [\n '{months} {2?} {year?}',\n '{sign} {num} {unit}',\n '{num} {unit} {sign}',\n '{0?}{1?} {unit:5-7} {shift}',\n '{0?}{1?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday} {shift?}',\n '{date} {2?} {months?}\\\\.? {2?} {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {weekday} {shift?}',\n '{date} {2?} {months?}\\\\.? {2?} {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"es\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * German locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('de')\n *\n */\naddLocale('de', {\n 'plural': true,\n 'units': 'Millisekunde:|n,Sekunde:|n,Minute:|n,Stunde:|n,Tag:|en,Woche:|n,Monat:|en,Jahr:|en|e',\n 'months': 'Jan:uar|,Feb:ruar|,M:är|ärz|ar|arz,Apr:il|,Mai,Juni,Juli,Aug:ust|,Sept:ember|,Okt:ober|,Nov:ember|,Dez:ember|',\n 'weekdays': 'So:nntag|,Mo:ntag|,Di:enstag|,Mi:ttwoch|,Do:nnerstag|,Fr:eitag|,Sa:mstag|',\n 'numerals': 'null,ein:|e|er|en|em,zwei,drei,vier,fuenf,sechs,sieben,acht,neun,zehn',\n 'tokens': 'der',\n 'short': '{dd}.{MM}.{yyyy}',\n 'medium': '{d}. {Month} {yyyy}',\n 'long': '{d}. {Month} {yyyy} {time}',\n 'full': '{Weekday}, {d}. {Month} {yyyy} {time}',\n 'stamp': '{Dow} {d} {Mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{sign} {num} {unit}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'um',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'vorgestern', 'value': -2 },\n { 'name': 'day', 'src': 'gestern', 'value': -1 },\n { 'name': 'day', 'src': 'heute', 'value': 0 },\n { 'name': 'day', 'src': 'morgen', 'value': 1 },\n { 'name': 'day', 'src': 'übermorgen|ubermorgen|uebermorgen', 'value': 2 },\n { 'name': 'sign', 'src': 'vor:|her', 'value': -1 },\n { 'name': 'sign', 'src': 'in', 'value': 1 },\n { 'name': 'shift', 'src': 'letzte:|r|n|s', 'value': -1 },\n { 'name': 'shift', 'src': 'nächste:|r|n|s+nachste:|r|n|s+naechste:|r|n|s+kommende:n|r', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{sign} {num} {unit}',\n '{num} {unit} {sign}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift} {weekday}',\n '{weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"de\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Danish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('da')\n *\n */\naddLocale('da', {\n 'plural': true,\n 'units': 'millisekund:|er,sekund:|er,minut:|ter,tim:e|er,dag:|e,ug:e|er|en,måned:|er|en+maaned:|er|en,år:||et+aar:||et',\n 'months': 'jan:uar|,feb:ruar|,mar:ts|,apr:il|,maj,jun:i|,jul:i|,aug:ust|,sep:tember|,okt:ober|,nov:ember|,dec:ember|',\n 'weekdays': 'søn:dag|+son:dag|,man:dag|,tir:sdag|,ons:dag|,tor:sdag|,fre:dag|,lør:dag|+lor:dag|',\n 'numerals': 'nul,en|et,to,tre,fire,fem,seks,syv,otte,ni,ti',\n 'tokens': 'den,for',\n 'articles': 'den',\n 'short': '{dd}-{MM}-{yyyy}',\n 'medium': '{d}. {month} {yyyy}',\n 'long': '{d}. {month} {yyyy} {time}',\n 'full': '{weekday} d. {d}. {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'forgårs|i forgårs|forgaars|i forgaars', 'value': -2 },\n { 'name': 'day', 'src': 'i går|igår|i gaar|igaar', 'value': -1 },\n { 'name': 'day', 'src': 'i dag|idag', 'value': 0 },\n { 'name': 'day', 'src': 'i morgen|imorgen', 'value': 1 },\n { 'name': 'day', 'src': 'over morgon|overmorgen|i over morgen|i overmorgen|iovermorgen', 'value': 2 },\n { 'name': 'sign', 'src': 'siden', 'value': -1 },\n { 'name': 'sign', 'src': 'om', 'value': 1 },\n { 'name': 'shift', 'src': 'i sidste|sidste', 'value': -1 },\n { 'name': 'shift', 'src': 'denne', 'value': 0 },\n { 'name': 'shift', 'src': 'næste|naeste', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{1?} {num} {unit} {sign}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{date} {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift} {weekday}',\n '{0?} {weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"da\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Catalan locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('ca')\n *\n */\naddLocale('ca', {\n 'plural': true,\n 'units': 'milisegon:|s,segon:|s,minut:|s,hor:a|es,di:a|es,setman:a|es,mes:|os,any:|s',\n 'months': 'gen:er|,febr:er|,mar:ç|,abr:il|,mai:g|,jun:y|,jul:iol|,ag:ost|,set:embre|,oct:ubre|,nov:embre|,des:embre|',\n 'weekdays': 'diumenge|dg,dilluns|dl,dimarts|dt,dimecres|dc,dijous|dj,divendres|dv,dissabte|ds',\n 'numerals': 'zero,un,dos,tres,quatre,cinc,sis,set,vuit,nou,deu',\n 'tokens': 'el,la,de',\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full': '{weekday} {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{sign} {num} {unit}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'a las',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': \"abans d'ahir\", 'value': -2 },\n { 'name': 'day', 'src': 'ahir', 'value': -1 },\n { 'name': 'day', 'src': 'avui', 'value': 0 },\n { 'name': 'day', 'src': 'demà|dema', 'value': 1 },\n { 'name': 'sign', 'src': 'fa', 'value': -1 },\n { 'name': 'sign', 'src': 'en', 'value': 1 },\n { 'name': 'shift', 'src': 'passat', 'value': -1 },\n { 'name': 'shift', 'src': 'el proper|la propera', 'value': 1 }\n ],\n 'parse': [\n '{sign} {num} {unit}',\n '{num} {unit} {sign}',\n '{0?}{1?} {unit:5-7} {shift}',\n '{0?}{1?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift} {weekday}',\n '{weekday} {shift}',\n '{date?} {2?} {months}\\\\.? {2?} {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"ca\" locale.","'use strict';\n\nrequire('./ca');\nrequire('./da');\nrequire('./de');\nrequire('./es');\nrequire('./fi');\nrequire('./fr');\nrequire('./it');\nrequire('./ja');\nrequire('./ko');\nrequire('./nl');\nrequire('./no');\nrequire('./pl');\nrequire('./pt');\nrequire('./ru');\nrequire('./sv');\nrequire('./zh-CN');\nrequire('./zh-TW');\n\nmodule.exports = require('sugar-core');","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"years\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"weeks\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'union': function(range) {\n return new Range(\n this.start < range.start ? this.start : range.start,\n this.end > range.end ? this.end : range.end\n );\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"union\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeIsValid = require('./internal/rangeIsValid'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'toString': function() {\n return rangeIsValid(this) ? this.start + '..' + this.end : 'Invalid Range';\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"toString\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeEvery = require('./internal/rangeEvery'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'toArray': function() {\n return rangeEvery(this);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"toArray\" on Range.prototype.","'use strict';\n\nvar classChecks = require('../../common/var/classChecks');\n\nvar isString = classChecks.isString;\n\nfunction getRangeMemberNumericValue(m) {\n return isString(m) ? m.charCodeAt(0) : m;\n}\n\nmodule.exports = getRangeMemberNumericValue;","'use strict';\n\nvar Range = require('./internal/Range'),\n mathAliases = require('../common/var/mathAliases'),\n rangeIsValid = require('./internal/rangeIsValid'),\n defineOnPrototype = require('../common/internal/defineOnPrototype'),\n getRangeMemberNumericValue = require('./internal/getRangeMemberNumericValue');\n\nvar abs = mathAliases.abs;\n\ndefineOnPrototype(Range, {\n\n 'span': function() {\n var n = getRangeMemberNumericValue(this.end) - getRangeMemberNumericValue(this.start);\n return rangeIsValid(this) ? abs(n) + 1 : NaN;\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"span\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"seconds\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"months\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"minutes\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"milliseconds\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeIsValid = require('./internal/rangeIsValid'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'isValid': function() {\n return rangeIsValid(this);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"isValid\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'intersect': function(range) {\n if (range.start > this.end || range.end < this.start) {\n return new Range(NaN, NaN);\n }\n return new Range(\n this.start > range.start ? this.start : range.start,\n this.end < range.end ? this.end : range.end\n );\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"intersect\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"hours\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeEvery = require('./internal/rangeEvery'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'every': function(amount, fn) {\n return rangeEvery(this, amount, false, fn);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"every\" on Range.prototype.","'use strict';\n\nvar CommonChars = require('../var/CommonChars');\n\nvar HALF_WIDTH_PERIOD = CommonChars.HALF_WIDTH_PERIOD;\n\nfunction periodSplit(str) {\n return str.split(HALF_WIDTH_PERIOD);\n}\n\nmodule.exports = periodSplit;","'use strict';\n\nvar periodSplit = require('../../common/internal/periodSplit');\n\nfunction getPrecision(n) {\n var split = periodSplit(n.toString());\n return split[1] ? split[1].length : 0;\n}\n\nmodule.exports = getPrecision;","'use strict';\n\nvar mathAliases = require('../../common/var/mathAliases'),\n getPrecision = require('./getPrecision');\n\nvar max = mathAliases.max;\n\nfunction getGreaterPrecision(n1, n2) {\n return max(getPrecision(n1), getPrecision(n2));\n}\n\nmodule.exports = getGreaterPrecision;","'use strict';\n\nvar chr = require('../../common/var/chr');\n\nfunction incrementString(current, amount) {\n return chr(current.charCodeAt(0) + amount);\n}\n\nmodule.exports = incrementString;","'use strict';\n\nvar withPrecision = require('../../common/internal/withPrecision');\n\nfunction incrementNumber(current, amount, precision) {\n return withPrecision(current + amount, precision);\n}\n\nmodule.exports = incrementNumber;","'use strict';\n\nfunction valueIsNotInfinite(m) {\n return m !== -Infinity && m !== Infinity;\n}\n\nmodule.exports = valueIsNotInfinite;","'use strict';\n\nvar valueIsNotInfinite = require('./valueIsNotInfinite'),\n getRangeMemberPrimitiveValue = require('./getRangeMemberPrimitiveValue');\n\nfunction isValidRangeMember(m) {\n var val = getRangeMemberPrimitiveValue(m);\n return (!!val || val === 0) && valueIsNotInfinite(m);\n}\n\nmodule.exports = isValidRangeMember;","'use strict';\n\nvar MULTIPLIERS = require('../var/MULTIPLIERS'),\n DURATION_UNITS = require('../var/DURATION_UNITS'),\n Range = require('./Range'),\n trunc = require('../../common/var/trunc'),\n forEach = require('../../common/internal/forEach'),\n rangeEvery = require('./rangeEvery'),\n simpleCapitalize = require('../../common/internal/simpleCapitalize'),\n defineOnPrototype = require('../../common/internal/defineOnPrototype');\n\nfunction buildDateRangeUnits() {\n var methods = {};\n forEach(DURATION_UNITS.split('|'), function(unit, i) {\n var name = unit + 's', mult, fn;\n if (i < 4) {\n fn = function() {\n return rangeEvery(this, unit, true);\n };\n } else {\n mult = MULTIPLIERS[simpleCapitalize(name)];\n fn = function() {\n return trunc((this.end - this.start) / mult);\n };\n }\n methods[name] = fn;\n });\n defineOnPrototype(Range, methods);\n}\n\nmodule.exports = buildDateRangeUnits;","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"days\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'contains': function(el) {\n if (el == null) return false;\n if (el.start && el.end) {\n return el.start >= this.start && el.start <= this.end &&\n el.end >= this.start && el.end <= this.end;\n } else {\n return el >= this.start && el <= this.end;\n }\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"contains\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'clone': function() {\n return new Range(this.start, this.end);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"clone\" on Range.prototype.","'use strict';\n\nvar cloneRangeMember = require('./cloneRangeMember');\n\nfunction rangeClamp(range, obj) {\n var clamped,\n start = range.start,\n end = range.end,\n min = end < start ? end : start,\n max = start > end ? start : end;\n if (obj < min) {\n clamped = min;\n } else if (obj > max) {\n clamped = max;\n } else {\n clamped = obj;\n }\n return cloneRangeMember(clamped);\n}\n\nmodule.exports = rangeClamp;","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeClamp = require('./internal/rangeClamp'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'clamp': function(el) {\n return rangeClamp(this, el);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"clamp\" on Range.prototype.","'use strict';\n\nvar DURATION_UNITS = require('./DURATION_UNITS');\n\nmodule.exports = RegExp('(\\\\d+)?\\\\s*('+ DURATION_UNITS +')s?', 'i');","'use strict';\n\nvar DURATION_UNITS = require('./DURATION_UNITS');\n\nmodule.exports = '((?:\\\\d+)?\\\\s*(?:' + DURATION_UNITS + '))s?';","'use strict';\n\nvar FULL_CAPTURED_DURATION = require('./FULL_CAPTURED_DURATION');\n\nmodule.exports = {\n RANGE_REG_FROM_TO: /(?:from)?\\s*(.+)\\s+(?:to|until)\\s+(.+)$/i,\n RANGE_REG_REAR_DURATION: RegExp('(.+)\\\\s*for\\\\s*' + FULL_CAPTURED_DURATION, 'i'),\n RANGE_REG_FRONT_DURATION: RegExp('(?:for)?\\\\s*'+ FULL_CAPTURED_DURATION +'\\\\s*(?:starting)?\\\\s(?:at\\\\s)?(.+)', 'i')\n};","'use strict';\n\nvar Range = require('./Range'),\n DurationTextFormats = require('../var/DurationTextFormats'),\n incrementDate = require('./incrementDate'),\n getDateForRange = require('./getDateForRange'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n getDateIncrementObject = require('./getDateIncrementObject');\n\nvar sugarDate = namespaceAliases.sugarDate,\n RANGE_REG_FROM_TO = DurationTextFormats.RANGE_REG_FROM_TO,\n RANGE_REG_REAR_DURATION = DurationTextFormats.RANGE_REG_REAR_DURATION,\n RANGE_REG_FRONT_DURATION = DurationTextFormats.RANGE_REG_FRONT_DURATION;\n\nfunction createDateRangeFromString(str) {\n var match, datetime, duration, dio, start, end;\n if (sugarDate.get && (match = str.match(RANGE_REG_FROM_TO))) {\n start = getDateForRange(match[1].replace('from', 'at'));\n end = sugarDate.get(start, match[2]);\n return new Range(start, end);\n }\n if (match = str.match(RANGE_REG_FRONT_DURATION)) {\n duration = match[1];\n datetime = match[2];\n }\n if (match = str.match(RANGE_REG_REAR_DURATION)) {\n datetime = match[1];\n duration = match[2];\n }\n if (datetime && duration) {\n start = getDateForRange(datetime);\n dio = getDateIncrementObject(duration);\n end = incrementDate(start, dio[0], dio[1]);\n } else {\n start = str;\n }\n return new Range(getDateForRange(start), getDateForRange(end));\n}\n\nmodule.exports = createDateRangeFromString;","'use strict';\n\nvar Range = require('../internal/Range'),\n classChecks = require('../../common/var/classChecks'),\n getDateForRange = require('../internal/getDateForRange'),\n createDateRangeFromString = require('../internal/createDateRangeFromString');\n\nvar isString = classChecks.isString;\n\nvar DateRangeConstructor = function(start, end) {\n if (arguments.length === 1 && isString(start)) {\n return createDateRangeFromString(start);\n }\n return new Range(getDateForRange(start), getDateForRange(end));\n};\n\nmodule.exports = DateRangeConstructor;","'use strict';\n\nvar Sugar = require('sugar-core'),\n DateRangeConstructor = require('../range/var/DateRangeConstructor');\n\nSugar.Date.defineStatic({\n\n 'range': DateRangeConstructor\n\n});\n\nmodule.exports = Sugar.Date.range;","'use strict';\n\n// Static Methods\nrequire('../date/range');\n\n// Prototype Methods\nrequire('./clamp');\nrequire('./clone');\nrequire('./contains');\nrequire('./days');\nrequire('./every');\nrequire('./hours');\nrequire('./intersect');\nrequire('./isValid');\nrequire('./milliseconds');\nrequire('./minutes');\nrequire('./months');\nrequire('./seconds');\nrequire('./span');\nrequire('./toArray');\nrequire('./toString');\nrequire('./union');\nrequire('./weeks');\nrequire('./years');\n\nmodule.exports = require('sugar-core');","'use strict';\n\nvar Sugar = require('sugar-core'),\n _dateOptions = require('./var/_dateOptions');\n\nmodule.exports = Sugar.Date.setOption;","'use strict';\n\nvar Sugar = require('sugar-core'),\n _dateOptions = require('./var/_dateOptions');\n\nmodule.exports = Sugar.Date.getOption;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.yearsUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.yearsSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.yearsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.yearsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.weeksUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.weeksSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.weeksFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.weeksAgo;","'use strict';\n\nvar Sugar = require('sugar-core'),\n setWeekday = require('./internal/setWeekday');\n\nSugar.Date.defineInstance({\n\n 'setWeekday': function(date, dow) {\n return setWeekday(date, dow);\n }\n\n});\n\nmodule.exports = Sugar.Date.setWeekday;","'use strict';\n\nvar Sugar = require('sugar-core'),\n _utc = require('../common/var/_utc');\n\nSugar.Date.defineInstance({\n\n 'setUTC': function(date, on) {\n return _utc(date, on);\n }\n\n});\n\nmodule.exports = Sugar.Date.setUTC;","'use strict';\n\nvar Sugar = require('sugar-core'),\n setISOWeekNumber = require('./internal/setISOWeekNumber');\n\nSugar.Date.defineInstance({\n\n 'setISOWeek': function(date, num) {\n return setISOWeekNumber(date, num);\n }\n\n});\n\nmodule.exports = Sugar.Date.setISOWeek;","'use strict';\n\nvar Sugar = require('sugar-core'),\n updateDate = require('./internal/updateDate'),\n collectDateArguments = require('./internal/collectDateArguments');\n\nSugar.Date.defineInstanceWithArguments({\n\n 'set': function(d, args) {\n args = collectDateArguments(args);\n return updateDate(d, args[0], args[1]);\n }\n\n});\n\nmodule.exports = Sugar.Date.set;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.secondsUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.secondsSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.secondsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.secondsAgo;","'use strict';\n\nvar Sugar = require('sugar-core'),\n advanceDateWithArgs = require('./internal/advanceDateWithArgs');\n\nSugar.Date.defineInstanceWithArguments({\n\n 'rewind': function(d, args) {\n return advanceDateWithArgs(d, args, -1);\n }\n\n});\n\nmodule.exports = Sugar.Date.rewind;","'use strict';\n\nvar iterateOverDateParams = require('./iterateOverDateParams');\n\nfunction getUnitIndexForParamName(name) {\n var params = {}, unitIndex;\n params[name] = 1;\n iterateOverDateParams(params, function(name, val, unit, i) {\n unitIndex = i;\n return false;\n });\n return unitIndex;\n}\n\nmodule.exports = getUnitIndexForParamName;","'use strict';\n\nvar Sugar = require('sugar-core'),\n DateUnitIndexes = require('./var/DateUnitIndexes'),\n moveToBeginningOfUnit = require('./internal/moveToBeginningOfUnit'),\n getUnitIndexForParamName = require('./internal/getUnitIndexForParamName');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nSugar.Date.defineInstance({\n\n 'reset': function(date, unit, localeCode) {\n var unitIndex = unit ? getUnitIndexForParamName(unit) : DAY_INDEX;\n moveToBeginningOfUnit(date, unitIndex, localeCode);\n return date;\n }\n\n});\n\nmodule.exports = Sugar.Date.reset;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate'),\n dateRelative = require('./internal/dateRelative');\n\nSugar.Date.defineInstance({\n\n 'relativeTo': function(date, d, localeCode) {\n return dateRelative(date, createDate(d), localeCode);\n }\n\n});\n\nmodule.exports = Sugar.Date.relativeTo;","'use strict';\n\nvar getNewDate = require('./getNewDate'),\n mathAliases = require('../../common/var/mathAliases'),\n getAdjustedUnit = require('./getAdjustedUnit'),\n getTimeDistanceForUnit = require('./getTimeDistanceForUnit');\n\nvar abs = mathAliases.abs;\n\nfunction getAdjustedUnitForDate(d, dRelative) {\n var ms;\n if (!dRelative) {\n dRelative = getNewDate();\n if (d > dRelative) {\n // If our date is greater than the one that we got from getNewDate, it\n // means that we are finding the unit for a date that is in the future\n // relative to now. However, often the incoming date was created in\n // the same cycle as our comparison, but our \"now\" date will have been\n // created an instant after it, creating situations where \"5 minutes from\n // now\" becomes \"4 minutes from now\" in the same tick. To prevent this,\n // subtract a buffer of 10ms to compensate.\n dRelative = new Date(dRelative.getTime() - 10);\n }\n }\n ms = d - dRelative;\n return getAdjustedUnit(ms, function(u) {\n return abs(getTimeDistanceForUnit(d, dRelative, u));\n });\n}\n\nmodule.exports = getAdjustedUnitForDate;","'use strict';\n\nvar Sugar = require('sugar-core'),\n dateRelative = require('./internal/dateRelative');\n\nSugar.Date.defineInstance({\n\n 'relative': function(date, localeCode, fn) {\n return dateRelative(date, null, localeCode, fn);\n }\n\n});\n\nmodule.exports = Sugar.Date.relative;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.monthsUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.monthsSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.monthsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.monthsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.minutesUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.minutesSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.minutesFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.minutesAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.millisecondsUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.millisecondsSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.millisecondsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.millisecondsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nSugar.Date.defineInstance({\n\n 'iso': function(date) {\n return date.toISOString();\n }\n\n});\n\nmodule.exports = Sugar.Date.iso;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isYesterday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isWeekend;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isWeekday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isWednesday;","'use strict';\n\nvar Sugar = require('sugar-core'),\n dateIsValid = require('./internal/dateIsValid');\n\nSugar.Date.defineInstance({\n\n 'isValid': function(date) {\n return dateIsValid(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.isValid;","'use strict';\n\nvar _utc = require('../../common/var/_utc'),\n tzOffset = require('./tzOffset');\n\nfunction isUTC(d) {\n return !!_utc(d) || tzOffset(d) === 0;\n}\n\nmodule.exports = isUTC;","'use strict';\n\nvar Sugar = require('sugar-core'),\n isUTC = require('./internal/isUTC');\n\nSugar.Date.defineInstance({\n\n 'isUTC': function(date) {\n return isUTC(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.isUTC;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isTuesday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isTomorrow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isToday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isThursday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isThisYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isThisWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isThisMonth;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isSunday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isSaturday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isPast;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isNextYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isNextWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isNextMonth;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isMonday;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getYear = require('./internal/getYear');\n\nSugar.Date.defineInstance({\n\n 'isLeapYear': function(date) {\n var year = getYear(date);\n return (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);\n }\n\n});\n\nmodule.exports = Sugar.Date.isLeapYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isLastYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isLastWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isLastMonth;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isFuture;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n spaceSplit = require('../../common/internal/spaceSplit'),\n fullCompareDate = require('./fullCompareDate'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n defineInstanceSimilar = require('../../common/internal/defineInstanceSimilar');\n\nvar English = LocaleHelpers.English,\n sugarDate = namespaceAliases.sugarDate;\n\nfunction buildRelativeAliases() {\n var special = spaceSplit('Today Yesterday Tomorrow Weekday Weekend Future Past');\n var weekdays = English.weekdays.slice(0, 7);\n var months = English.months.slice(0, 12);\n var together = special.concat(weekdays).concat(months);\n defineInstanceSimilar(sugarDate, together, function(methods, name) {\n methods['is'+ name] = function(d) {\n return fullCompareDate(d, name);\n };\n });\n}\n\nmodule.exports = buildRelativeAliases;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isFriday;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate'),\n mathAliases = require('../common/var/mathAliases');\n\nvar min = mathAliases.min,\n max = mathAliases.max;\n\nSugar.Date.defineInstance({\n\n 'isBetween': function(date, d1, d2, margin) {\n var t = date.getTime();\n var t1 = createDate(d1).getTime();\n var t2 = createDate(d2).getTime();\n var lo = min(t1, t2);\n var hi = max(t1, t2);\n margin = margin || 0;\n return (lo - margin <= t) && (hi + margin >= t);\n }\n\n});\n\nmodule.exports = Sugar.Date.isBetween;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate');\n\nSugar.Date.defineInstance({\n\n 'isBefore': function(date, d, margin) {\n return date.getTime() < createDate(d).getTime() + (margin || 0);\n }\n\n});\n\nmodule.exports = Sugar.Date.isBefore;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate');\n\nSugar.Date.defineInstance({\n\n 'isAfter': function(date, d, margin) {\n return date.getTime() > createDate(d).getTime() - (margin || 0);\n }\n\n});\n\nmodule.exports = Sugar.Date.isAfter;","'use strict';\n\nvar setDate = require('./setDate'),\n getDate = require('./getDate'),\n getYear = require('./getYear'),\n getMonth = require('./getMonth'),\n getNewDate = require('./getNewDate');\n\nfunction compareDay(d, shift) {\n var comp = getNewDate();\n if (shift) {\n setDate(comp, getDate(comp) + shift);\n }\n return getYear(d) === getYear(comp) &&\n getMonth(d) === getMonth(comp) &&\n getDate(d) === getDate(comp);\n}\n\nmodule.exports = compareDay;","'use strict';\n\nfunction trim(str) {\n return str.trim();\n}\n\nmodule.exports = trim;","'use strict';\n\nvar Sugar = require('sugar-core'),\n fullCompareDate = require('./internal/fullCompareDate');\n\nSugar.Date.defineInstance({\n\n 'is': function(date, d, margin) {\n return fullCompareDate(date, d, margin);\n }\n\n});\n\nmodule.exports = Sugar.Date.is;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.hoursUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.hoursSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.hoursFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.hoursAgo;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getWeekday = require('./internal/getWeekday');\n\nSugar.Date.defineInstance({\n\n 'getWeekday': function(date) {\n return getWeekday(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.getWeekday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nSugar.Date.defineInstance({\n\n 'getUTCWeekday': function(date) {\n return date.getUTCDay();\n }\n\n});\n\nmodule.exports = Sugar.Date.getUTCWeekday;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getUTCOffset = require('./internal/getUTCOffset');\n\nSugar.Date.defineInstance({\n\n 'getUTCOffset': function(date, iso) {\n return getUTCOffset(date, iso);\n }\n\n});\n\nmodule.exports = Sugar.Date.getUTCOffset;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getWeekNumber = require('./internal/getWeekNumber');\n\nSugar.Date.defineInstance({\n\n 'getISOWeek': function(date) {\n return getWeekNumber(date, true);\n }\n\n});\n\nmodule.exports = Sugar.Date.getISOWeek;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDateWithContext = require('./internal/createDateWithContext');\n\nSugar.Date.defineInstance({\n\n 'get': function(date, d, options) {\n return createDateWithContext(date, d, options);\n }\n\n});\n\nmodule.exports = Sugar.Date.get;","'use strict';\n\nmodule.exports = 1000;","'use strict';\n\nvar INTERNAL_MEMOIZE_LIMIT = require('../var/INTERNAL_MEMOIZE_LIMIT'),\n coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar hasOwn = coreUtilityAliases.hasOwn;\n\nfunction memoizeFunction(fn) {\n var memo = {}, counter = 0;\n\n return function(key) {\n if (hasOwn(memo, key)) {\n return memo[key];\n }\n if (counter === INTERNAL_MEMOIZE_LIMIT) {\n memo = {};\n counter = 0;\n }\n counter++;\n return memo[key] = fn(key);\n };\n}\n\nmodule.exports = memoizeFunction;","'use strict';\n\nmodule.exports = /([{}])\\1|\\{([^}]*)\\}|(%)%|(%(\\w*))/g;","'use strict';\n\nvar STRING_FORMAT_REG = require('../var/STRING_FORMAT_REG'),\n CommonChars = require('../var/CommonChars'),\n memoizeFunction = require('./memoizeFunction');\n\nvar OPEN_BRACE = CommonChars.OPEN_BRACE,\n CLOSE_BRACE = CommonChars.CLOSE_BRACE;\n\nfunction createFormatMatcher(bracketMatcher, percentMatcher, precheck) {\n\n var reg = STRING_FORMAT_REG;\n var compileMemoized = memoizeFunction(compile);\n\n function getToken(format, match) {\n var get, token, literal, fn;\n var bKey = match[2];\n var pLit = match[3];\n var pKey = match[5];\n if (match[4] && percentMatcher) {\n token = pKey;\n get = percentMatcher;\n } else if (bKey) {\n token = bKey;\n get = bracketMatcher;\n } else if (pLit && percentMatcher) {\n literal = pLit;\n } else {\n literal = match[1] || match[0];\n }\n if (get) {\n assertPassesPrecheck(precheck, bKey, pKey);\n fn = function(obj, opt) {\n return get(obj, token, opt);\n };\n }\n format.push(fn || getLiteral(literal));\n }\n\n function getSubstring(format, str, start, end) {\n if (end > start) {\n var sub = str.slice(start, end);\n assertNoUnmatched(sub, OPEN_BRACE);\n assertNoUnmatched(sub, CLOSE_BRACE);\n format.push(function() {\n return sub;\n });\n }\n }\n\n function getLiteral(str) {\n return function() {\n return str;\n };\n }\n\n function assertPassesPrecheck(precheck, bt, pt) {\n if (precheck && !precheck(bt, pt)) {\n throw new TypeError('Invalid token '+ (bt || pt) +' in format string');\n }\n }\n\n function assertNoUnmatched(str, chr) {\n if (str.indexOf(chr) !== -1) {\n throw new TypeError('Unmatched '+ chr +' in format string');\n }\n }\n\n function compile(str) {\n var format = [], lastIndex = 0, match;\n reg.lastIndex = 0;\n while(match = reg.exec(str)) {\n getSubstring(format, str, lastIndex, match.index);\n getToken(format, match);\n lastIndex = reg.lastIndex;\n }\n getSubstring(format, str, lastIndex, str.length);\n return format;\n }\n\n return function(str, obj, opt) {\n var format = compileMemoized(str), result = '';\n for (var i = 0; i < format.length; i++) {\n result += format[i](obj, opt);\n }\n return result;\n };\n}\n\nmodule.exports = createFormatMatcher;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n trunc = require('../../common/var/trunc'),\n getHours = require('./getHours');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nfunction getMeridiemToken(d, localeCode) {\n var hours = getHours(d);\n return localeManager.get(localeCode).ampm[trunc(hours / 12)] || '';\n}\n\nmodule.exports = getMeridiemToken;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n getTimeDistanceForUnit = require('./getTimeDistanceForUnit');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nfunction getDaysSince(d1, d2) {\n return getTimeDistanceForUnit(d1, d2, DateUnits[DAY_INDEX]);\n}\n\nmodule.exports = getDaysSince;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n getYear = require('./getYear'),\n getMonth = require('./getMonth'),\n getWeekNumber = require('./getWeekNumber');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nfunction getWeekYear(d, localeCode, iso) {\n var year, month, firstDayOfWeek, firstDayOfWeekYear, week, loc;\n year = getYear(d);\n month = getMonth(d);\n if (month === 0 || month === 11) {\n if (!iso) {\n loc = localeManager.get(localeCode);\n firstDayOfWeek = loc.getFirstDayOfWeek(localeCode);\n firstDayOfWeekYear = loc.getFirstDayOfWeekYear(localeCode);\n }\n week = getWeekNumber(d, false, firstDayOfWeek, firstDayOfWeekYear);\n if (month === 0 && week === 0) {\n year -= 1;\n } else if (month === 11 && week === 1) {\n year += 1;\n }\n }\n return year;\n}\n\nmodule.exports = getWeekYear;","'use strict';\n\nfunction repeatString(str, num) {\n var result = '';\n str = str.toString();\n while (num > 0) {\n if (num & 1) {\n result += str;\n }\n if (num >>= 1) {\n str += str;\n }\n }\n return result;\n}\n\nmodule.exports = repeatString;","'use strict';\n\nmodule.exports = /(\\w{3})[()\\s\\d]*$/;","'use strict';\n\nvar TIMEZONE_ABBREVIATION_REG = require('./TIMEZONE_ABBREVIATION_REG'),\n LocaleHelpers = require('./LocaleHelpers'),\n DateUnitIndexes = require('./DateUnitIndexes'),\n trunc = require('../../common/var/trunc'),\n getDate = require('../internal/getDate'),\n getYear = require('../internal/getYear'),\n getHours = require('../internal/getHours'),\n getMonth = require('../internal/getMonth'),\n cloneDate = require('../internal/cloneDate'),\n padNumber = require('../../common/internal/padNumber'),\n getWeekday = require('../internal/getWeekday'),\n callDateGet = require('../../common/internal/callDateGet'),\n mathAliases = require('../../common/var/mathAliases'),\n getWeekYear = require('../internal/getWeekYear'),\n getUTCOffset = require('../internal/getUTCOffset'),\n getDaysSince = require('../internal/getDaysSince'),\n getWeekNumber = require('../internal/getWeekNumber'),\n getMeridiemToken = require('../internal/getMeridiemToken'),\n setUnitAndLowerToEdge = require('../internal/setUnitAndLowerToEdge');\n\nvar localeManager = LocaleHelpers.localeManager,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX,\n ceil = mathAliases.ceil;\n\nvar FormatTokensBase = [\n {\n ldml: 'Dow',\n strf: 'a',\n lowerToken: 'dow',\n get: function(d, localeCode) {\n return localeManager.get(localeCode).getWeekdayName(getWeekday(d), 2);\n }\n },\n {\n ldml: 'Weekday',\n strf: 'A',\n lowerToken: 'weekday',\n allowAlternates: true,\n get: function(d, localeCode, alternate) {\n return localeManager.get(localeCode).getWeekdayName(getWeekday(d), alternate);\n }\n },\n {\n ldml: 'Mon',\n strf: 'b h',\n lowerToken: 'mon',\n get: function(d, localeCode) {\n return localeManager.get(localeCode).getMonthName(getMonth(d), 2);\n }\n },\n {\n ldml: 'Month',\n strf: 'B',\n lowerToken: 'month',\n allowAlternates: true,\n get: function(d, localeCode, alternate) {\n return localeManager.get(localeCode).getMonthName(getMonth(d), alternate);\n }\n },\n {\n strf: 'C',\n get: function(d) {\n return getYear(d).toString().slice(0, 2);\n }\n },\n {\n ldml: 'd date day',\n strf: 'd',\n strfPadding: 2,\n ldmlPaddedToken: 'dd',\n ordinalToken: 'do',\n get: function(d) {\n return getDate(d);\n }\n },\n {\n strf: 'e',\n get: function(d) {\n return padNumber(getDate(d), 2, false, 10, ' ');\n }\n },\n {\n ldml: 'H 24hr',\n strf: 'H',\n strfPadding: 2,\n ldmlPaddedToken: 'HH',\n get: function(d) {\n return getHours(d);\n }\n },\n {\n ldml: 'h hours 12hr',\n strf: 'I',\n strfPadding: 2,\n ldmlPaddedToken: 'hh',\n get: function(d) {\n return getHours(d) % 12 || 12;\n }\n },\n {\n ldml: 'D',\n strf: 'j',\n strfPadding: 3,\n ldmlPaddedToken: 'DDD',\n get: function(d) {\n var s = setUnitAndLowerToEdge(cloneDate(d), MONTH_INDEX);\n return getDaysSince(d, s) + 1;\n }\n },\n {\n ldml: 'M',\n strf: 'm',\n strfPadding: 2,\n ordinalToken: 'Mo',\n ldmlPaddedToken: 'MM',\n get: function(d) {\n return getMonth(d) + 1;\n }\n },\n {\n ldml: 'm minutes',\n strf: 'M',\n strfPadding: 2,\n ldmlPaddedToken: 'mm',\n get: function(d) {\n return callDateGet(d, 'Minutes');\n }\n },\n {\n ldml: 'Q',\n get: function(d) {\n return ceil((getMonth(d) + 1) / 3);\n }\n },\n {\n ldml: 'TT',\n strf: 'p',\n get: function(d, localeCode) {\n return getMeridiemToken(d, localeCode);\n }\n },\n {\n ldml: 'tt',\n strf: 'P',\n get: function(d, localeCode) {\n return getMeridiemToken(d, localeCode).toLowerCase();\n }\n },\n {\n ldml: 'T',\n lowerToken: 't',\n get: function(d, localeCode) {\n return getMeridiemToken(d, localeCode).charAt(0);\n }\n },\n {\n ldml: 's seconds',\n strf: 'S',\n strfPadding: 2,\n ldmlPaddedToken: 'ss',\n get: function(d) {\n return callDateGet(d, 'Seconds');\n }\n },\n {\n ldml: 'S ms',\n strfPadding: 3,\n ldmlPaddedToken: 'SSS',\n get: function(d) {\n return callDateGet(d, 'Milliseconds');\n }\n },\n {\n ldml: 'e',\n strf: 'u',\n ordinalToken: 'eo',\n get: function(d) {\n return getWeekday(d) || 7;\n }\n },\n {\n strf: 'U',\n strfPadding: 2,\n get: function(d) {\n // Sunday first, 0-53\n return getWeekNumber(d, false, 0);\n }\n },\n {\n ldml: 'W',\n strf: 'V',\n strfPadding: 2,\n ordinalToken: 'Wo',\n ldmlPaddedToken: 'WW',\n get: function(d) {\n // Monday first, 1-53 (ISO8601)\n return getWeekNumber(d, true);\n }\n },\n {\n strf: 'w',\n get: function(d) {\n return getWeekday(d);\n }\n },\n {\n ldml: 'w',\n ordinalToken: 'wo',\n ldmlPaddedToken: 'ww',\n get: function(d, localeCode) {\n // Locale dependent, 1-53\n var loc = localeManager.get(localeCode),\n dow = loc.getFirstDayOfWeek(localeCode),\n doy = loc.getFirstDayOfWeekYear(localeCode);\n return getWeekNumber(d, true, dow, doy);\n }\n },\n {\n strf: 'W',\n strfPadding: 2,\n get: function(d) {\n // Monday first, 0-53\n return getWeekNumber(d, false);\n }\n },\n {\n ldmlPaddedToken: 'gggg',\n ldmlTwoDigitToken: 'gg',\n get: function(d, localeCode) {\n return getWeekYear(d, localeCode);\n }\n },\n {\n strf: 'G',\n strfPadding: 4,\n strfTwoDigitToken: 'g',\n ldmlPaddedToken: 'GGGG',\n ldmlTwoDigitToken: 'GG',\n get: function(d, localeCode) {\n return getWeekYear(d, localeCode, true);\n }\n },\n {\n ldml: 'year',\n ldmlPaddedToken: 'yyyy',\n ldmlTwoDigitToken: 'yy',\n strf: 'Y',\n strfPadding: 4,\n strfTwoDigitToken: 'y',\n get: function(d) {\n return getYear(d);\n }\n },\n {\n ldml: 'ZZ',\n strf: 'z',\n get: function(d) {\n return getUTCOffset(d);\n }\n },\n {\n ldml: 'X',\n get: function(d) {\n return trunc(d.getTime() / 1000);\n }\n },\n {\n ldml: 'x',\n get: function(d) {\n return d.getTime();\n }\n },\n {\n ldml: 'Z',\n get: function(d) {\n return getUTCOffset(d, true);\n }\n },\n {\n ldml: 'z',\n strf: 'Z',\n get: function(d) {\n // Note that this is not accurate in all browsing environments!\n // https://github.com/moment/moment/issues/162\n // It will continue to be supported for Node and usage with the\n // understanding that it may be blank.\n var match = d.toString().match(TIMEZONE_ABBREVIATION_REG);\n return match ? match[1]: '';\n }\n },\n {\n strf: 'D',\n alias: '%m/%d/%y'\n },\n {\n strf: 'F',\n alias: '%Y-%m-%d'\n },\n {\n strf: 'r',\n alias: '%I:%M:%S %p'\n },\n {\n strf: 'R',\n alias: '%H:%M'\n },\n {\n strf: 'T',\n alias: '%H:%M:%S'\n },\n {\n strf: 'x',\n alias: '{short}'\n },\n {\n strf: 'X',\n alias: '{time}'\n },\n {\n strf: 'c',\n alias: '{stamp}'\n }\n];\n\nmodule.exports = FormatTokensBase;","'use strict';\n\nvar LocaleHelpers = require('./LocaleHelpers'),\n FormatTokensBase = require('./FormatTokensBase'),\n CoreOutputFormats = require('./CoreOutputFormats'),\n forEach = require('../../common/internal/forEach'),\n padNumber = require('../../common/internal/padNumber'),\n spaceSplit = require('../../common/internal/spaceSplit'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n coreUtilityAliases = require('../../common/var/coreUtilityAliases'),\n createFormatMatcher = require('../../common/internal/createFormatMatcher'),\n defineInstanceSimilar = require('../../common/internal/defineInstanceSimilar');\n\nvar localeManager = LocaleHelpers.localeManager,\n hasOwn = coreUtilityAliases.hasOwn,\n getOwn = coreUtilityAliases.getOwn,\n forEachProperty = coreUtilityAliases.forEachProperty,\n sugarDate = namespaceAliases.sugarDate;\n\nvar ldmlTokens, strfTokens;\n\nfunction buildDateFormatTokens() {\n\n function addFormats(target, tokens, fn) {\n if (tokens) {\n forEach(spaceSplit(tokens), function(token) {\n target[token] = fn;\n });\n }\n }\n\n function buildLowercase(get) {\n return function(d, localeCode) {\n return get(d, localeCode).toLowerCase();\n };\n }\n\n function buildOrdinal(get) {\n return function(d, localeCode) {\n var n = get(d, localeCode);\n return n + localeManager.get(localeCode).getOrdinal(n);\n };\n }\n\n function buildPadded(get, padding) {\n return function(d, localeCode) {\n return padNumber(get(d, localeCode), padding);\n };\n }\n\n function buildTwoDigits(get) {\n return function(d, localeCode) {\n return get(d, localeCode) % 100;\n };\n }\n\n function buildAlias(alias) {\n return function(d, localeCode) {\n return dateFormatMatcher(alias, d, localeCode);\n };\n }\n\n function buildAlternates(f) {\n for (var n = 1; n <= 5; n++) {\n buildAlternate(f, n);\n }\n }\n\n function buildAlternate(f, n) {\n var alternate = function(d, localeCode) {\n return f.get(d, localeCode, n);\n };\n addFormats(ldmlTokens, f.ldml + n, alternate);\n if (f.lowerToken) {\n ldmlTokens[f.lowerToken + n] = buildLowercase(alternate);\n }\n }\n\n function getIdentityFormat(name) {\n return function(d, localeCode) {\n var loc = localeManager.get(localeCode);\n return dateFormatMatcher(loc[name], d, localeCode);\n };\n }\n\n ldmlTokens = {};\n strfTokens = {};\n\n forEach(FormatTokensBase, function(f) {\n var get = f.get, getPadded;\n if (f.lowerToken) {\n ldmlTokens[f.lowerToken] = buildLowercase(get);\n }\n if (f.ordinalToken) {\n ldmlTokens[f.ordinalToken] = buildOrdinal(get, f);\n }\n if (f.ldmlPaddedToken) {\n ldmlTokens[f.ldmlPaddedToken] = buildPadded(get, f.ldmlPaddedToken.length);\n }\n if (f.ldmlTwoDigitToken) {\n ldmlTokens[f.ldmlTwoDigitToken] = buildPadded(buildTwoDigits(get), 2);\n }\n if (f.strfTwoDigitToken) {\n strfTokens[f.strfTwoDigitToken] = buildPadded(buildTwoDigits(get), 2);\n }\n if (f.strfPadding) {\n getPadded = buildPadded(get, f.strfPadding);\n }\n if (f.alias) {\n get = buildAlias(f.alias);\n }\n if (f.allowAlternates) {\n buildAlternates(f);\n }\n addFormats(ldmlTokens, f.ldml, get);\n addFormats(strfTokens, f.strf, getPadded || get);\n });\n\n forEachProperty(CoreOutputFormats, function(src, name) {\n addFormats(ldmlTokens, name, buildAlias(src));\n });\n\n defineInstanceSimilar(sugarDate, 'short medium long full', function(methods, name) {\n var fn = getIdentityFormat(name);\n addFormats(ldmlTokens, name, fn);\n methods[name] = fn;\n });\n\n addFormats(ldmlTokens, 'time', getIdentityFormat('time'));\n addFormats(ldmlTokens, 'stamp', getIdentityFormat('stamp'));\n}\n\nvar dateFormatMatcher;\n\nfunction buildDateFormatMatcher() {\n\n function getLdml(d, token, localeCode) {\n return getOwn(ldmlTokens, token)(d, localeCode);\n }\n\n function getStrf(d, token, localeCode) {\n return getOwn(strfTokens, token)(d, localeCode);\n }\n\n function checkDateToken(ldml, strf) {\n return hasOwn(ldmlTokens, ldml) || hasOwn(strfTokens, strf);\n }\n\n // Format matcher for LDML or STRF tokens.\n dateFormatMatcher = createFormatMatcher(getLdml, getStrf, checkDateToken);\n}\n\nbuildDateFormatTokens();\n\nbuildDateFormatMatcher();\n\nmodule.exports = {\n ldmlTokens: ldmlTokens,\n strfTokens: strfTokens,\n dateFormatMatcher: dateFormatMatcher\n};","'use strict';\n\nvar Sugar = require('sugar-core'),\n dateFormat = require('./internal/dateFormat');\n\nSugar.Date.defineInstance({\n\n 'format': function(date, f, localeCode) {\n return dateFormat(date, f, localeCode);\n }\n\n});\n\nmodule.exports = Sugar.Date.format;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.endOfYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.endOfWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.endOfMonth;","'use strict';\n\nvar Sugar = require('sugar-core'),\n DateUnitIndexes = require('./var/DateUnitIndexes'),\n getWeekday = require('./internal/getWeekday'),\n setWeekday = require('./internal/setWeekday'),\n moveToEndOfUnit = require('./internal/moveToEndOfUnit');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nSugar.Date.defineInstance({\n\n 'endOfISOWeek': function(date) {\n if (getWeekday(date) !== 0) {\n setWeekday(date, 7);\n }\n return moveToEndOfUnit(date, DAY_INDEX);\n }\n\n});\n\nmodule.exports = Sugar.Date.endOfISOWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.endOfDay;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.daysUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.daysSince;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getDaysInMonth = require('./internal/getDaysInMonth');\n\nSugar.Date.defineInstance({\n\n 'daysInMonth': function(date) {\n return getDaysInMonth(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.daysInMonth;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.daysFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.daysAgo;","'use strict';\n\nvar Sugar = require('sugar-core'),\n cloneDate = require('./internal/cloneDate');\n\nSugar.Date.defineInstance({\n\n 'clone': function(date) {\n return cloneDate(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.clone;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.beginningOfYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.beginningOfWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.beginningOfMonth;","'use strict';\n\nvar Sugar = require('sugar-core'),\n resetTime = require('./internal/resetTime'),\n getWeekday = require('./internal/getWeekday'),\n setWeekday = require('./internal/setWeekday');\n\nSugar.Date.defineInstance({\n\n 'beginningOfISOWeek': function(date) {\n var day = getWeekday(date);\n if (day === 0) {\n day = -6;\n } else if (day !== 1) {\n day = 1;\n }\n setWeekday(date, day);\n return resetTime(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.beginningOfISOWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.beginningOfDay;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n isDefined = require('../../common/internal/isDefined'),\n walkUnitDown = require('./walkUnitDown');\n\nvar YEAR_INDEX = DateUnitIndexes.YEAR_INDEX;\n\nfunction collectDateParamsFromArguments(args) {\n var params = {}, index = 0;\n walkUnitDown(YEAR_INDEX, function(unit) {\n var arg = args[index++];\n if (isDefined(arg)) {\n params[unit.name] = arg;\n }\n });\n return params;\n}\n\nmodule.exports = collectDateParamsFromArguments;","'use strict';\n\nvar isUndefined = require('../../common/internal/isUndefined');\n\nfunction getDateParamsFromString(str) {\n var match, num, params = {};\n match = str.match(/^(-?\\d*[\\d.]\\d*)?\\s?(\\w+?)s?$/i);\n if (match) {\n if (isUndefined(num)) {\n num = +match[1];\n if (isNaN(num)) {\n num = 1;\n }\n }\n params[match[2].toLowerCase()] = num;\n }\n return params;\n}\n\nmodule.exports = getDateParamsFromString;","'use strict';\n\nvar Sugar = require('sugar-core'),\n advanceDateWithArgs = require('./internal/advanceDateWithArgs');\n\nSugar.Date.defineInstanceWithArguments({\n\n 'advance': function(d, args) {\n return advanceDateWithArgs(d, args, 1);\n }\n\n});\n\nmodule.exports = Sugar.Date.advance;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addYears;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addWeeks;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addSeconds;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addMonths;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addMinutes;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addMilliseconds;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addHours;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n forEach = require('../../common/internal/forEach'),\n compareDate = require('./compareDate'),\n advanceDate = require('./advanceDate'),\n moveToEndOfUnit = require('./moveToEndOfUnit'),\n simpleCapitalize = require('../../common/internal/simpleCapitalize'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n defineInstanceSimilar = require('../../common/internal/defineInstanceSimilar'),\n moveToBeginningOfUnit = require('./moveToBeginningOfUnit'),\n createDateWithContext = require('./createDateWithContext'),\n getTimeDistanceForUnit = require('./getTimeDistanceForUnit');\n\nvar sugarDate = namespaceAliases.sugarDate,\n HOURS_INDEX = DateUnitIndexes.HOURS_INDEX,\n DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nfunction buildDateUnitMethods() {\n\n defineInstanceSimilar(sugarDate, DateUnits, function(methods, unit, index) {\n var name = unit.name, caps = simpleCapitalize(name);\n\n if (index > DAY_INDEX) {\n forEach(['Last','This','Next'], function(shift) {\n methods['is' + shift + caps] = function(d, localeCode) {\n return compareDate(d, shift + ' ' + name, 0, localeCode, { locale: 'en' });\n };\n });\n }\n if (index > HOURS_INDEX) {\n methods['beginningOf' + caps] = function(d, localeCode) {\n return moveToBeginningOfUnit(d, index, localeCode);\n };\n methods['endOf' + caps] = function(d, localeCode) {\n return moveToEndOfUnit(d, index, localeCode);\n };\n }\n\n methods['add' + caps + 's'] = function(d, num, reset) {\n return advanceDate(d, name, num, reset);\n };\n\n var since = function(date, d, options) {\n return getTimeDistanceForUnit(date, createDateWithContext(date, d, options, true), unit);\n };\n var until = function(date, d, options) {\n return getTimeDistanceForUnit(createDateWithContext(date, d, options, true), date, unit);\n };\n\n methods[name + 'sAgo'] = methods[name + 'sUntil'] = until;\n methods[name + 'sSince'] = methods[name + 'sFromNow'] = since;\n\n });\n\n}\n\nmodule.exports = buildDateUnitMethods;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addDays;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearsBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearsAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.years;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.year;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeksFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeksBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeksAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeksAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeks;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weekFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weekBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weekAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weekAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.week;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondsBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondsAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.seconds;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.second;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthsBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthsAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.months;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.month;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutesFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutesBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutesAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutesAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutes;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minuteFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minuteBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minuteAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minuteAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minute;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondsBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondsAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.milliseconds;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecond;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hoursFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hoursBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hoursAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hoursAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hours;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hourFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hourBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hourAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hourAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hour;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('../date/var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Number.defineInstance({\n\n 'duration': function(n, localeCode) {\n return localeManager.get(localeCode).getDuration(n);\n }\n\n});\n\nmodule.exports = Sugar.Number.duration;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.daysFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.daysBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.daysAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.daysAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.days;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.dayFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.dayBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.dayAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.dayAfter;","'use strict';\n\nvar forEach = require('./forEach'),\n spaceSplit = require('./spaceSplit'),\n classChecks = require('../var/classChecks');\n\nvar isString = classChecks.isString;\n\nfunction collectSimilarMethods(set, fn) {\n var methods = {};\n if (isString(set)) {\n set = spaceSplit(set);\n }\n forEach(set, function(el, i) {\n fn(methods, el, i);\n });\n return methods;\n}\n\nmodule.exports = collectSimilarMethods;","'use strict';\n\nfunction wrapNamespace(method) {\n return function(sugarNamespace, arg1, arg2) {\n sugarNamespace[method](arg1, arg2);\n };\n}\n\nmodule.exports = wrapNamespace;","'use strict';\n\nvar wrapNamespace = require('../internal/wrapNamespace');\n\nmodule.exports = {\n alias: wrapNamespace('alias'),\n defineStatic: wrapNamespace('defineStatic'),\n defineInstance: wrapNamespace('defineInstance'),\n defineStaticPolyfill: wrapNamespace('defineStaticPolyfill'),\n defineInstancePolyfill: wrapNamespace('defineInstancePolyfill'),\n defineInstanceAndStatic: wrapNamespace('defineInstanceAndStatic'),\n defineInstanceWithArguments: wrapNamespace('defineInstanceWithArguments')\n};","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n createDate = require('./createDate'),\n mathAliases = require('../../common/var/mathAliases'),\n advanceDate = require('./advanceDate'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n defineInstanceSimilar = require('../../common/internal/defineInstanceSimilar');\n\nvar sugarNumber = namespaceAliases.sugarNumber,\n round = mathAliases.round;\n\nfunction buildNumberUnitMethods() {\n defineInstanceSimilar(sugarNumber, DateUnits, function(methods, unit) {\n var name = unit.name, base, after, before;\n base = function(n) {\n return round(n * unit.multiplier);\n };\n after = function(n, d, options) {\n return advanceDate(createDate(d, options, true), name, n);\n };\n before = function(n, d, options) {\n return advanceDate(createDate(d, options, true), name, -n);\n };\n methods[name] = base;\n methods[name + 's'] = base;\n methods[name + 'Before'] = before;\n methods[name + 'sBefore'] = before;\n methods[name + 'Ago'] = before;\n methods[name + 'sAgo'] = before;\n methods[name + 'After'] = after;\n methods[name + 'sAfter'] = after;\n methods[name + 'FromNow'] = after;\n methods[name + 'sFromNow'] = after;\n });\n}\n\nmodule.exports = buildNumberUnitMethods;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.day;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'setLocale': function(code) {\n return localeManager.set(code);\n }\n\n});\n\nmodule.exports = Sugar.Date.setLocale;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'removeLocale': function(code) {\n return localeManager.remove(code);\n }\n\n});\n\nmodule.exports = Sugar.Date.removeLocale;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'getLocale': function(code) {\n return localeManager.get(code, !code);\n }\n\n});\n\nmodule.exports = Sugar.Date.getLocale;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'getAllLocales': function() {\n return localeManager.getAll();\n }\n\n});\n\nmodule.exports = Sugar.Date.getAllLocales;","'use strict';\n\nfunction getKeys(obj) {\n return Object.keys(obj);\n}\n\nmodule.exports = getKeys;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers'),\n getKeys = require('../common/internal/getKeys');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'getAllLocaleCodes': function() {\n return getKeys(localeManager.getAll());\n }\n\n});\n\nmodule.exports = Sugar.Date.getAllLocaleCodes;","'use strict';\n\nfunction setChainableConstructor(sugarNamespace, createFn) {\n sugarNamespace.prototype.constructor = function() {\n return createFn.apply(this, arguments);\n };\n}\n\nmodule.exports = setChainableConstructor;","'use strict';\n\nvar createDate = require('./createDate'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n setChainableConstructor = require('../../common/internal/setChainableConstructor');\n\nvar sugarDate = namespaceAliases.sugarDate;\n\nfunction setDateChainableConstructor() {\n setChainableConstructor(sugarDate, createDate);\n}\n\nmodule.exports = setDateChainableConstructor;","'use strict';\n\nvar setDateChainableConstructor = require('../internal/setDateChainableConstructor');\n\nsetDateChainableConstructor();","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n iterateOverDateParams = require('./iterateOverDateParams');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n YEAR_INDEX = DateUnitIndexes.YEAR_INDEX;\n\nfunction iterateOverHigherDateParams(params, fn) {\n iterateOverDateParams(params, fn, YEAR_INDEX, DAY_INDEX);\n}\n\nmodule.exports = iterateOverHigherDateParams;","'use strict';\n\nvar getYear = require('./getYear'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar abs = mathAliases.abs;\n\nfunction getYearFromAbbreviation(str, d, prefer) {\n // Following IETF here, adding 1900 or 2000 depending on the last two digits.\n // Note that this makes no accordance for what should happen after 2050, but\n // intentionally ignoring this for now. https://www.ietf.org/rfc/rfc2822.txt\n var val = +str, delta;\n val += val < 50 ? 2000 : 1900;\n if (prefer) {\n delta = val - getYear(d);\n if (delta / abs(delta) !== prefer) {\n val += prefer * 100;\n }\n }\n return val;\n}\n\nmodule.exports = getYearFromAbbreviation;","'use strict';\n\nfunction getParsingTokenValue(token, str) {\n var val;\n if (token.val) {\n val = token.val;\n } else if (token.sign) {\n val = str === '+' ? 1 : -1;\n } else if (token.bool) {\n val = !!val;\n } else {\n val = +str.replace(/,/, '.');\n }\n if (token.param === 'month') {\n val -= 1;\n }\n return val;\n}\n\nmodule.exports = getParsingTokenValue;","'use strict';\n\nvar getDateParamKey = require('./getDateParamKey');\n\nfunction deleteDateParam(params, key) {\n delete params[getDateParamKey(params, key)];\n}\n\nmodule.exports = deleteDateParam;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar hasOwn = coreUtilityAliases.hasOwn;\n\nfunction getOwnKey(obj, key) {\n if (hasOwn(obj, key)) {\n return key;\n }\n}\n\nmodule.exports = getOwnKey;","'use strict';\n\nvar getDateParamKey = require('./getDateParamKey'),\n coreUtilityAliases = require('../../common/var/coreUtilityAliases');\n\nvar getOwn = coreUtilityAliases.getOwn;\n\nfunction getDateParam(params, key) {\n return getOwn(params, getDateParamKey(params, key));\n}\n\nmodule.exports = getDateParam;","'use strict';\n\nvar callDateSet = require('../../common/internal/callDateSet');\n\nfunction setMonth(d, val) {\n callDateSet(d, 'Month', val);\n}\n\nmodule.exports = setMonth;","'use strict';\n\nvar callDateSet = require('../../common/internal/callDateSet');\n\nfunction setYear(d, val) {\n callDateSet(d, 'FullYear', val);\n}\n\nmodule.exports = setYear;","'use strict';\n\nvar callDateSet = require('../../common/internal/callDateSet'),\n setISOWeekNumber = require('./setISOWeekNumber');\n\nfunction callDateSetWithWeek(d, method, value, safe) {\n if (method === 'ISOWeek') {\n setISOWeekNumber(d, value);\n } else {\n callDateSet(d, method, value, safe);\n }\n}\n\nmodule.exports = callDateSetWithWeek;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX;\n\nfunction getHigherUnitIndex(index) {\n return index === DAY_INDEX ? MONTH_INDEX : index + 1;\n}\n\nmodule.exports = getHigherUnitIndex;","'use strict';\n\nvar getLowerUnitIndex = require('./getLowerUnitIndex'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge');\n\nfunction resetLowerUnits(d, unitIndex) {\n return setUnitAndLowerToEdge(d, getLowerUnitIndex(unitIndex));\n}\n\nmodule.exports = resetLowerUnits;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar setProperty = coreUtilityAliases.setProperty;\n\nfunction defineAccessor(namespace, name, fn) {\n setProperty(namespace, name, fn);\n}\n\nmodule.exports = defineAccessor;","'use strict';\n\nvar simpleClone = require('./simpleClone'),\n defineAccessor = require('./defineAccessor'),\n coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar forEachProperty = coreUtilityAliases.forEachProperty;\n\nfunction defineOptionsAccessor(namespace, defaults) {\n var obj = simpleClone(defaults);\n\n function getOption(name) {\n return obj[name];\n }\n\n function setOption(arg1, arg2) {\n var options;\n if (arguments.length === 1) {\n options = arg1;\n } else {\n options = {};\n options[arg1] = arg2;\n }\n forEachProperty(options, function(val, name) {\n if (val === null) {\n val = defaults[name];\n }\n obj[name] = val;\n });\n }\n\n defineAccessor(namespace, 'getOption', getOption);\n defineAccessor(namespace, 'setOption', setOption);\n return getOption;\n}\n\nmodule.exports = defineOptionsAccessor;","'use strict';\n\nfunction defaultNewDate() {\n return new Date;\n}\n\nmodule.exports = defaultNewDate;","'use strict';\n\nvar defaultNewDate = require('../internal/defaultNewDate');\n\nvar DATE_OPTIONS = {\n 'newDateInternal': defaultNewDate\n};\n\nmodule.exports = DATE_OPTIONS;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate');\n\nrequire('./build/setDateChainableConstructorCall');\n\nSugar.Date.defineStatic({\n\n 'create': function(d, options) {\n return createDate(d, options);\n }\n\n});\n\nmodule.exports = Sugar.Date.create;","'use strict';\n\nvar LocalizedParsingTokens = require('../var/LocalizedParsingTokens'),\n getRegNonCapturing = require('./getRegNonCapturing');\n\nfunction getParsingTokenWithSuffix(field, src, suffix) {\n var token = LocalizedParsingTokens[field];\n if (token.requiresSuffix) {\n src = getRegNonCapturing(src + getRegNonCapturing(suffix));\n } else if (token.requiresSuffixOr) {\n src += getRegNonCapturing(token.requiresSuffixOr + '|' + suffix);\n } else {\n src += getRegNonCapturing(suffix, true);\n }\n return src;\n}\n\nmodule.exports = getParsingTokenWithSuffix;","'use strict';\n\nvar trunc = require('../../common/var/trunc'),\n withPrecision = require('../../common/internal/withPrecision'),\n getAdjustedUnit = require('./getAdjustedUnit');\n\nfunction getAdjustedUnitForNumber(ms) {\n return getAdjustedUnit(ms, function(unit) {\n return trunc(withPrecision(ms / unit.multiplier, 1));\n });\n}\n\nmodule.exports = getAdjustedUnitForNumber;","'use strict';\n\nfunction allCharsReg(src) {\n return RegExp('[' + src + ']', 'g');\n}\n\nmodule.exports = allCharsReg;","'use strict';\n\nvar CommonChars = require('./CommonChars'),\n chr = require('./chr'),\n allCharsReg = require('../internal/allCharsReg');\n\nvar HALF_WIDTH_ZERO = CommonChars.HALF_WIDTH_ZERO,\n FULL_WIDTH_ZERO = CommonChars.FULL_WIDTH_ZERO,\n HALF_WIDTH_PERIOD = CommonChars.HALF_WIDTH_PERIOD,\n FULL_WIDTH_PERIOD = CommonChars.FULL_WIDTH_PERIOD,\n HALF_WIDTH_COMMA = CommonChars.HALF_WIDTH_COMMA;\n\nvar fullWidthNumberReg, fullWidthNumberMap, fullWidthNumbers;\n\nfunction buildFullWidthNumber() {\n var fwp = FULL_WIDTH_PERIOD, hwp = HALF_WIDTH_PERIOD, hwc = HALF_WIDTH_COMMA, fwn = '';\n fullWidthNumberMap = {};\n for (var i = 0, digit; i <= 9; i++) {\n digit = chr(i + FULL_WIDTH_ZERO);\n fwn += digit;\n fullWidthNumberMap[digit] = chr(i + HALF_WIDTH_ZERO);\n }\n fullWidthNumberMap[hwc] = '';\n fullWidthNumberMap[fwp] = hwp;\n // Mapping this to itself to capture it easily\n // in stringToNumber to detect decimals later.\n fullWidthNumberMap[hwp] = hwp;\n fullWidthNumberReg = allCharsReg(fwn + fwp + hwc + hwp);\n fullWidthNumbers = fwn;\n}\n\nbuildFullWidthNumber();\n\nmodule.exports = {\n fullWidthNumberReg: fullWidthNumberReg,\n fullWidthNumberMap: fullWidthNumberMap,\n fullWidthNumbers: fullWidthNumbers\n};","'use strict';\n\nvar classChecks = require('../var/classChecks');\n\nvar isString = classChecks.isString;\n\nfunction escapeRegExp(str) {\n if (!isString(str)) str = String(str);\n return str.replace(/([\\\\\\/\\'*+?|()\\[\\]{}.^$-])/g,'\\\\$1');\n}\n\nmodule.exports = escapeRegExp;","'use strict';\n\nvar map = require('../../common/internal/map'),\n escapeRegExp = require('../../common/internal/escapeRegExp');\n\nfunction arrayToRegAlternates(arr) {\n var joined = arr.join('');\n if (!arr || !arr.length) {\n return '';\n }\n if (joined.length === arr.length) {\n return '[' + joined + ']';\n }\n // map handles sparse arrays so no need to compact the array here.\n return map(arr, escapeRegExp).join('|');\n}\n\nmodule.exports = arrayToRegAlternates;","'use strict';\n\nmodule.exports = '_sugar_';","'use strict';\n\nvar PRIVATE_PROP_PREFIX = require('../var/PRIVATE_PROP_PREFIX'),\n coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar setProperty = coreUtilityAliases.setProperty;\n\nfunction privatePropertyAccessor(key) {\n var privateKey = PRIVATE_PROP_PREFIX + key;\n return function(obj, val) {\n if (arguments.length > 1) {\n setProperty(obj, privateKey, val);\n return obj;\n }\n return obj[privateKey];\n };\n}\n\nmodule.exports = privatePropertyAccessor;","'use strict';\n\nfunction getArrayWithOffset(arr, n, alternate, offset) {\n var val;\n if (alternate > 1) {\n val = arr[n + (alternate - 1) * offset];\n }\n return val || arr[n];\n}\n\nmodule.exports = getArrayWithOffset;","'use strict';\n\nfunction getOrdinalSuffix(num) {\n if (num >= 11 && num <= 13) {\n return 'th';\n } else {\n switch(num % 10) {\n case 1: return 'st';\n case 2: return 'nd';\n case 3: return 'rd';\n default: return 'th';\n }\n }\n}\n\nmodule.exports = getOrdinalSuffix;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar hasOwn = coreUtilityAliases.hasOwn;\n\nfunction hasValidPlainObjectPrototype(obj) {\n var hasToString = 'toString' in obj;\n var hasConstructor = 'constructor' in obj;\n // An object created with Object.create(null) has no methods in the\n // prototype chain, so check if any are missing. The additional hasToString\n // check is for false positives on some host objects in old IE which have\n // toString but no constructor. If the object has an inherited constructor,\n // then check if it is Object (the \"isPrototypeOf\" tapdance here is a more\n // robust way of ensuring this if the global has been hijacked). Note that\n // accessing the constructor directly (without \"in\" or \"hasOwnProperty\")\n // will throw a permissions error in IE8 on cross-domain windows.\n return (!hasConstructor && !hasToString) ||\n (hasConstructor && !hasOwn(obj, 'constructor') &&\n hasOwn(obj.constructor.prototype, 'isPrototypeOf'));\n}\n\nmodule.exports = hasValidPlainObjectPrototype;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar hasOwn = coreUtilityAliases.hasOwn;\n\nfunction hasOwnEnumeratedProperties(obj) {\n // Plain objects are generally defined as having enumerated properties\n // all their own, however in early IE environments without defineProperty,\n // there may also be enumerated methods in the prototype chain, so check\n // for both of these cases.\n var objectProto = Object.prototype;\n for (var key in obj) {\n var val = obj[key];\n if (!hasOwn(obj, key) && val !== objectProto[key]) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = hasOwnEnumeratedProperties;","'use strict';\n\nvar isClass = require('./isClass'),\n isObjectType = require('./isObjectType'),\n hasOwnEnumeratedProperties = require('./hasOwnEnumeratedProperties'),\n hasValidPlainObjectPrototype = require('./hasValidPlainObjectPrototype');\n\nfunction isPlainObject(obj, className) {\n return isObjectType(obj) &&\n isClass(obj, 'Object', className) &&\n hasValidPlainObjectPrototype(obj) &&\n hasOwnEnumeratedProperties(obj);\n}\n\nmodule.exports = isPlainObject;","'use strict';\n\nmodule.exports = 'Boolean Number String Date RegExp Function Array Error Set Map';","'use strict';\n\nvar CommonChars = require('../var/CommonChars');\n\nvar HALF_WIDTH_COMMA = CommonChars.HALF_WIDTH_COMMA;\n\nfunction commaSplit(str) {\n return str.split(HALF_WIDTH_COMMA);\n}\n\nmodule.exports = commaSplit;","'use strict';\n\nfunction isArrayIndex(n) {\n return n >>> 0 == n && n != 0xFFFFFFFF;\n}\n\nmodule.exports = isArrayIndex;","'use strict';\n\nvar isArrayIndex = require('./isArrayIndex');\n\nfunction getSparseArrayIndexes(arr, fromIndex, loop, fromRight) {\n var indexes = [], i;\n for (i in arr) {\n if (isArrayIndex(i) && (loop || (fromRight ? i <= fromIndex : i >= fromIndex))) {\n indexes.push(+i);\n }\n }\n indexes.sort(function(a, b) {\n var aLoop = a > fromIndex;\n var bLoop = b > fromIndex;\n if (aLoop !== bLoop) {\n return aLoop ? -1 : 1;\n }\n return a - b;\n });\n return indexes;\n}\n\nmodule.exports = getSparseArrayIndexes;","'use strict';\n\nvar getSparseArrayIndexes = require('./getSparseArrayIndexes');\n\nfunction iterateOverSparseArray(arr, fn, fromIndex, loop) {\n var indexes = getSparseArrayIndexes(arr, fromIndex, loop), index;\n for (var i = 0, len = indexes.length; i < len; i++) {\n index = indexes[i];\n fn.call(arr, arr[index], index, arr);\n }\n return arr;\n}\n\nmodule.exports = iterateOverSparseArray;","'use strict';\n\nfunction filter(arr, fn) {\n var result = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n var el = arr[i];\n if (i in arr && fn(el, i)) {\n result.push(el);\n }\n }\n return result;\n}\n\nmodule.exports = filter;","'use strict';\n\nvar CoreParsingFormats = [\n {\n // 12-1978\n // 08-1978 (MDY)\n src: '{MM}[-.\\\\/]{yyyy}'\n },\n {\n // 12/08/1978\n // 08/12/1978 (MDY)\n time: true,\n src: '{dd}[-.\\\\/]{MM}(?:[-.\\\\/]{yyyy|yy|y})?',\n mdy: '{MM}[-.\\\\/]{dd}(?:[-.\\\\/]{yyyy|yy|y})?'\n },\n {\n // 1975-08-25\n time: true,\n src: '{yyyy}[-.\\\\/]{MM}(?:[-.\\\\/]{dd})?'\n },\n {\n // .NET JSON\n src: '\\\\\\\\/Date\\\\({timestamp}(?:[+-]\\\\d{4,4})?\\\\)\\\\\\\\/'\n },\n {\n // ISO-8601\n src: '{yearSign?}{yyyy}(?:-?{MM}(?:-?{dd}(?:T{ihh}(?::?{imm}(?::?{ss})?)?)?)?)?{tzOffset?}'\n }\n];\n\nmodule.exports = CoreParsingFormats;","'use strict';\n\nvar LOCALE_ARRAY_FIELDS = [\n 'months', 'weekdays', 'units', 'numerals', 'placeholders',\n 'articles', 'tokens', 'timeMarkers', 'ampm', 'timeSuffixes',\n 'parse', 'timeParse', 'timeFrontParse', 'modifiers'\n];\n\nmodule.exports = LOCALE_ARRAY_FIELDS;","'use strict';\n\nvar LOCALE_ARRAY_FIELDS = require('../var/LOCALE_ARRAY_FIELDS'),\n ISODefaults = require('../var/ISODefaults'),\n ParsingTokens = require('../var/ParsingTokens'),\n CoreParsingFormats = require('../var/CoreParsingFormats'),\n LocalizedParsingTokens = require('../var/LocalizedParsingTokens'),\n map = require('../../common/internal/map'),\n filter = require('../../common/internal/filter'),\n forEach = require('../../common/internal/forEach'),\n isDefined = require('../../common/internal/isDefined'),\n commaSplit = require('../../common/internal/commaSplit'),\n classChecks = require('../../common/var/classChecks'),\n isUndefined = require('../../common/internal/isUndefined'),\n mathAliases = require('../../common/var/mathAliases'),\n simpleMerge = require('../../common/internal/simpleMerge'),\n getOrdinalSuffix = require('../../common/internal/getOrdinalSuffix'),\n getRegNonCapturing = require('./getRegNonCapturing'),\n coreUtilityAliases = require('../../common/var/coreUtilityAliases'),\n getArrayWithOffset = require('./getArrayWithOffset'),\n iterateOverDateUnits = require('./iterateOverDateUnits'),\n arrayToRegAlternates = require('./arrayToRegAlternates'),\n fullwidthNumberHelpers = require('../../common/var/fullwidthNumberHelpers'),\n getAdjustedUnitForNumber = require('./getAdjustedUnitForNumber'),\n getParsingTokenWithSuffix = require('./getParsingTokenWithSuffix');\n\nvar getOwn = coreUtilityAliases.getOwn,\n forEachProperty = coreUtilityAliases.forEachProperty,\n fullWidthNumberMap = fullwidthNumberHelpers.fullWidthNumberMap,\n fullWidthNumbers = fullwidthNumberHelpers.fullWidthNumbers,\n pow = mathAliases.pow,\n max = mathAliases.max,\n ISO_FIRST_DAY_OF_WEEK = ISODefaults.ISO_FIRST_DAY_OF_WEEK,\n ISO_FIRST_DAY_OF_WEEK_YEAR = ISODefaults.ISO_FIRST_DAY_OF_WEEK_YEAR,\n isString = classChecks.isString,\n isFunction = classChecks.isFunction;\n\nfunction getNewLocale(def) {\n\n function Locale(def) {\n this.init(def);\n }\n\n Locale.prototype = {\n\n getMonthName: function(n, alternate) {\n if (this.monthSuffix) {\n return (n + 1) + this.monthSuffix;\n }\n return getArrayWithOffset(this.months, n, alternate, 12);\n },\n\n getWeekdayName: function(n, alternate) {\n return getArrayWithOffset(this.weekdays, n, alternate, 7);\n },\n\n getTokenValue: function(field, str) {\n var map = this[field + 'Map'], val;\n if (map) {\n val = map[str];\n }\n if (isUndefined(val)) {\n val = this.getNumber(str);\n if (field === 'month') {\n // Months are the only numeric date field\n // whose value is not the same as its number.\n val -= 1;\n }\n }\n return val;\n },\n\n getNumber: function(str) {\n var num = this.numeralMap[str];\n if (isDefined(num)) {\n return num;\n }\n // The unary plus operator here show better performance and handles\n // every format that parseFloat does with the exception of trailing\n // characters, which are guaranteed not to be in our string at this point.\n num = +str.replace(/,/, '.');\n if (!isNaN(num)) {\n return num;\n }\n num = this.getNumeralValue(str);\n if (!isNaN(num)) {\n this.numeralMap[str] = num;\n return num;\n }\n return num;\n },\n\n getNumeralValue: function(str) {\n var place = 1, num = 0, lastWasPlace, isPlace, numeral, digit, arr;\n // Note that \"numerals\" that need to be converted through this method are\n // all considered to be single characters in order to handle CJK. This\n // method is by no means unique to CJK, but the complexity of handling\n // inflections in non-CJK languages adds too much overhead for not enough\n // value, so avoiding for now.\n arr = str.split('');\n for (var i = arr.length - 1; numeral = arr[i]; i--) {\n digit = getOwn(this.numeralMap, numeral);\n if (isUndefined(digit)) {\n digit = getOwn(fullWidthNumberMap, numeral) || 0;\n }\n isPlace = digit > 0 && digit % 10 === 0;\n if (isPlace) {\n if (lastWasPlace) {\n num += place;\n }\n if (i) {\n place = digit;\n } else {\n num += digit;\n }\n } else {\n num += digit * place;\n place *= 10;\n }\n lastWasPlace = isPlace;\n }\n return num;\n },\n\n getOrdinal: function(n) {\n var suffix = this.ordinalSuffix;\n return suffix || getOrdinalSuffix(n);\n },\n\n getRelativeFormat: function(adu, type) {\n return this.convertAdjustedToFormat(adu, type);\n },\n\n getDuration: function(ms) {\n return this.convertAdjustedToFormat(getAdjustedUnitForNumber(max(0, ms)), 'duration');\n },\n\n getFirstDayOfWeek: function() {\n var val = this.firstDayOfWeek;\n return isDefined(val) ? val : ISO_FIRST_DAY_OF_WEEK;\n },\n\n getFirstDayOfWeekYear: function() {\n return this.firstDayOfWeekYear || ISO_FIRST_DAY_OF_WEEK_YEAR;\n },\n\n convertAdjustedToFormat: function(adu, type) {\n var sign, unit, mult,\n num = adu[0],\n u = adu[1],\n ms = adu[2],\n format = this[type] || this.relative;\n if (isFunction(format)) {\n return format.call(this, num, u, ms, type);\n }\n mult = !this.plural || num === 1 ? 0 : 1;\n unit = this.units[mult * 8 + u] || this.units[u];\n sign = this[ms > 0 ? 'fromNow' : 'ago'];\n return format.replace(/\\{(.*?)\\}/g, function(full, match) {\n switch(match) {\n case 'num': return num;\n case 'unit': return unit;\n case 'sign': return sign;\n }\n });\n },\n\n cacheFormat: function(dif, i) {\n this.compiledFormats.splice(i, 1);\n this.compiledFormats.unshift(dif);\n },\n\n addFormat: function(src, to) {\n var loc = this;\n\n function getTokenSrc(str) {\n var suffix, src, val,\n opt = str.match(/\\?$/),\n nc = str.match(/^(\\d+)\\??$/),\n slice = str.match(/(\\d)(?:-(\\d))?/),\n key = str.replace(/[^a-z]+$/i, '');\n\n // Allowing alias tokens such as {time}\n if (val = getOwn(loc.parsingAliases, key)) {\n src = replaceParsingTokens(val);\n if (opt) {\n src = getRegNonCapturing(src, true);\n }\n return src;\n }\n\n if (nc) {\n src = loc.tokens[nc[1]];\n } else if (val = getOwn(ParsingTokens, key)) {\n src = val.src;\n } else {\n val = getOwn(loc.parsingTokens, key) || getOwn(loc, key);\n\n // Both the \"months\" array and the \"month\" parsing token can be accessed\n // by either {month} or {months}, falling back as necessary, however\n // regardless of whether or not a fallback occurs, the final field to\n // be passed to addRawFormat must be normalized as singular.\n key = key.replace(/s$/, '');\n\n if (!val) {\n val = getOwn(loc.parsingTokens, key) || getOwn(loc, key + 's');\n }\n\n if (isString(val)) {\n src = val;\n suffix = loc[key + 'Suffix'];\n } else {\n if (slice) {\n val = filter(val, function(m, i) {\n var mod = i % (loc.units ? 8 : val.length);\n return mod >= slice[1] && mod <= (slice[2] || slice[1]);\n });\n }\n src = arrayToRegAlternates(val);\n }\n }\n if (!src) {\n return '';\n }\n if (nc) {\n // Non-capturing tokens like {0}\n src = getRegNonCapturing(src);\n } else {\n // Capturing group and add to parsed tokens\n to.push(key);\n src = '(' + src + ')';\n }\n if (suffix) {\n // Date/time suffixes such as those in CJK\n src = getParsingTokenWithSuffix(key, src, suffix);\n }\n if (opt) {\n src += '?';\n }\n return src;\n }\n\n function replaceParsingTokens(str) {\n\n // Make spaces optional\n str = str.replace(/ /g, ' ?');\n\n return str.replace(/\\{([^,]+?)\\}/g, function(match, token) {\n var tokens = token.split('|'), src;\n if (tokens.length > 1) {\n src = getRegNonCapturing(map(tokens, getTokenSrc).join('|'));\n } else {\n src = getTokenSrc(token);\n }\n return src;\n });\n }\n\n if (!to) {\n to = [];\n src = replaceParsingTokens(src);\n }\n\n loc.addRawFormat(src, to);\n },\n\n addRawFormat: function(format, to) {\n this.compiledFormats.unshift({\n reg: RegExp('^ *' + format + ' *$', 'i'),\n to: to\n });\n },\n\n init: function(def) {\n var loc = this;\n\n // -- Initialization helpers\n\n function initFormats() {\n loc.compiledFormats = [];\n loc.parsingAliases = {};\n loc.parsingTokens = {};\n }\n\n function initDefinition() {\n simpleMerge(loc, def);\n }\n\n function initArrayFields() {\n forEach(LOCALE_ARRAY_FIELDS, function(name) {\n var val = loc[name];\n if (isString(val)) {\n loc[name] = commaSplit(val);\n } else if (!val) {\n loc[name] = [];\n }\n });\n }\n\n // -- Value array build helpers\n\n function buildValueArray(name, mod, map, fn) {\n var field = name, all = [], setMap;\n if (!loc[field]) {\n field += 's';\n }\n if (!map) {\n map = {};\n setMap = true;\n }\n forAllAlternates(field, function(alt, j, i) {\n var idx = j * mod + i, val;\n val = fn ? fn(i) : i;\n map[alt] = val;\n map[alt.toLowerCase()] = val;\n all[idx] = alt;\n });\n loc[field] = all;\n if (setMap) {\n loc[name + 'Map'] = map;\n }\n }\n\n function forAllAlternates(field, fn) {\n forEach(loc[field], function(str, i) {\n forEachAlternate(str, function(alt, j) {\n fn(alt, j, i);\n });\n });\n }\n\n function forEachAlternate(str, fn) {\n var arr = map(str.split('+'), function(split) {\n return split.replace(/(.+):(.+)$/, function(full, base, suffixes) {\n return map(suffixes.split('|'), function(suffix) {\n return base + suffix;\n }).join('|');\n });\n }).join('|');\n forEach(arr.split('|'), fn);\n }\n\n function buildNumerals() {\n var map = {};\n buildValueArray('numeral', 10, map);\n buildValueArray('article', 1, map, function() {\n return 1;\n });\n buildValueArray('placeholder', 4, map, function(n) {\n return pow(10, n + 1);\n });\n loc.numeralMap = map;\n }\n\n function buildTimeFormats() {\n loc.parsingAliases['time'] = getTimeFormat();\n loc.parsingAliases['tzOffset'] = getTZOffsetFormat();\n }\n\n function getTimeFormat() {\n var src;\n if (loc.ampmFront) {\n // \"ampmFront\" exists mostly for CJK locales, which also presume that\n // time suffixes exist, allowing this to be a simpler regex.\n src = '{ampm?} {hour} (?:{minute} (?::?{second})?)?';\n } else if(loc.ampm.length) {\n src = '{hour}(?:[.:]{minute}(?:[.:]{second})? {ampm?}| {ampm})';\n } else {\n src = '{hour}(?:[.:]{minute}(?:[.:]{second})?)';\n }\n return src;\n }\n\n function getTZOffsetFormat() {\n return '(?:{Z}|{GMT?}(?:{tzSign}{tzHour}(?::?{tzMinute}(?: \\\\([\\\\w\\\\s]+\\\\))?)?)?)?';\n }\n\n function buildParsingTokens() {\n forEachProperty(LocalizedParsingTokens, function(token, name) {\n var src, arr;\n src = token.base ? ParsingTokens[token.base].src : token.src;\n if (token.requiresNumerals || loc.numeralUnits) {\n src += getNumeralSrc();\n }\n arr = loc[name + 's'];\n if (arr && arr.length) {\n src += '|' + arrayToRegAlternates(arr);\n }\n loc.parsingTokens[name] = src;\n });\n }\n\n function getNumeralSrc() {\n var all, src = '';\n all = loc.numerals.concat(loc.placeholders).concat(loc.articles);\n if (loc.allowsFullWidth) {\n all = all.concat(fullWidthNumbers.split(''));\n }\n if (all.length) {\n src = '|(?:' + arrayToRegAlternates(all) + ')+';\n }\n return src;\n }\n\n function buildTimeSuffixes() {\n iterateOverDateUnits(function(unit, i) {\n var token = loc.timeSuffixes[i];\n if (token) {\n loc[(unit.alias || unit.name) + 'Suffix'] = token;\n }\n });\n }\n\n function buildModifiers() {\n forEach(loc.modifiers, function(modifier) {\n var name = modifier.name, mapKey = name + 'Map', map;\n map = loc[mapKey] || {};\n forEachAlternate(modifier.src, function(alt, j) {\n var token = getOwn(loc.parsingTokens, name), val = modifier.value;\n map[alt] = val;\n loc.parsingTokens[name] = token ? token + '|' + alt : alt;\n if (modifier.name === 'sign' && j === 0) {\n // Hooking in here to set the first \"fromNow\" or \"ago\" modifier\n // directly on the locale, so that it can be reused in the\n // relative format.\n loc[val === 1 ? 'fromNow' : 'ago'] = alt;\n }\n });\n loc[mapKey] = map;\n });\n }\n\n // -- Format adding helpers\n\n function addCoreFormats() {\n forEach(CoreParsingFormats, function(df) {\n var src = df.src;\n if (df.mdy && loc.mdy) {\n // Use the mm/dd/yyyy variant if it\n // exists and the locale requires it\n src = df.mdy;\n }\n if (df.time) {\n // Core formats that allow time require the time\n // reg on both sides, so add both versions here.\n loc.addFormat(getFormatWithTime(src, true));\n loc.addFormat(getFormatWithTime(src));\n } else {\n loc.addFormat(src);\n }\n });\n loc.addFormat('{time}');\n }\n\n function addLocaleFormats() {\n addFormatSet('parse');\n addFormatSet('timeParse', true);\n addFormatSet('timeFrontParse', true, true);\n }\n\n function addFormatSet(field, allowTime, timeFront) {\n forEach(loc[field], function(format) {\n if (allowTime) {\n format = getFormatWithTime(format, timeFront);\n }\n loc.addFormat(format);\n });\n }\n\n function getFormatWithTime(baseFormat, timeBefore) {\n if (timeBefore) {\n return getTimeBefore() + baseFormat;\n }\n return baseFormat + getTimeAfter();\n }\n\n function getTimeBefore() {\n return getRegNonCapturing('{time}[,\\\\s\\\\u3000]', true);\n }\n\n function getTimeAfter() {\n var markers = ',?[\\\\s\\\\u3000]', localized;\n localized = arrayToRegAlternates(loc.timeMarkers);\n if (localized) {\n markers += '| (?:' + localized + ') ';\n }\n markers = getRegNonCapturing(markers, loc.timeMarkerOptional);\n return getRegNonCapturing(markers + '{time}', true);\n }\n\n initFormats();\n initDefinition();\n initArrayFields();\n\n buildValueArray('month', 12);\n buildValueArray('weekday', 7);\n buildValueArray('unit', 8);\n buildValueArray('ampm', 2);\n\n buildNumerals();\n buildTimeFormats();\n buildParsingTokens();\n buildTimeSuffixes();\n buildModifiers();\n\n // The order of these formats is important. Order is reversed so formats\n // that are initialized later will take precedence. Generally, this means\n // that more specific formats should come later.\n addCoreFormats();\n addLocaleFormats();\n\n }\n\n };\n\n return new Locale(def);\n}\n\nmodule.exports = getNewLocale;","'use strict';\n\nvar getEnglishVariant = require('../internal/getEnglishVariant');\n\nvar CanadianEnglishDefinition = getEnglishVariant({\n 'short': '{yyyy}-{MM}-{dd}',\n 'medium': '{d} {Month}, {yyyy}',\n 'long': '{d} {Month}, {yyyy} {H}:{mm}',\n 'full': '{Weekday}, {d} {Month}, {yyyy} {time}',\n 'stamp': '{Dow} {d} {Mon} {yyyy} {time}'\n});\n\nmodule.exports = CanadianEnglishDefinition;","'use strict';\n\nvar EnglishLocaleBaseDefinition = {\n 'code': 'en',\n 'plural': true,\n 'timeMarkers': 'at',\n 'ampm': 'AM|A.M.|a,PM|P.M.|p',\n 'units': 'millisecond:|s,second:|s,minute:|s,hour:|s,day:|s,week:|s,month:|s,year:|s',\n 'months': 'Jan:uary|,Feb:ruary|,Mar:ch|,Apr:il|,May,Jun:e|,Jul:y|,Aug:ust|,Sep:tember|t|,Oct:ober|,Nov:ember|,Dec:ember|',\n 'weekdays': 'Sun:day|,Mon:day|,Tue:sday|,Wed:nesday|,Thu:rsday|,Fri:day|,Sat:urday|+weekend',\n 'numerals': 'zero,one|first,two|second,three|third,four:|th,five|fifth,six:|th,seven:|th,eight:|h,nin:e|th,ten:|th',\n 'articles': 'a,an,the',\n 'tokens': 'the,st|nd|rd|th,of|in,a|an,on',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{num} {unit} {sign}',\n 'duration': '{num} {unit}',\n 'modifiers': [\n { 'name': 'half', 'src': 'half', 'value': .5 },\n { 'name': 'midday', 'src': 'noon', 'value': 12 },\n { 'name': 'midday', 'src': 'midnight', 'value': 24 },\n { 'name': 'day', 'src': 'yesterday', 'value': -1 },\n { 'name': 'day', 'src': 'today|tonight', 'value': 0 },\n { 'name': 'day', 'src': 'tomorrow', 'value': 1 },\n { 'name': 'sign', 'src': 'ago|before', 'value': -1 },\n { 'name': 'sign', 'src': 'from now|after|from|in|later', 'value': 1 },\n { 'name': 'edge', 'src': 'first day|first|beginning', 'value': -2 },\n { 'name': 'edge', 'src': 'last day', 'value': 1 },\n { 'name': 'edge', 'src': 'end|last', 'value': 2 },\n { 'name': 'shift', 'src': 'last', 'value': -1 },\n { 'name': 'shift', 'src': 'the|this', 'value': 0 },\n { 'name': 'shift', 'src': 'next', 'value': 1 }\n ],\n 'parse': [\n '(?:just)? now',\n '{shift} {unit:5-7}',\n \"{months?} (?:{year}|'{yy})\",\n '{midday} {4?} {day|weekday}',\n '{months},?(?:[-.\\\\/\\\\s]{year})?',\n '{edge} of (?:day)? {day|weekday}',\n '{0} {num}{1?} {weekday} {2} {months},? {year?}',\n '{shift?} {day?} {weekday?} {timeMarker?} {midday}',\n '{sign?} {3?} {half} {3?} {unit:3-4|unit:7} {sign?}',\n '{0?} {edge} {weekday?} {2} {shift?} {unit:4-7?} {months?},? {year?}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift} {unit:5?} {weekday}',\n '{0?} {date}{1?} {2?} {months?}',\n '{weekday} {2?} {shift} {unit:5}',\n '{0?} {num} {2?} {months}\\\\.?,? {year?}',\n '{num?} {unit:4-5} {sign} {day|weekday}',\n '{year}[-.\\\\/\\\\s]{months}[-.\\\\/\\\\s]{date}',\n '{0|months} {date?}{1?} of {shift} {unit:6-7}',\n '{0?} {num}{1?} {weekday} of {shift} {unit:6}',\n \"{date}[-.\\\\/\\\\s]{months}[-.\\\\/\\\\s](?:{year}|'?{yy})\",\n \"{weekday?}\\\\.?,? {months}\\\\.?,? {date}{1?},? (?:{year}|'{yy})?\"\n ],\n 'timeFrontParse': [\n '{sign} {num} {unit}',\n '{num} {unit} {sign}',\n '{4?} {day|weekday}'\n ]\n};\n\nmodule.exports = EnglishLocaleBaseDefinition;","'use strict';\n\nvar getEnglishVariant = require('../internal/getEnglishVariant');\n\nvar BritishEnglishDefinition = getEnglishVariant({\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} {Month} {yyyy}',\n 'long': '{d} {Month} {yyyy} {H}:{mm}',\n 'full': '{Weekday}, {d} {Month}, {yyyy} {time}',\n 'stamp': '{Dow} {d} {Mon} {yyyy} {time}'\n});\n\nmodule.exports = BritishEnglishDefinition;","'use strict';\n\nvar BritishEnglishDefinition = require('./BritishEnglishDefinition'),\n AmericanEnglishDefinition = require('./AmericanEnglishDefinition'),\n CanadianEnglishDefinition = require('./CanadianEnglishDefinition');\n\nvar LazyLoadedLocales = {\n 'en-US': AmericanEnglishDefinition,\n 'en-GB': BritishEnglishDefinition,\n 'en-AU': BritishEnglishDefinition,\n 'en-CA': CanadianEnglishDefinition\n};\n\nmodule.exports = LazyLoadedLocales;","'use strict';\n\n// Static Methods\nrequire('./addLocale');\nrequire('./create');\nrequire('./getAllLocaleCodes');\nrequire('./getAllLocales');\nrequire('./getLocale');\nrequire('./removeLocale');\nrequire('./setLocale');\n\n// Instance Methods\nrequire('../number/day');\nrequire('../number/dayAfter');\nrequire('../number/dayAgo');\nrequire('../number/dayBefore');\nrequire('../number/dayFromNow');\nrequire('../number/days');\nrequire('../number/daysAfter');\nrequire('../number/daysAgo');\nrequire('../number/daysBefore');\nrequire('../number/daysFromNow');\nrequire('../number/duration');\nrequire('../number/hour');\nrequire('../number/hourAfter');\nrequire('../number/hourAgo');\nrequire('../number/hourBefore');\nrequire('../number/hourFromNow');\nrequire('../number/hours');\nrequire('../number/hoursAfter');\nrequire('../number/hoursAgo');\nrequire('../number/hoursBefore');\nrequire('../number/hoursFromNow');\nrequire('../number/millisecond');\nrequire('../number/millisecondAfter');\nrequire('../number/millisecondAgo');\nrequire('../number/millisecondBefore');\nrequire('../number/millisecondFromNow');\nrequire('../number/milliseconds');\nrequire('../number/millisecondsAfter');\nrequire('../number/millisecondsAgo');\nrequire('../number/millisecondsBefore');\nrequire('../number/millisecondsFromNow');\nrequire('../number/minute');\nrequire('../number/minuteAfter');\nrequire('../number/minuteAgo');\nrequire('../number/minuteBefore');\nrequire('../number/minuteFromNow');\nrequire('../number/minutes');\nrequire('../number/minutesAfter');\nrequire('../number/minutesAgo');\nrequire('../number/minutesBefore');\nrequire('../number/minutesFromNow');\nrequire('../number/month');\nrequire('../number/monthAfter');\nrequire('../number/monthAgo');\nrequire('../number/monthBefore');\nrequire('../number/monthFromNow');\nrequire('../number/months');\nrequire('../number/monthsAfter');\nrequire('../number/monthsAgo');\nrequire('../number/monthsBefore');\nrequire('../number/monthsFromNow');\nrequire('../number/second');\nrequire('../number/secondAfter');\nrequire('../number/secondAgo');\nrequire('../number/secondBefore');\nrequire('../number/secondFromNow');\nrequire('../number/seconds');\nrequire('../number/secondsAfter');\nrequire('../number/secondsAgo');\nrequire('../number/secondsBefore');\nrequire('../number/secondsFromNow');\nrequire('../number/week');\nrequire('../number/weekAfter');\nrequire('../number/weekAgo');\nrequire('../number/weekBefore');\nrequire('../number/weekFromNow');\nrequire('../number/weeks');\nrequire('../number/weeksAfter');\nrequire('../number/weeksAgo');\nrequire('../number/weeksBefore');\nrequire('../number/weeksFromNow');\nrequire('../number/year');\nrequire('../number/yearAfter');\nrequire('../number/yearAgo');\nrequire('../number/yearBefore');\nrequire('../number/yearFromNow');\nrequire('../number/years');\nrequire('../number/yearsAfter');\nrequire('../number/yearsAgo');\nrequire('../number/yearsBefore');\nrequire('../number/yearsFromNow');\nrequire('./addDays');\nrequire('./addHours');\nrequire('./addMilliseconds');\nrequire('./addMinutes');\nrequire('./addMonths');\nrequire('./addSeconds');\nrequire('./addWeeks');\nrequire('./addYears');\nrequire('./advance');\nrequire('./beginningOfDay');\nrequire('./beginningOfISOWeek');\nrequire('./beginningOfMonth');\nrequire('./beginningOfWeek');\nrequire('./beginningOfYear');\nrequire('./clone');\nrequire('./daysAgo');\nrequire('./daysFromNow');\nrequire('./daysInMonth');\nrequire('./daysSince');\nrequire('./daysUntil');\nrequire('./endOfDay');\nrequire('./endOfISOWeek');\nrequire('./endOfMonth');\nrequire('./endOfWeek');\nrequire('./endOfYear');\nrequire('./format');\nrequire('./get');\nrequire('./getISOWeek');\nrequire('./getUTCOffset');\nrequire('./getUTCWeekday');\nrequire('./getWeekday');\nrequire('./hoursAgo');\nrequire('./hoursFromNow');\nrequire('./hoursSince');\nrequire('./hoursUntil');\nrequire('./is');\nrequire('./isAfter');\nrequire('./isBefore');\nrequire('./isBetween');\nrequire('./isFriday');\nrequire('./isFuture');\nrequire('./isLastMonth');\nrequire('./isLastWeek');\nrequire('./isLastYear');\nrequire('./isLeapYear');\nrequire('./isMonday');\nrequire('./isNextMonth');\nrequire('./isNextWeek');\nrequire('./isNextYear');\nrequire('./isPast');\nrequire('./isSaturday');\nrequire('./isSunday');\nrequire('./isThisMonth');\nrequire('./isThisWeek');\nrequire('./isThisYear');\nrequire('./isThursday');\nrequire('./isToday');\nrequire('./isTomorrow');\nrequire('./isTuesday');\nrequire('./isUTC');\nrequire('./isValid');\nrequire('./isWednesday');\nrequire('./isWeekday');\nrequire('./isWeekend');\nrequire('./isYesterday');\nrequire('./iso');\nrequire('./millisecondsAgo');\nrequire('./millisecondsFromNow');\nrequire('./millisecondsSince');\nrequire('./millisecondsUntil');\nrequire('./minutesAgo');\nrequire('./minutesFromNow');\nrequire('./minutesSince');\nrequire('./minutesUntil');\nrequire('./monthsAgo');\nrequire('./monthsFromNow');\nrequire('./monthsSince');\nrequire('./monthsUntil');\nrequire('./relative');\nrequire('./relativeTo');\nrequire('./reset');\nrequire('./rewind');\nrequire('./secondsAgo');\nrequire('./secondsFromNow');\nrequire('./secondsSince');\nrequire('./secondsUntil');\nrequire('./set');\nrequire('./setISOWeek');\nrequire('./setUTC');\nrequire('./setWeekday');\nrequire('./weeksAgo');\nrequire('./weeksFromNow');\nrequire('./weeksSince');\nrequire('./weeksUntil');\nrequire('./yearsAgo');\nrequire('./yearsFromNow');\nrequire('./yearsSince');\nrequire('./yearsUntil');\n\n// Accessors\nrequire('./getOption');\nrequire('./setOption');\n\nmodule.exports = require('sugar-core');","exports.remove = removeDiacritics;\n\nvar replacementList = [\n {\n base: ' ',\n chars: \"\\u00A0\",\n }, {\n base: '0',\n chars: \"\\u07C0\",\n }, {\n base: 'A',\n chars: \"\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F\",\n }, {\n base: 'AA',\n chars: \"\\uA732\",\n }, {\n base: 'AE',\n chars: \"\\u00C6\\u01FC\\u01E2\",\n }, {\n base: 'AO',\n chars: \"\\uA734\",\n }, {\n base: 'AU',\n chars: \"\\uA736\",\n }, {\n base: 'AV',\n chars: \"\\uA738\\uA73A\",\n }, {\n base: 'AY',\n chars: \"\\uA73C\",\n }, {\n base: 'B',\n chars: \"\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0181\",\n }, {\n base: 'C',\n chars: \"\\u24b8\\uff23\\uA73E\\u1E08\\u0106\\u0043\\u0108\\u010A\\u010C\\u00C7\\u0187\\u023B\",\n }, {\n base: 'D',\n chars: \"\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018A\\u0189\\u1D05\\uA779\",\n }, {\n base: 'Dh',\n chars: \"\\u00D0\",\n }, {\n base: 'DZ',\n chars: \"\\u01F1\\u01C4\",\n }, {\n base: 'Dz',\n chars: \"\\u01F2\\u01C5\",\n }, {\n base: 'E',\n chars: \"\\u025B\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E\\u1D07\",\n }, {\n base: 'F',\n chars: \"\\uA77C\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B\",\n }, {\n base: 'G',\n chars: \"\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E\\u0262\",\n }, {\n base: 'H',\n chars: \"\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D\",\n }, {\n base: 'I',\n chars: \"\\u24BE\\uFF29\\xCC\\xCD\\xCE\\u0128\\u012A\\u012C\\u0130\\xCF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197\",\n }, {\n base: 'J',\n chars: \"\\u24BF\\uFF2A\\u0134\\u0248\\u0237\",\n }, {\n base: 'K',\n chars: \"\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2\",\n }, {\n base: 'L',\n chars: \"\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780\",\n }, {\n base: 'LJ',\n chars: \"\\u01C7\",\n }, {\n base: 'Lj',\n chars: \"\\u01C8\",\n }, {\n base: 'M',\n chars: \"\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C\\u03FB\",\n }, {\n base: 'N',\n chars: \"\\uA7A4\\u0220\\u24C3\\uFF2E\\u01F8\\u0143\\xD1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u019D\\uA790\\u1D0E\",\n }, {\n base: 'NJ',\n chars: \"\\u01CA\",\n }, {\n base: 'Nj',\n chars: \"\\u01CB\",\n }, {\n base: 'O',\n chars: \"\\u24C4\\uFF2F\\xD2\\xD3\\xD4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\xD5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\xD6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\xD8\\u01FE\\u0186\\u019F\\uA74A\\uA74C\",\n }, {\n base: 'OE',\n chars: \"\\u0152\",\n }, {\n base: 'OI',\n chars: \"\\u01A2\",\n }, {\n base: 'OO',\n chars: \"\\uA74E\",\n }, {\n base: 'OU',\n chars: \"\\u0222\",\n }, {\n base: 'P',\n chars: \"\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754\",\n }, {\n base: 'Q',\n chars: \"\\u24C6\\uFF31\\uA756\\uA758\\u024A\",\n }, {\n base: 'R',\n chars: \"\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782\",\n }, {\n base: 'S',\n chars: \"\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784\",\n }, {\n base: 'T',\n chars: \"\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786\",\n }, {\n base: 'Th',\n chars: \"\\u00DE\",\n }, {\n base: 'TZ',\n chars: \"\\uA728\",\n }, {\n base: 'U',\n chars: \"\\u24CA\\uFF35\\xD9\\xDA\\xDB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\xDC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244\",\n }, {\n base: 'V',\n chars: \"\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245\",\n }, {\n base: 'VY',\n chars: \"\\uA760\",\n }, {\n base: 'W',\n chars: \"\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72\",\n }, {\n base: 'X',\n chars: \"\\u24CD\\uFF38\\u1E8A\\u1E8C\",\n }, {\n base: 'Y',\n chars: \"\\u24CE\\uFF39\\u1EF2\\xDD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE\",\n }, {\n base: 'Z',\n chars: \"\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762\",\n }, {\n base: 'a',\n chars: \"\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250\\u0251\",\n }, {\n base: 'aa',\n chars: \"\\uA733\",\n }, {\n base: 'ae',\n chars: \"\\u00E6\\u01FD\\u01E3\",\n }, {\n base: 'ao',\n chars: \"\\uA735\",\n }, {\n base: 'au',\n chars: \"\\uA737\",\n }, {\n base: 'av',\n chars: \"\\uA739\\uA73B\",\n }, {\n base: 'ay',\n chars: \"\\uA73D\",\n }, {\n base: 'b',\n chars: \"\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253\\u0182\",\n }, {\n base: 'c',\n chars: \"\\uFF43\\u24D2\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184\",\n }, {\n base: 'd',\n chars: \"\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\u018B\\u13E7\\u0501\\uA7AA\",\n }, {\n base: 'dh',\n chars: \"\\u00F0\",\n }, {\n base: 'dz',\n chars: \"\\u01F3\\u01C6\",\n }, {\n base: 'e',\n chars: \"\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u01DD\",\n }, {\n base: 'f',\n chars: \"\\u24D5\\uFF46\\u1E1F\\u0192\",\n }, {\n base: 'ff',\n chars: \"\\uFB00\",\n }, {\n base: 'fi',\n chars: \"\\uFB01\",\n }, {\n base: 'fl',\n chars: \"\\uFB02\",\n }, {\n base: 'ffi',\n chars: \"\\uFB03\",\n }, {\n base: 'ffl',\n chars: \"\\uFB04\",\n }, {\n base: 'g',\n chars: \"\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\uA77F\\u1D79\",\n }, {\n base: 'h',\n chars: \"\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265\",\n }, {\n base: 'hv',\n chars: \"\\u0195\",\n }, {\n base: 'i',\n chars: \"\\u24D8\\uFF49\\xEC\\xED\\xEE\\u0129\\u012B\\u012D\\xEF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131\",\n }, {\n base: 'j',\n chars: \"\\u24D9\\uFF4A\\u0135\\u01F0\\u0249\",\n }, {\n base: 'k',\n chars: \"\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3\",\n }, {\n base: 'l',\n chars: \"\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747\\u026D\",\n }, {\n base: 'lj',\n chars: \"\\u01C9\",\n }, {\n base: 'm',\n chars: \"\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F\",\n }, {\n base: 'n',\n chars: \"\\u24DD\\uFF4E\\u01F9\\u0144\\xF1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5\\u043B\\u0509\",\n }, {\n base: 'nj',\n chars: \"\\u01CC\",\n }, {\n base: 'o',\n chars: \"\\u24DE\\uFF4F\\xF2\\xF3\\xF4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\xF5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\xF6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\xF8\\u01FF\\uA74B\\uA74D\\u0275\\u0254\\u1D11\",\n }, {\n base: 'oe',\n chars: \"\\u0153\",\n }, {\n base: 'oi',\n chars: \"\\u01A3\",\n }, {\n base: 'oo',\n chars: \"\\uA74F\",\n }, {\n base: 'ou',\n chars: \"\\u0223\",\n }, {\n base: 'p',\n chars: \"\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755\\u03C1\",\n }, {\n base: 'q',\n chars: \"\\u24E0\\uFF51\\u024B\\uA757\\uA759\",\n }, {\n base: 'r',\n chars: \"\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783\",\n }, {\n base: 's',\n chars: \"\\u24E2\\uFF53\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B\\u0282\",\n }, {\n base: 'ss',\n chars: \"\\xDF\",\n }, {\n base: 't',\n chars: \"\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787\",\n }, {\n base: 'th',\n chars: \"\\u00FE\",\n }, {\n base: 'tz',\n chars: \"\\uA729\",\n }, {\n base: 'u',\n chars: \"\\u24E4\\uFF55\\xF9\\xFA\\xFB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\xFC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289\",\n }, {\n base: 'v',\n chars: \"\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C\",\n }, {\n base: 'vy',\n chars: \"\\uA761\",\n }, {\n base: 'w',\n chars: \"\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73\",\n }, {\n base: 'x',\n chars: \"\\u24E7\\uFF58\\u1E8B\\u1E8D\",\n }, {\n base: 'y',\n chars: \"\\u24E8\\uFF59\\u1EF3\\xFD\\u0177\\u1EF9\\u0233\\u1E8F\\xFF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF\",\n }, {\n base: 'z',\n chars: \"\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763\",\n }\n];\n\nvar diacriticsMap = {};\nfor (var i = 0; i < replacementList.length; i += 1) {\n var chars = replacementList[i].chars;\n for (var j = 0; j < chars.length; j += 1) {\n diacriticsMap[chars[j]] = replacementList[i].base;\n }\n}\n\nfunction removeDiacritics(str) {\n return str.replace(/[^\\u0000-\\u007e]/g, function(c) {\n return diacriticsMap[c] || c;\n });\n}\n\nexports.replacementList = replacementList;\nexports.diacriticsMap = diacriticsMap;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/tablefilter/tf-0-2c8620168298c5a11749.js b/dist/tablefilter/tf-0-2c8620168298c5a11749.js new file mode 100644 index 00000000..86fad1db --- /dev/null +++ b/dist/tablefilter/tf-0-2c8620168298c5a11749.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{440:function(e,t,n){var r={"./array":69,"./array.js":69,"./const":15,"./const.js":15,"./cookie":120,"./cookie.js":120,"./dom":10,"./dom.js":10,"./emitter":127,"./emitter.js":127,"./event":18,"./event.js":18,"./extensions/advancedGrid/adapterEzEditTable":442,"./extensions/advancedGrid/adapterEzEditTable.js":442,"./extensions/advancedGrid/advancedGrid":447,"./extensions/advancedGrid/advancedGrid.js":447,"./extensions/colOps/colOps":446,"./extensions/colOps/colOps.js":446,"./extensions/colsVisibility/colsVisibility":445,"./extensions/colsVisibility/colsVisibility.js":445,"./extensions/filtersVisibility/filtersVisibility":444,"./extensions/filtersVisibility/filtersVisibility.js":444,"./extensions/sort/adapterSortabletable":441,"./extensions/sort/adapterSortabletable.js":441,"./extensions/sort/sort":443,"./extensions/sort/sort.js":443,"./feature":11,"./feature.js":11,"./modules/alternateRows":111,"./modules/alternateRows.js":111,"./modules/baseDropdown":70,"./modules/baseDropdown.js":70,"./modules/checkList":108,"./modules/checkList.js":108,"./modules/clearButton":112,"./modules/clearButton.js":112,"./modules/dateType":125,"./modules/dateType.js":125,"./modules/dropdown":126,"./modules/dropdown.js":126,"./modules/gridLayout":119,"./modules/gridLayout.js":119,"./modules/hash":122,"./modules/hash.js":122,"./modules/help":124,"./modules/help.js":124,"./modules/highlightKeywords":117,"./modules/highlightKeywords.js":117,"./modules/loader":118,"./modules/loader.js":118,"./modules/markActiveColumns":115,"./modules/markActiveColumns.js":115,"./modules/noResults":110,"./modules/noResults.js":110,"./modules/paging":109,"./modules/paging.js":109,"./modules/popupFilter":116,"./modules/popupFilter.js":116,"./modules/rowsCounter":114,"./modules/rowsCounter.js":114,"./modules/state":123,"./modules/state.js":123,"./modules/statusBar":113,"./modules/statusBar.js":113,"./modules/storage":121,"./modules/storage.js":121,"./modules/toolbar":33,"./modules/toolbar.js":33,"./number":68,"./number.js":68,"./root":16,"./root.js":16,"./settings":7,"./settings.js":7,"./sort":107,"./sort.js":107,"./string":21,"./string.js":21,"./tablefilter":128,"./tablefilter.js":128,"./types":3,"./types.js":3};function webpackContext(e){var t=webpackContextResolve(e);return n(t)}function webpackContextResolve(e){var t=r[e];if(!(t+1)){var n=new Error('Cannot find module "'+e+'".');throw n.code="MODULE_NOT_FOUND",n}return t}webpackContext.keys=function webpackContextKeys(){return Object.keys(r)},webpackContext.resolve=webpackContextResolve,e.exports=webpackContext,webpackContext.id=440},441:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function defineProperties(e,t){for(var n=0;n0){var i=e.triggerIds;t=[],n=i.length;for(var o=0;o0&&function(){for(var t=e.triggerIds,n=0;nr.length;)r="0"+r;t[n]=r}return t.join(".")}function sortIP(e,t){var n=ipAddress(e.value.toLowerCase()),r=ipAddress(t.value.toLowerCase());return n===r?0:n0&&!n.startRow?void 0:n.startRow||e.refRow,n.base_path=n.base_path||e.basePath+"ezEditTable/";var r=n.editable,i=n.selection;i&&(n.default_selection=n.default_selection||"row"),n.active_cell_css=n.active_cell_css||"ezETSelectedCell";var s=0,a=0;if(i){var l=function onAfterSelection(t,n,r){var i=t.Selection,o=function doSelect(r){if("row"===t.defaultSelection)i.SelectRowByIndex(r);else{t.ClearSelections();var o=n.cellIndex,s=e.dom().rows[r];"both"===t.defaultSelection&&i.SelectRowByIndex(r),s&&i.SelectCell(s.cells[o])}if(e.validRowsIndex.length!==e.getRowsNb()){var a=e.dom().rows[r];a&&a.scrollIntoView(!1),u&&(u.cellIndex===e.getCellsNb()-1&&e.gridLayout?e.tblCont.scrollLeft=1e8:0===u.cellIndex&&e.gridLayout?e.tblCont.scrollLeft=0:u.scrollIntoView(!1))}};if(e.validRowsIndex){var l=e.validRowsIndex,d=l.length,c="row"!==t.defaultSelection?n.parentNode:n,u="TD"===n.nodeName?n:null,f=void 0!==r?t.Event.GetKey(r):0,h=-1!==l.indexOf(c.rowIndex),p=void 0,b=e.feature("paging"),m=34===f||33===f?b&&b.pageLength||t.nbRowsPerPage:1;if(h)34!==f&&33!==f?(s=l.indexOf(c.rowIndex),a=c.rowIndex):(p=34===f?s+m<=d-1?l[s+m]:[d-1]:s-m<=l[0]?l[0]:l[s-m],a=p,s=l.indexOf(p),o(p));else{if(c.rowIndex>a)if(c.rowIndex>=l[d-1])p=l[d-1];else{var g=s+m;p=g>d-1?l[d-1]:l[g]}else if(c.rowIndex<=l[0])p=l[0];else{var y=l[s-m];p=y||l[0]}a=c.rowIndex,o(p)}}},d=function onBeforeSelection(t,n){var r="row"!==t.defaultSelection?n.parentNode:n;if(e.paging&&e.feature("paging").nbPages>1){var i=e.feature("paging");t.nbRowsPerPage=i.pageLength;var o=e.validRowsIndex,s=o.length,a=parseInt(i.startPagingRow,10)+parseInt(i.pageLength,10),l=r.rowIndex;l===o[s-1]&&i.currentPageNb!==i.nbPages?i.setPage("last"):l===o[0]&&1!==i.currentPageNb?i.setPage("first"):l>o[a-1]&&lo[0]&&i.setPage("previous")}};if(e.paging&&(e.feature("paging").onAfterChangePage=function(e){var t=e.tf.extension("advancedGrid")._ezEditTable.Selection,n=t.GetActiveRow();n&&n.scrollIntoView(!1);var r=t.GetActiveCell();r&&r.scrollIntoView(!1)}),"row"===n.default_selection){var c=n.on_before_selected_row;n.on_before_selected_row=function(){var e=arguments;d(e[0],e[1],e[2]),c&&c.call(null,e[0],e[1],e[2])};var u=n.on_after_selected_row;n.on_after_selected_row=function(){var e=arguments;l(e[0],e[1],e[2]),u&&u.call(null,e[0],e[1],e[2])}}else{var f=n.on_before_selected_cell;n.on_before_selected_cell=function(){var e=arguments;d(e[0],e[1],e[2]),f&&f.call(null,e[0],e[1],e[2])};var h=n.on_after_selected_cell;n.on_after_selected_cell=function(){var e=arguments;l(e[0],e[1],e[2]),h&&h.call(null,e[0],e[1],e[2])}}}if(r){var p=n.on_added_dom_row;if(n.on_added_dom_row=function(){var t=arguments;e.nbFilterableRows++,e.paging?(e.nbFilterableRows++,e.paging=!1,e.feature("paging").destroy(),e.feature("paging").reset()):e.emitter.emit("rows-changed",e,this),e.alternateRows&&e.feature("alternateRows").init(),p&&p.call(null,t[0],t[1],t[2])},n.actions&&n.actions.delete){var b=n.actions.delete.on_after_submit;n.actions.delete.on_after_submit=function(){var t=arguments;e.nbFilterableRows--,e.paging?(e.nbFilterableRows--,e.paging=!1,e.feature("paging").destroy(),e.feature("paging").reset(!1)):e.emitter.emit("rows-changed",e,this),e.alternateRows&&e.feature("alternateRows").init(),b&&b.call(null,t[0],t[1])}}}try{this._ezEditTable=new EditTable(e.id,n,t),this._ezEditTable.Init()}catch(e){throw new Error('Failed to instantiate EditTable object.\n \n"ezEditTable" dependency not found.')}this.initialized=!0}},{key:"reset",value:function reset(){var e=this._ezEditTable;e&&(this.cfg.selection&&e.Selection.Set(),this.cfg.editable&&e.Editable.Set())}},{key:"toggle",value:function toggle(){var e=this._ezEditTable;e.editable?e.Editable.Remove():e.Editable.Set(),e.selection?e.Selection.Remove():e.Selection.Set()}},{key:"_toggleForInputFilter",value:function _toggleForInputFilter(){var e=this.tf;if(e.getActiveFilterId()){var t=e.getColumnIndexFromFilterId(e.getActiveFilterId());e.getFilterType(t)===s.INPUT&&this.toggle()}}},{key:"destroy",value:function destroy(){var e=this;if(this.initialized){var t=this._ezEditTable;t&&(this.cfg.selection&&(t.Selection.ClearSelections(),t.Selection.Remove()),this.cfg.editable&&t.Editable.Remove()),this.emitter.off(["filter-focus","filter-blur"],function(){return e._toggleForInputFilter()}),this.initialized=!1}}}]),AdapterEzEditTable}();t.default=d},443:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}(n(441));n(16).root.SortableTable||n(450),t.default=r.default},444:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function defineProperties(e,t){for(var n=0;n',n.icnCollapseHtml='Collapse filters',n.defaultText="Toggle filters",n.targetId=t.target_id||null,n.enableIcon=(0,l.defaultsBool)(t.enable_icon,!0),n.btnText=(0,l.defaultsStr)(t.btn_text,""),n.collapseBtnHtml=n.enableIcon?n.icnCollapseHtml+n.btnText:n.btnText||n.defaultText,n.expandBtnHtml=n.enableIcon?n.icnExpandHtml+n.btnText:n.btnText||n.defaultText,n.btnHtml=(0,l.defaultsStr)(t.btn_html,null),n.btnCssClass=(0,l.defaultsStr)(t.btn_css_class,"btnExpClpFlt"),n.contCssClass=(0,l.defaultsStr)(t.cont_css_class,"expClpFlt"),n.filtersRowIndex=(0,l.defaultsNb)(t.filters_row_index,e.getFiltersRowIndex()),n.visibleAtStart=(0,l.defaultsNb)(t.visible_at_start,!0),n.toolbarPosition=(0,l.defaultsStr)(t.toolbar_position,d.RIGHT),n.onBeforeShow=(0,l.defaultsFn)(t.on_before_show,s.EMPTY_FN),n.onAfterShow=(0,l.defaultsFn)(t.on_after_show,s.EMPTY_FN),n.onBeforeHide=(0,l.defaultsFn)(t.on_before_hide,s.EMPTY_FN),n.onAfterHide=(0,l.defaultsFn)(t.on_after_hide,s.EMPTY_FN),e.import(t.name+"Style",e.getStylePath()+n.stylesheet,null,"link"),n.enable(),n}return function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(FiltersVisibility,i.Feature),r(FiltersVisibility,[{key:"init",value:function init(){var e=this;this.initialized||(this.emitter.emit("initializing-extension",this,!(0,s.isNull)(this.targetId)),this.buildUI(),this.initialized=!0,this.emitter.on(["show-filters"],function(t,n){return e.show(n)}),this.emitter.emit("filters-visibility-initialized",this.tf,this),this.emitter.emit("extension-initialized",this))}},{key:"buildUI",value:function buildUI(){var e=this,t=this.tf,n=(0,o.createElm)("span");n.className=this.contCssClass;var r=this.targetId?(0,o.elm)(this.targetId):t.feature("toolbar").container(this.toolbarPosition);if(this.targetId)r.appendChild(n);else{var i=r.firstChild;i.parentNode.insertBefore(n,i)}var s=void 0;this.btnHtml?(n.innerHTML=this.btnHtml,s=n.firstChild):((s=(0,o.createElm)("a",["href","javascript:void(0);"])).className=this.btnCssClass,s.title=this.btnText||this.defaultText,s.innerHTML=this.collapseBtnHtml,n.appendChild(s)),(0,a.addEvt)(s,"click",function(){return e.toggle()}),this.contEl=n,this.btnEl=s,this.visibleAtStart||this.toggle()}},{key:"toggle",value:function toggle(){var e=this.tf,t=""===(e.gridLayout?e.feature("gridLayout").headTbl:e.dom()).rows[this.filtersRowIndex].style.display;this.show(!t)}},{key:"show",value:function show(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.tf,n=(t.gridLayout?t.feature("gridLayout").headTbl:t.dom()).rows[this.filtersRowIndex];e&&this.onBeforeShow(this),e||this.onBeforeHide(this),n.style.display=e?"":"none",this.enableIcon&&!this.btnHtml&&(this.btnEl.innerHTML=e?this.collapseBtnHtml:this.expandBtnHtml),e&&this.onAfterShow(this),e||this.onAfterHide(this),this.emitter.emit("filters-toggled",t,this,e)}},{key:"destroy",value:function destroy(){var e=this;this.initialized&&(this.emitter.off(["show-filters"],function(t,n){return e.show(n)}),this.btnEl.innerHTML="",(0,o.removeElm)(this.btnEl),this.btnEl=null,this.contEl.innerHTML="",(0,o.removeElm)(this.contEl),this.contEl=null,this.initialized=!1)}}]),FiltersVisibility}();t.default=c},445:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:"sum",n=arguments[2],r=this.excludeRows||[],i=tf.getVisibleColumnData(e,!1,r);return Number(this.calc(i,t,n))}},{key:"calc",value:function calc(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"sum",n=arguments[2],r=0;switch("q1"!==t&&"q3"!==t&&"median"!==t||(e=this.sortColumnValues(e,a.numSortAsc)),t){case"mean":r=this.calcMean(e);break;case"sum":r=this.calcSum(e);break;case"min":r=this.calcMin(e);break;case"max":r=this.calcMax(e);break;case"median":r=this.calcMedian(e);break;case"q1":r=this.calcQ1(e);break;case"q3":r=this.calcQ3(e)}return(0,s.isEmpty)(n)?r:r.toFixed(n)}},{key:"calcSum",value:function calcSum(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return(0,s.isEmpty)(e)?0:e.reduce(function(e,t){return Number(e)+Number(t)})}},{key:"calcMean",value:function calcMean(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=this.calcSum(e)/e.length;return Number(t)}},{key:"calcMax",value:function calcMax(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return Math.max.apply(null,e)}},{key:"calcMin",value:function calcMin(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return Math.min.apply(null,e)}},{key:"calcMedian",value:function calcMedian(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=e.length,n=0;return t%2==1?(n=Math.floor(t/2),Number(e[n])):(Number(e[t/2])+Number(e[t/2-1]))/2}},{key:"calcQ1",value:function calcQ1(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=t.length;return 4*(e=Math.floor(n/4))===n?(Number(t[e-1])+Number(t[e]))/2:Number(t[e])}},{key:"calcQ3",value:function calcQ3(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=t.length,r=0;return 4*(e=Math.floor(n/4))===n?(r=3*e,(Number(t[r])+Number(t[r-1]))/2):Number(t[n-e-1])}},{key:"sortColumnValues",value:function sortColumnValues(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1];return e.sort(t)}},{key:"writeResult",value:function writeResult(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"innerhtml",r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:2,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},s=(0,o.elm)(t);if(s)switch(e=e.toFixed(r),e=isNaN(e)||!isFinite(e)?"":(0,d.default)(i)(e),n.toLowerCase()){case"innerhtml":s.innerHTML=e;break;case"setvalue":s.value=e;break;case"createtextnode":var a=s.firstChild,l=(0,o.createText)(e);s.replaceChild(l,a)}}},{key:"configureFormat",value:function configureFormat(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.tf;if(n.hasType(e,[l.FORMATTED_NUMBER])){var r=n.colTypes[e];r.decimal&&!t.decimal&&(t.decimal=r.decimal),r.thousands&&!t.integerSeparator&&(t.integerSeparator=r.thousands)}else t.decimal=t.decimal||"",t.integerSeparator=t.integerSeparator||"";return t}},{key:"destroy",value:function destroy(){this.initialized&&(this.emitter.off(f,(0,u.bound)(this.calcAll,this)),this.initialized=!1)}}]),ColOps}();t.default=h},447:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}(n(442));t.default=r.default},448:function(e,t){e.exports='/*----------------------------------------------------------------------------\\\r\n| Sortable Table 1.12 |\r\n|-----------------------------------------------------------------------------|\r\n| Created by Erik Arvidsson |\r\n| (http://webfx.eae.net/contact.html#erik) |\r\n| For WebFX (http://webfx.eae.net/) |\r\n|-----------------------------------------------------------------------------|\r\n| A DOM 1 based script that allows an ordinary HTML table to be sortable. |\r\n|-----------------------------------------------------------------------------|\r\n| Copyright (c) 1998 - 2006 Erik Arvidsson |\r\n|-----------------------------------------------------------------------------|\r\n| Licensed under the Apache License, Version 2.0 (the "License"); you may not |\r\n| use this file except in compliance with the License. You may obtain a copy |\r\n| of the License at http://www.apache.org/licenses/LICENSE-2.0 |\r\n| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |\r\n| Unless required by applicable law or agreed to in writing, software |\r\n| distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |\r\n| WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |\r\n| License for the specific language governing permissions and limitations |\r\n| under the License. |\r\n|-----------------------------------------------------------------------------|\r\n| 2003-01-10 | First version |\r\n| 2003-01-19 | Minor changes to the date parsing |\r\n| 2003-01-28 | JScript 5.0 fixes (no support for \'in\' operator) |\r\n| 2003-02-01 | Sloppy typo like error fixed in getInnerText |\r\n| 2003-07-04 | Added workaround for IE cellIndex bug. |\r\n| 2003-11-09 | The bDescending argument to sort was not correctly working |\r\n| | Using onclick DOM0 event if no support for addEventListener |\r\n| | or attachEvent |\r\n| 2004-01-13 | Adding addSortType and removeSortType which makes it a lot |\r\n| | easier to add new, custom sort types. |\r\n| 2004-01-27 | Switch to use descending = false as the default sort order. |\r\n| | Change defaultDescending to suit your needs. |\r\n| 2004-03-14 | Improved sort type None look and feel a bit |\r\n| 2004-08-26 | Made the handling of tBody and tHead more flexible. Now you |\r\n| | can use another tHead or no tHead, and you can chose some |\r\n| | other tBody. |\r\n| 2006-04-25 | Changed license to Apache Software License 2.0 |\r\n|-----------------------------------------------------------------------------|\r\n| Created 2003-01-10 | All changes are in the log above. | Updated 2006-04-25 |\r\n\\----------------------------------------------------------------------------*/\r\n\r\n\r\nfunction SortableTable(oTable, oSortTypes) {\r\n\r\n\tthis.sortTypes = oSortTypes || [];\r\n\r\n\tthis.sortColumn = null;\r\n\tthis.descending = null;\r\n\r\n\tvar oThis = this;\r\n\tthis._headerOnclick = function (e) {\r\n\t\toThis.headerOnclick(e);\r\n\t};\r\n\r\n\tif (oTable) {\r\n\t\tthis.setTable( oTable );\r\n\t\tthis.document = oTable.ownerDocument || oTable.document;\r\n\t}\r\n\telse {\r\n\t\tthis.document = document;\r\n\t}\r\n\r\n\r\n\t// only IE needs this\r\n\tvar win = this.document.defaultView || this.document.parentWindow;\r\n\tthis._onunload = function () {\r\n\t\toThis.destroy();\r\n\t};\r\n\tif (win && typeof win.attachEvent != "undefined") {\r\n\t\twin.attachEvent("onunload", this._onunload);\r\n\t}\r\n}\r\n\r\nSortableTable.gecko = navigator.product == "Gecko";\r\nSortableTable.msie = /msie/i.test(navigator.userAgent);\r\n// Mozilla is faster when doing the DOM manipulations on\r\n// an orphaned element. MSIE is not\r\nSortableTable.removeBeforeSort = SortableTable.gecko;\r\n\r\nSortableTable.prototype.onsort = function () {};\r\n\r\n// default sort order. true -> descending, false -> ascending\r\nSortableTable.prototype.defaultDescending = false;\r\n\r\n// shared between all instances. This is intentional to allow external files\r\n// to modify the prototype\r\nSortableTable.prototype._sortTypeInfo = {};\r\n\r\nSortableTable.prototype.setTable = function (oTable) {\r\n\tif ( this.tHead )\r\n\t\tthis.uninitHeader();\r\n\tthis.element = oTable;\r\n\tthis.setTHead( oTable.tHead );\r\n\tthis.setTBody( oTable.tBodies[0] );\r\n};\r\n\r\nSortableTable.prototype.setTHead = function (oTHead) {\r\n\tif (this.tHead && this.tHead != oTHead )\r\n\t\tthis.uninitHeader();\r\n\tthis.tHead = oTHead;\r\n\tthis.initHeader( this.sortTypes );\r\n};\r\n\r\nSortableTable.prototype.setTBody = function (oTBody) {\r\n\tthis.tBody = oTBody;\r\n};\r\n\r\nSortableTable.prototype.setSortTypes = function ( oSortTypes ) {\r\n\tif ( this.tHead )\r\n\t\tthis.uninitHeader();\r\n\tthis.sortTypes = oSortTypes || [];\r\n\tif ( this.tHead )\r\n\t\tthis.initHeader( this.sortTypes );\r\n};\r\n\r\n// adds arrow containers and events\r\n// also binds sort type to the header cells so that reordering columns does\r\n// not break the sort types\r\nSortableTable.prototype.initHeader = function (oSortTypes) {\r\n\tif (!this.tHead) return;\r\n\tvar cells = this.tHead.rows[0].cells;\r\n\tvar doc = this.tHead.ownerDocument || this.tHead.document;\r\n\tthis.sortTypes = oSortTypes || [];\r\n\tvar l = cells.length;\r\n\tvar img, c;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tc = cells[i];\r\n\t\tif (this.sortTypes[i] != null && this.sortTypes[i] != "None") {\r\n\t\t\timg = doc.createElement("IMG");\r\n\t\t\timg.src = "images/blank.png";\r\n\t\t\tc.appendChild(img);\r\n\t\t\tif (this.sortTypes[i] != null)\r\n\t\t\t\tc._sortType = this.sortTypes[i];\r\n\t\t\tif (typeof c.addEventListener != "undefined")\r\n\t\t\t\tc.addEventListener("click", this._headerOnclick, false);\r\n\t\t\telse if (typeof c.attachEvent != "undefined")\r\n\t\t\t\tc.attachEvent("onclick", this._headerOnclick);\r\n\t\t\telse\r\n\t\t\t\tc.onclick = this._headerOnclick;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tc.setAttribute( "_sortType", oSortTypes[i] );\r\n\t\t\tc._sortType = "None";\r\n\t\t}\r\n\t}\r\n\tthis.updateHeaderArrows();\r\n};\r\n\r\n// remove arrows and events\r\nSortableTable.prototype.uninitHeader = function () {\r\n\tif (!this.tHead) return;\r\n\tvar cells = this.tHead.rows[0].cells;\r\n\tvar l = cells.length;\r\n\tvar c;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tc = cells[i];\r\n\t\tif (c._sortType != null && c._sortType != "None") {\r\n\t\t\tc.removeChild(c.lastChild);\r\n\t\t\tif (typeof c.removeEventListener != "undefined")\r\n\t\t\t\tc.removeEventListener("click", this._headerOnclick, false);\r\n\t\t\telse if (typeof c.detachEvent != "undefined")\r\n\t\t\t\tc.detachEvent("onclick", this._headerOnclick);\r\n\t\t\tc._sortType = null;\r\n\t\t\tc.removeAttribute( "_sortType" );\r\n\t\t}\r\n\t}\r\n};\r\n\r\nSortableTable.prototype.updateHeaderArrows = function () {\r\n\tif (!this.tHead) return;\r\n\tvar cells = this.tHead.rows[0].cells;\r\n\tvar l = cells.length;\r\n\tvar img;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tif (cells[i]._sortType != null && cells[i]._sortType != "None") {\r\n\t\t\timg = cells[i].lastChild;\r\n\t\t\tif (i == this.sortColumn)\r\n\t\t\t\timg.className = "sort-arrow " + (this.descending ? "descending" : "ascending");\r\n\t\t\telse\r\n\t\t\t\timg.className = "sort-arrow";\r\n\t\t}\r\n\t}\r\n};\r\n\r\nSortableTable.prototype.headerOnclick = function (e) {\r\n\t// find TD element\r\n\tvar el = e.target || e.srcElement;\r\n\twhile (el.tagName != "TD")\r\n\t\tel = el.parentNode;\r\n\r\n\tthis.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);\r\n};\r\n\r\n// IE returns wrong cellIndex when columns are hidden\r\nSortableTable.getCellIndex = function (oTd) {\r\n\tvar cells = oTd.parentNode.childNodes\r\n\tvar l = cells.length;\r\n\tvar i;\r\n\tfor (i = 0; cells[i] != oTd && i < l; i++)\r\n\t\t;\r\n\treturn i;\r\n};\r\n\r\nSortableTable.prototype.getSortType = function (nColumn) {\r\n\treturn this.sortTypes[nColumn] || "String";\r\n};\r\n\r\n// only nColumn is required\r\n// if bDescending is left out the old value is taken into account\r\n// if sSortType is left out the sort type is found from the sortTypes array\r\n\r\nSortableTable.prototype.sort = function (nColumn, bDescending, sSortType) {\r\n\tif (!this.tBody) return;\r\n\tif (sSortType == null)\r\n\t\tsSortType = this.getSortType(nColumn);\r\n\r\n\t// exit if None\r\n\tif (sSortType == "None")\r\n\t\treturn;\r\n\r\n\tif (bDescending == null) {\r\n\t\tif (this.sortColumn != nColumn)\r\n\t\t\tthis.descending = this.defaultDescending;\r\n\t\telse\r\n\t\t\tthis.descending = !this.descending;\r\n\t}\r\n\telse\r\n\t\tthis.descending = bDescending;\r\n\r\n\tthis.sortColumn = nColumn;\r\n\r\n\tif (typeof this.onbeforesort == "function")\r\n\t\tthis.onbeforesort();\r\n\r\n\tvar f = this.getSortFunction(sSortType, nColumn);\r\n\tvar a = this.getCache(sSortType, nColumn);\r\n\tvar tBody = this.tBody;\r\n\r\n\ta.sort(f);\r\n\r\n\tif (this.descending)\r\n\t\ta.reverse();\r\n\r\n\tif (SortableTable.removeBeforeSort) {\r\n\t\t// remove from doc\r\n\t\tvar nextSibling = tBody.nextSibling;\r\n\t\tvar p = tBody.parentNode;\r\n\t\tp.removeChild(tBody);\r\n\t}\r\n\r\n\t// insert in the new order\r\n\tvar l = a.length;\r\n\tfor (var i = 0; i < l; i++)\r\n\t\ttBody.appendChild(a[i].element);\r\n\r\n\tif (SortableTable.removeBeforeSort) {\r\n\t\t// insert into doc\r\n\t\tp.insertBefore(tBody, nextSibling);\r\n\t}\r\n\r\n\tthis.updateHeaderArrows();\r\n\r\n\tthis.destroyCache(a);\r\n\r\n\tif (typeof this.onsort == "function")\r\n\t\tthis.onsort();\r\n};\r\n\r\nSortableTable.prototype.asyncSort = function (nColumn, bDescending, sSortType) {\r\n\tvar oThis = this;\r\n\tthis._asyncsort = function () {\r\n\t\toThis.sort(nColumn, bDescending, sSortType);\r\n\t};\r\n\twindow.setTimeout(this._asyncsort, 1);\r\n};\r\n\r\nSortableTable.prototype.getCache = function (sType, nColumn) {\r\n\tif (!this.tBody) return [];\r\n\tvar rows = this.tBody.rows;\r\n\tvar l = rows.length;\r\n\tvar a = new Array(l);\r\n\tvar r;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tr = rows[i];\r\n\t\ta[i] = {\r\n\t\t\tvalue:\t\tthis.getRowValue(r, sType, nColumn),\r\n\t\t\telement:\tr\r\n\t\t};\r\n\t};\r\n\treturn a;\r\n};\r\n\r\nSortableTable.prototype.destroyCache = function (oArray) {\r\n\tvar l = oArray.length;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\toArray[i].value = null;\r\n\t\toArray[i].element = null;\r\n\t\toArray[i] = null;\r\n\t}\r\n};\r\n\r\nSortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\r\n\t// if we have defined a custom getRowValue use that\r\n\tif (this._sortTypeInfo[sType] && this._sortTypeInfo[sType].getRowValue)\r\n\t\treturn this._sortTypeInfo[sType].getRowValue(oRow, nColumn);\r\n\r\n\tvar s;\r\n\tvar c = oRow.cells[nColumn];\r\n\tif (typeof c.innerText != "undefined")\r\n\t\ts = c.innerText;\r\n\telse\r\n\t\ts = SortableTable.getInnerText(c);\r\n\treturn this.getValueFromString(s, sType);\r\n};\r\n\r\nSortableTable.getInnerText = function (oNode) {\r\n\tvar s = "";\r\n\tvar cs = oNode.childNodes;\r\n\tvar l = cs.length;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tswitch (cs[i].nodeType) {\r\n\t\t\tcase 1: //ELEMENT_NODE\r\n\t\t\t\ts += SortableTable.getInnerText(cs[i]);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 3:\t//TEXT_NODE\r\n\t\t\t\ts += cs[i].nodeValue;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\treturn s;\r\n};\r\n\r\nSortableTable.prototype.getValueFromString = function (sText, sType) {\r\n\tif (this._sortTypeInfo[sType])\r\n\t\treturn this._sortTypeInfo[sType].getValueFromString( sText );\r\n\treturn sText;\r\n\t/*\r\n\tswitch (sType) {\r\n\t\tcase "Number":\r\n\t\t\treturn Number(sText);\r\n\t\tcase "CaseInsensitiveString":\r\n\t\t\treturn sText.toUpperCase();\r\n\t\tcase "Date":\r\n\t\t\tvar parts = sText.split("-");\r\n\t\t\tvar d = new Date(0);\r\n\t\t\td.setFullYear(parts[0]);\r\n\t\t\td.setDate(parts[2]);\r\n\t\t\td.setMonth(parts[1] - 1);\r\n\t\t\treturn d.valueOf();\r\n\t}\r\n\treturn sText;\r\n\t*/\r\n\t};\r\n\r\nSortableTable.prototype.getSortFunction = function (sType, nColumn) {\r\n\tif (this._sortTypeInfo[sType])\r\n\t\treturn this._sortTypeInfo[sType].compare;\r\n\treturn SortableTable.basicCompare;\r\n};\r\n\r\nSortableTable.prototype.destroy = function () {\r\n\tthis.uninitHeader();\r\n\tvar win = this.document.parentWindow;\r\n\tif (win && typeof win.detachEvent != "undefined") {\t// only IE needs this\r\n\t\twin.detachEvent("onunload", this._onunload);\r\n\t}\r\n\tthis._onunload = null;\r\n\tthis.element = null;\r\n\tthis.tHead = null;\r\n\tthis.tBody = null;\r\n\tthis.document = null;\r\n\tthis._headerOnclick = null;\r\n\tthis.sortTypes = null;\r\n\tthis._asyncsort = null;\r\n\tthis.onsort = null;\r\n};\r\n\r\n// Adds a sort type to all instance of SortableTable\r\n// sType : String - the identifier of the sort type\r\n// fGetValueFromString : function ( s : string ) : T - A function that takes a\r\n// string and casts it to a desired format. If left out the string is just\r\n// returned\r\n// fCompareFunction : function ( n1 : T, n2 : T ) : Number - A normal JS sort\r\n// compare function. Takes two values and compares them. If left out less than,\r\n// <, compare is used\r\n// fGetRowValue : function( oRow : HTMLTRElement, nColumn : int ) : T - A function\r\n// that takes the row and the column index and returns the value used to compare.\r\n// If left out then the innerText is first taken for the cell and then the\r\n// fGetValueFromString is used to convert that string the desired value and type\r\n\r\nSortableTable.prototype.addSortType = function (sType, fGetValueFromString, fCompareFunction, fGetRowValue) {\r\n\tthis._sortTypeInfo[sType] = {\r\n\t\ttype:\t\t\t\tsType,\r\n\t\tgetValueFromString:\tfGetValueFromString || SortableTable.idFunction,\r\n\t\tcompare:\t\t\tfCompareFunction || SortableTable.basicCompare,\r\n\t\tgetRowValue:\t\tfGetRowValue\r\n\t};\r\n};\r\n\r\n// this removes the sort type from all instances of SortableTable\r\nSortableTable.prototype.removeSortType = function (sType) {\r\n\tdelete this._sortTypeInfo[sType];\r\n};\r\n\r\nSortableTable.basicCompare = function compare(n1, n2) {\r\n\tif (n1.value < n2.value)\r\n\t\treturn -1;\r\n\tif (n2.value < n1.value)\r\n\t\treturn 1;\r\n\treturn 0;\r\n};\r\n\r\nSortableTable.idFunction = function (x) {\r\n\treturn x;\r\n};\r\n\r\nSortableTable.toUpperCase = function (s) {\r\n\treturn s.toUpperCase();\r\n};\r\n\r\nSortableTable.toDate = function (s) {\r\n\tvar parts = s.split("-");\r\n\tvar d = new Date(0);\r\n\td.setFullYear(parts[0]);\r\n\td.setDate(parts[2]);\r\n\td.setMonth(parts[1] - 1);\r\n\treturn d.valueOf();\r\n};\r\n\r\n\r\n// add sort types\r\nSortableTable.prototype.addSortType("Number", Number);\r\nSortableTable.prototype.addSortType("CaseInsensitiveString", SortableTable.toUpperCase);\r\nSortableTable.prototype.addSortType("Date", SortableTable.toDate);\r\nSortableTable.prototype.addSortType("String");\r\n// None is a special case\r\n'},449:function(e,t){e.exports=function(e){function log(e){"undefined"!=typeof console&&(console.error||console.log)("[Script Loader]",e)}try{"undefined"!=typeof execScript&&function isIE(){return"undefined"!=typeof attachEvent&&"undefined"==typeof addEventListener}()?execScript(e):"undefined"!=typeof eval?eval.call(null,e):log("EvalError: No eval function available")}catch(e){log(e)}}},450:function(e,t,n){n(449)(n(448))},451:function(e,t){function formatter(e){if((e=e||{}).negativeType=e.negativeType||("R"===e.negative?"right":"left"),"string"!=typeof e.negativeLeftSymbol)switch(e.negativeType){case"left":e.negativeLeftSymbol="-";break;case"brackets":e.negativeLeftSymbol="(";break;default:e.negativeLeftSymbol=""}if("string"!=typeof e.negativeRightSymbol)switch(e.negativeType){case"right":e.negativeRightSymbol="-";break;case"brackets":e.negativeRightSymbol=")";break;default:e.negativeRightSymbol=""}function format(t,n){if(n=n||{},!t&&0!==t)return"";var r=[],i="-"===(t=""+t).charAt(0);return t=t.replace(/^\-/g,""),e.negativeLeftOut||n.noUnits||r.push(e.prefix),i&&r.push(e.negativeLeftSymbol),e.negativeLeftOut&&!n.noUnits&&r.push(e.prefix),t=t.split("."),null!=e.round&&function round(e,t){if(e[1]&&t>=0&&e[1].length>t){var n=e[1].slice(0,t);if(+e[1].substr(t,1)>=5){for(var r="";"0"===n.charAt(0);)r+="0",n=n.substr(1);(n=r+(n=+n+1+"")).length>t&&(e[0]=+e[0]+ +n.charAt(0)+"",n=n.substring(1))}e[1]=n}return e}(t,e.round),null!=e.truncate&&(t[1]=function truncate(e,t){e&&(e+="");return e&&e.length>t?e.substr(0,t):e}(t[1],e.truncate)),e.padLeft>0&&(t[0]=function padLeft(e,t){e+="";var n=[];for(;n.length+e.length0&&(t[1]=function padRight(e,t){e?e+="":e="";var n=[];for(;n.length+e.length 0) {\r\n let triggers = adpt.triggerIds;\r\n cells = [];\r\n l = triggers.length;\r\n for (let j = 0; j < l; j++) {\r\n cells.push(elm(triggers[j]));\r\n }\r\n } else {\r\n if (!this.tHead) {\r\n return;\r\n }\r\n cells = stt.tHead.rows[stt.headersRow].cells;\r\n l = cells.length;\r\n }\r\n for (let i = 0; i < l; i++) {\r\n let cell = cells[i];\r\n if (!cell) {\r\n continue;\r\n }\r\n let cellAttr = cell.getAttribute('_sortType');\r\n if (cellAttr !== null && cellAttr !== 'None') {\r\n img = cell.lastChild || cell;\r\n if (img.nodeName.toLowerCase() !== 'img') {\r\n img = createElm('img',\r\n ['src', adpt.imgPath + adpt.imgBlank]);\r\n cell.appendChild(img);\r\n }\r\n if (i === stt.sortColumn) {\r\n img.className = adpt.imgClassName + ' ' +\r\n (this.descending ?\r\n adpt.imgDescClassName :\r\n adpt.imgAscClassName);\r\n } else {\r\n img.className = adpt.imgClassName;\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Overrides getRowValue for custom key value feature\r\n * @param {Object} oRow Row element\r\n * @param {String} sType\r\n * @param {Number} nColumn\r\n * @return {String}\r\n */\r\n SortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\r\n let stt = this;\r\n // if we have defined a custom getRowValue use that\r\n let sortTypeInfo = stt._sortTypeInfo[sType];\r\n if (sortTypeInfo && sortTypeInfo.getRowValue) {\r\n return sortTypeInfo.getRowValue(oRow, nColumn);\r\n }\r\n let c = oRow.cells[nColumn];\r\n let s = SortableTable.getInnerText(c);\r\n return stt.getValueFromString(s, sType);\r\n };\r\n\r\n /**\r\n * Overrides getInnerText in order to avoid Firefox unexpected sorting\r\n * behaviour with untrimmed text elements\r\n * @param {Object} cell DOM element\r\n * @return {String} DOM element inner text\r\n */\r\n SortableTable.getInnerText = function (cell) {\r\n if (!cell) {\r\n return;\r\n }\r\n if (cell.getAttribute(adpt.customKey)) {\r\n return cell.getAttribute(adpt.customKey);\r\n } else {\r\n return tf.getCellValue(cell);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Adds a sort type\r\n */\r\n addSortType(...args) {\r\n // Extract the arguments\r\n let [id, caster, sorter, getRowValue] = args;\r\n SortableTable.prototype.addSortType(id, caster, sorter, getRowValue);\r\n }\r\n\r\n /**\r\n * Sets the sort types on a column basis\r\n * @private\r\n */\r\n setSortTypes() {\r\n let tf = this.tf,\r\n sortTypes = this.sortTypes,\r\n _sortTypes = [];\r\n\r\n tf.eachCol((i) => {\r\n let colType;\r\n if (sortTypes[i]) {\r\n colType = sortTypes[i];\r\n if (isObj(colType)) {\r\n if (colType.type === DATE) {\r\n colType = this._addDateType(i, sortTypes);\r\n }\r\n else if (colType.type === FORMATTED_NUMBER) {\r\n let decimal = colType.decimal || tf.decimalSeparator;\r\n colType = this._addNumberType(i, decimal);\r\n }\r\n } else {\r\n colType = colType.toLowerCase();\r\n if (colType === DATE) {\r\n colType = this._addDateType(i, sortTypes);\r\n }\r\n else if (colType === FORMATTED_NUMBER ||\r\n colType === NUMBER) {\r\n colType = this._addNumberType(i, tf.decimalSeparator);\r\n }\r\n else if (colType === NONE) {\r\n // TODO: normalise 'none' vs 'None'\r\n colType = 'None';\r\n }\r\n }\r\n } else {\r\n colType = STRING;\r\n }\r\n _sortTypes.push(colType);\r\n });\r\n\r\n //Public TF method to add sort type\r\n\r\n //Custom sort types\r\n this.addSortType('caseinsensitivestring', SortableTable.toUpperCase);\r\n this.addSortType(STRING);\r\n this.addSortType(IP_ADDRESS, ipAddress, sortIP);\r\n\r\n this.stt = new SortableTable(tf.dom(), _sortTypes);\r\n\r\n /*** external table headers adapter ***/\r\n if (this.asyncSort && this.triggerIds.length > 0) {\r\n let triggers = this.triggerIds;\r\n for (let j = 0; j < triggers.length; j++) {\r\n if (triggers[j] === null) {\r\n continue;\r\n }\r\n let trigger = elm(triggers[j]);\r\n if (trigger) {\r\n trigger.style.cursor = 'pointer';\r\n\r\n addEvt(trigger, 'click', (evt) => {\r\n let elm = evt.target;\r\n if (!this.tf.sort) {\r\n return;\r\n }\r\n this.stt.asyncSort(triggers.indexOf(elm.id));\r\n });\r\n trigger.setAttribute('_sortType', _sortTypes[j]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _addDateType(colIndex, types) {\r\n let tf = this.tf;\r\n let dateType = tf.feature('dateType');\r\n let locale = dateType.getOptions(colIndex, types).locale || tf.locale;\r\n let colType = `${DATE}-${locale}`;\r\n\r\n this.addSortType(colType, (value) => {\r\n let parsedDate = dateType.parse(value, locale);\r\n // Invalid date defaults to Wed Feb 04 -768 11:00:00\r\n return isNaN(+parsedDate) ? new Date(-86400000000000) : parsedDate;\r\n });\r\n return colType;\r\n }\r\n\r\n _addNumberType(colIndex, decimal) {\r\n let colType = `${FORMATTED_NUMBER}${decimal === '.' ? '' : '-custom'}`;\r\n\r\n this.addSortType(colType, (value) => {\r\n return parseNb(value, decimal);\r\n });\r\n return colType;\r\n }\r\n\r\n /**\r\n * Remove extension\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n this.emitter.off(['sort'], bound(this.sortByColumnIndexHandler, this));\r\n this.sorted = false;\r\n this.stt.destroy();\r\n\r\n let ids = tf.getFiltersId();\r\n for (let idx = 0; idx < ids.length; idx++) {\r\n let header = tf.getHeaderElement(idx);\r\n let img = tag(header, 'img');\r\n\r\n if (img.length === 1) {\r\n header.removeChild(img[0]);\r\n }\r\n }\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n\r\n//Converters\r\nfunction ipAddress(value) {\r\n let vals = value.split('.');\r\n for (let x in vals) {\r\n let val = vals[x];\r\n while (3 > val.length) {\r\n val = '0' + val;\r\n }\r\n vals[x] = val;\r\n }\r\n return vals.join('.');\r\n}\r\n\r\nfunction sortIP(a, b) {\r\n let aa = ipAddress(a.value.toLowerCase());\r\n let bb = ipAddress(b.value.toLowerCase());\r\n if (aa === bb) {\r\n return 0;\r\n } else if (aa < bb) {\r\n return -1;\r\n } else {\r\n return 1;\r\n }\r\n}\r\n","import {Feature} from '../../feature';\r\nimport {tag} from '../../dom';\r\nimport {INPUT} from '../../const';\r\nimport {defaultsStr} from '../../settings';\r\nimport {root} from '../../root';\r\n\r\nconst INSTANTIATION_ERROR = `Failed to instantiate EditTable object.\r\n \\n\"ezEditTable\" dependency not found.`;\r\n\r\n/**\r\n * Adapter module for ezEditTable, an external library providing advanced\r\n * grid features (selection and edition):\r\n * http://codecanyon.net/item/ezedittable-enhance-html-tables/2425123?ref=koalyptus\r\n */\r\nexport default class AdapterEzEditTable extends Feature {\r\n\r\n /**\r\n * Creates an instance of AdapterEzEditTable\r\n *\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} cfg Configuration options for ezEditTable library\r\n */\r\n constructor(tf, cfg) {\r\n super(tf, cfg.name);\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(cfg.description, 'ezEditTable adapter');\r\n\r\n /**\r\n * Filename of ezEditTable library\r\n * @type {String}\r\n */\r\n this.filename = defaultsStr(cfg.filename, 'ezEditTable.js');\r\n\r\n /**\r\n * Path to ezEditTable library\r\n * @type {String}\r\n */\r\n this.vendorPath = cfg.vendor_path;\r\n\r\n /**\r\n * Load ezEditTable stylesheet\r\n * @type {Boolean}\r\n */\r\n this.loadStylesheet = Boolean(cfg.load_stylesheet);\r\n\r\n /**\r\n * Path to ezEditTable stylesheet\r\n * @type {String}\r\n */\r\n this.stylesheet = defaultsStr(cfg.stylesheet,\r\n this.vendorPath + 'ezEditTable.css');\r\n\r\n /**\r\n * Name of ezEditTable stylesheet\r\n * @type {String}\r\n */\r\n this.stylesheetName = defaultsStr(cfg.stylesheet_name,\r\n 'ezEditTableCss');\r\n\r\n // Enable the ezEditTable's scroll into view behaviour if grid layout on\r\n cfg.scroll_into_view = cfg.scroll_into_view === false ?\r\n false : tf.gridLayout;\r\n\r\n /**\r\n * ezEditTable instance\r\n * @type {EditTable}\r\n * @private\r\n */\r\n this._ezEditTable = null;\r\n\r\n /**\r\n * ezEditTable configuration\r\n * @private\r\n */\r\n this.cfg = cfg;\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Conditionally load ezEditTable library and set advanced grid\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n if (root.EditTable) {\r\n this._setAdvancedGrid();\r\n } else {\r\n let path = this.vendorPath + this.filename;\r\n tf.import(this.filename, path, () => this._setAdvancedGrid());\r\n }\r\n if (this.loadStylesheet && !tf.isImported(this.stylesheet, 'link')) {\r\n tf.import(this.stylesheetName, this.stylesheet, null, 'link');\r\n }\r\n\r\n // TODO: hack to prevent ezEditTable enter key event hijaking.\r\n // Needs to be fixed in the vendor's library\r\n this.emitter.on(['filter-focus', 'filter-blur'],\r\n () => this._toggleForInputFilter());\r\n\r\n /**\r\n * @inherited\r\n */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Instantiate ezEditTable component for advanced grid features\r\n * @private\r\n */\r\n _setAdvancedGrid() {\r\n let tf = this.tf;\r\n\r\n //start row for EditTable constructor needs to be calculated\r\n let startRow,\r\n cfg = this.cfg,\r\n thead = tag(tf.dom(), 'thead');\r\n\r\n //if thead exists and startRow not specified, startRow is calculated\r\n //automatically by EditTable\r\n if (thead.length > 0 && !cfg.startRow) {\r\n startRow = undefined;\r\n }\r\n //otherwise startRow config property if any or TableFilter refRow\r\n else {\r\n startRow = cfg.startRow || tf.refRow;\r\n }\r\n\r\n cfg.base_path = cfg.base_path || tf.basePath + 'ezEditTable/';\r\n let editable = cfg.editable;\r\n let selectable = cfg.selection;\r\n\r\n if (selectable) {\r\n cfg.default_selection = cfg.default_selection || 'row';\r\n }\r\n //CSS Styles\r\n cfg.active_cell_css = cfg.active_cell_css || 'ezETSelectedCell';\r\n\r\n let _lastValidRowIndex = 0;\r\n let _lastRowIndex = 0;\r\n\r\n if (selectable) {\r\n //Row navigation needs to be calculated according to TableFilter's\r\n //validRowsIndex array\r\n let onAfterSelection = function (et, selectedElm, e) {\r\n let slc = et.Selection;\r\n //Next valid filtered row needs to be selected\r\n let doSelect = function (nextRowIndex) {\r\n if (et.defaultSelection === 'row') {\r\n /* eslint-disable */\r\n slc.SelectRowByIndex(nextRowIndex);\r\n /* eslint-enable */\r\n } else {\r\n /* eslint-disable */\r\n et.ClearSelections();\r\n /* eslint-enable */\r\n let cellIndex = selectedElm.cellIndex,\r\n row = tf.dom().rows[nextRowIndex];\r\n if (et.defaultSelection === 'both') {\r\n /* eslint-disable */\r\n slc.SelectRowByIndex(nextRowIndex);\r\n /* eslint-enable */\r\n }\r\n if (row) {\r\n /* eslint-disable */\r\n slc.SelectCell(row.cells[cellIndex]);\r\n /* eslint-enable */\r\n }\r\n }\r\n //Table is filtered\r\n if (tf.validRowsIndex.length !== tf.getRowsNb()) {\r\n let r = tf.dom().rows[nextRowIndex];\r\n if (r) {\r\n r.scrollIntoView(false);\r\n }\r\n if (cell) {\r\n if (cell.cellIndex === (tf.getCellsNb() - 1) &&\r\n tf.gridLayout) {\r\n tf.tblCont.scrollLeft = 100000000;\r\n }\r\n else if (cell.cellIndex === 0 && tf.gridLayout) {\r\n tf.tblCont.scrollLeft = 0;\r\n } else {\r\n cell.scrollIntoView(false);\r\n }\r\n }\r\n }\r\n };\r\n\r\n //table is not filtered\r\n if (!tf.validRowsIndex) {\r\n return;\r\n }\r\n let validIndexes = tf.validRowsIndex,\r\n validIdxLen = validIndexes.length,\r\n row = et.defaultSelection !== 'row' ?\r\n selectedElm.parentNode : selectedElm,\r\n //cell for default_selection = 'both' or 'cell'\r\n cell = selectedElm.nodeName === 'TD' ? selectedElm : null,\r\n /* eslint-disable */\r\n keyCode = e !== undefined ? et.Event.GetKey(e) : 0,\r\n /* eslint-enable */\r\n isRowValid = validIndexes.indexOf(row.rowIndex) !== -1,\r\n nextRowIndex,\r\n paging = tf.feature('paging'),\r\n //pgup/pgdown keys\r\n d = keyCode === 34 || keyCode === 33 ?\r\n (paging && paging.pageLength || et.nbRowsPerPage) :\r\n 1;\r\n\r\n //If next row is not valid, next valid filtered row needs to be\r\n //calculated\r\n if (!isRowValid) {\r\n //Selection direction up/down\r\n if (row.rowIndex > _lastRowIndex) {\r\n //last row\r\n if (row.rowIndex >= validIndexes[validIdxLen - 1]) {\r\n nextRowIndex = validIndexes[validIdxLen - 1];\r\n } else {\r\n let calcRowIndex = (_lastValidRowIndex + d);\r\n if (calcRowIndex > (validIdxLen - 1)) {\r\n nextRowIndex = validIndexes[validIdxLen - 1];\r\n } else {\r\n nextRowIndex = validIndexes[calcRowIndex];\r\n }\r\n }\r\n } else {\r\n //first row\r\n if (row.rowIndex <= validIndexes[0]) {\r\n nextRowIndex = validIndexes[0];\r\n } else {\r\n let v = validIndexes[_lastValidRowIndex - d];\r\n nextRowIndex = v ? v : validIndexes[0];\r\n }\r\n }\r\n _lastRowIndex = row.rowIndex;\r\n doSelect(nextRowIndex);\r\n } else {\r\n //If filtered row is valid, special calculation for\r\n //pgup/pgdown keys\r\n if (keyCode !== 34 && keyCode !== 33) {\r\n _lastValidRowIndex = validIndexes.indexOf(row.rowIndex);\r\n _lastRowIndex = row.rowIndex;\r\n } else {\r\n if (keyCode === 34) { //pgdown\r\n //last row\r\n if ((_lastValidRowIndex + d) <= (validIdxLen - 1)) {\r\n nextRowIndex = validIndexes[\r\n _lastValidRowIndex + d];\r\n } else {\r\n nextRowIndex = [validIdxLen - 1];\r\n }\r\n } else { //pgup\r\n //first row\r\n if ((_lastValidRowIndex - d) <= validIndexes[0]) {\r\n nextRowIndex = validIndexes[0];\r\n } else {\r\n nextRowIndex = validIndexes[\r\n _lastValidRowIndex - d];\r\n }\r\n }\r\n _lastRowIndex = nextRowIndex;\r\n _lastValidRowIndex = validIndexes.indexOf(nextRowIndex);\r\n doSelect(nextRowIndex);\r\n }\r\n }\r\n };\r\n\r\n //Page navigation has to be enforced whenever selected row is out of\r\n //the current page range\r\n let onBeforeSelection = function (et, selectedElm) {\r\n let row = et.defaultSelection !== 'row' ?\r\n selectedElm.parentNode : selectedElm;\r\n if (tf.paging) {\r\n if (tf.feature('paging').nbPages > 1) {\r\n let paging = tf.feature('paging');\r\n //page length is re-assigned in case it has changed\r\n et.nbRowsPerPage = paging.pageLength;\r\n let validIndexes = tf.validRowsIndex,\r\n validIdxLen = validIndexes.length,\r\n pagingEndRow = parseInt(paging.startPagingRow, 10) +\r\n parseInt(paging.pageLength, 10);\r\n let rowIndex = row.rowIndex;\r\n\r\n if ((rowIndex === validIndexes[validIdxLen - 1]) &&\r\n paging.currentPageNb !== paging.nbPages) {\r\n paging.setPage('last');\r\n }\r\n else if ((rowIndex === validIndexes[0]) &&\r\n paging.currentPageNb !== 1) {\r\n paging.setPage('first');\r\n }\r\n else if (rowIndex > validIndexes[pagingEndRow - 1] &&\r\n rowIndex < validIndexes[validIdxLen - 1]) {\r\n paging.setPage('next');\r\n }\r\n else if (\r\n rowIndex < validIndexes[paging.startPagingRow] &&\r\n rowIndex > validIndexes[0]) {\r\n paging.setPage('previous');\r\n }\r\n }\r\n }\r\n };\r\n\r\n //Selected row needs to be visible when paging is activated\r\n if (tf.paging) {\r\n tf.feature('paging').onAfterChangePage = function (paging) {\r\n let advGrid = paging.tf.extension('advancedGrid');\r\n let et = advGrid._ezEditTable;\r\n let slc = et.Selection;\r\n /* eslint-disable */\r\n let row = slc.GetActiveRow();\r\n /* eslint-enable */\r\n if (row) {\r\n row.scrollIntoView(false);\r\n }\r\n /* eslint-disable */\r\n let cell = slc.GetActiveCell();\r\n /* eslint-enable */\r\n if (cell) {\r\n cell.scrollIntoView(false);\r\n }\r\n };\r\n }\r\n\r\n //Rows navigation when rows are filtered is performed with the\r\n //EditTable row selection callback events\r\n if (cfg.default_selection === 'row') {\r\n let fnB = cfg.on_before_selected_row;\r\n cfg.on_before_selected_row = function () {\r\n var args = arguments;\r\n onBeforeSelection(args[0], args[1], args[2]);\r\n if (fnB) {\r\n fnB.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n let fnA = cfg.on_after_selected_row;\r\n cfg.on_after_selected_row = function () {\r\n var args = arguments;\r\n onAfterSelection(args[0], args[1], args[2]);\r\n if (fnA) {\r\n fnA.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n } else {\r\n let fnD = cfg.on_before_selected_cell;\r\n cfg.on_before_selected_cell = function () {\r\n var args = arguments;\r\n onBeforeSelection(args[0], args[1], args[2]);\r\n if (fnD) {\r\n fnD.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n let fnC = cfg.on_after_selected_cell;\r\n cfg.on_after_selected_cell = function () {\r\n var args = arguments;\r\n onAfterSelection(args[0], args[1], args[2]);\r\n if (fnC) {\r\n fnC.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n }\r\n }\r\n if (editable) {\r\n //Added or removed rows, TF rows number needs to be re-calculated\r\n let fnE = cfg.on_added_dom_row;\r\n cfg.on_added_dom_row = function () {\r\n var args = arguments;\r\n tf.nbFilterableRows++;\r\n if (!tf.paging) {\r\n tf.emitter.emit('rows-changed', tf, this);\r\n } else {\r\n tf.nbFilterableRows++;\r\n tf.paging = false;\r\n tf.feature('paging').destroy();\r\n tf.feature('paging').reset();\r\n }\r\n if (tf.alternateRows) {\r\n tf.feature('alternateRows').init();\r\n }\r\n if (fnE) {\r\n fnE.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n if (cfg.actions && cfg.actions['delete']) {\r\n let fnF = cfg.actions['delete'].on_after_submit;\r\n cfg.actions['delete'].on_after_submit = function () {\r\n var args = arguments;\r\n tf.nbFilterableRows--;\r\n if (!tf.paging) {\r\n tf.emitter.emit('rows-changed', tf, this);\r\n } else {\r\n tf.nbFilterableRows--;\r\n tf.paging = false;\r\n tf.feature('paging').destroy();\r\n tf.feature('paging').reset(false);\r\n }\r\n if (tf.alternateRows) {\r\n tf.feature('alternateRows').init();\r\n }\r\n if (fnF) {\r\n fnF.call(null, args[0], args[1]);\r\n }\r\n };\r\n }\r\n }\r\n\r\n try {\r\n /* eslint-disable */\r\n this._ezEditTable = new EditTable(tf.id, cfg, startRow);\r\n this._ezEditTable.Init();\r\n /* eslint-enable */\r\n } catch (e) { throw new Error(INSTANTIATION_ERROR); }\r\n\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Reset advanced grid when previously removed\r\n */\r\n reset() {\r\n let ezEditTable = this._ezEditTable;\r\n if (ezEditTable) {\r\n if (this.cfg.selection) {\r\n /* eslint-disable */\r\n ezEditTable.Selection.Set();\r\n /* eslint-enable */\r\n }\r\n if (this.cfg.editable) {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Set();\r\n /* eslint-enable */\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Toggle behaviour\r\n */\r\n toggle() {\r\n let ezEditTable = this._ezEditTable;\r\n if (ezEditTable.editable) {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Remove();\r\n /* eslint-enable */\r\n } else {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Set();\r\n /* eslint-enable */\r\n }\r\n if (ezEditTable.selection) {\r\n /* eslint-disable */\r\n ezEditTable.Selection.Remove();\r\n /* eslint-enable */\r\n } else {\r\n /* eslint-disable */\r\n ezEditTable.Selection.Set();\r\n /* eslint-enable */\r\n }\r\n }\r\n\r\n _toggleForInputFilter() {\r\n let tf = this.tf;\r\n if (!tf.getActiveFilterId()) {\r\n return;\r\n }\r\n let colIndex = tf.getColumnIndexFromFilterId(tf.getActiveFilterId());\r\n let filterType = tf.getFilterType(colIndex);\r\n if (filterType === INPUT) {\r\n this.toggle();\r\n }\r\n }\r\n\r\n /**\r\n * Remove advanced grid\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n let ezEditTable = this._ezEditTable;\r\n if (ezEditTable) {\r\n if (this.cfg.selection) {\r\n /* eslint-disable */\r\n ezEditTable.Selection.ClearSelections();\r\n ezEditTable.Selection.Remove();\r\n /* eslint-enable */\r\n }\r\n if (this.cfg.editable) {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Remove();\r\n /* eslint-enable */\r\n }\r\n }\r\n\r\n this.emitter.off(['filter-focus', 'filter-blur'],\r\n () => this._toggleForInputFilter());\r\n this.initialized = false;\r\n }\r\n}\r\n","import AdapterSortableTable from './adapterSortabletable';\r\nimport {root} from '../../root';\r\n\r\nif (!root.SortableTable) {\r\n require('script-loader!sortabletable');\r\n}\r\n\r\nexport default AdapterSortableTable;\r\n","import {Feature} from '../../feature';\r\nimport {createElm, removeElm, elm} from '../../dom';\r\nimport {EMPTY_FN, isNull} from '../../types';\r\nimport {addEvt} from '../../event';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsFn, defaultsNb,\r\n} from '../../settings';\r\nimport {RIGHT} from '../../modules/toolbar';\r\n\r\n/**\r\n * Filters Visibility extension\r\n */\r\nexport default class FiltersVisibility extends Feature {\r\n\r\n /**\r\n * Creates an instance of FiltersVisibility\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} Configuration object\r\n */\r\n constructor(tf, f) {\r\n super(tf, f.name);\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(f.description,\r\n 'Filters row visibility manager');\r\n\r\n /**\r\n * Extension's stylesheet filename\r\n * @type {String}\r\n */\r\n this.stylesheet = defaultsStr(f.stylesheet , 'filtersVisibility.css');\r\n\r\n /**\r\n * Expand icon filename\r\n * @type {String}\r\n */\r\n this.icnExpand = defaultsStr(f.expand_icon_name, 'icn_exp.png');\r\n\r\n /**\r\n * Collapse icon filename\r\n * @type {String}\r\n */\r\n this.icnCollapse = defaultsStr(f.collapse_icon_name, 'icn_clp.png');\r\n\r\n /**\r\n * Main container element\r\n * @private\r\n */\r\n this.contEl = null;\r\n\r\n /**\r\n * Button element\r\n * @private\r\n */\r\n this.btnEl = null;\r\n\r\n /**\r\n * Expand icon HTML\r\n * @private\r\n */\r\n this.icnExpandHtml = '\"Expand';\r\n\r\n /**\r\n * Collapse icon HTML\r\n * @private\r\n */\r\n this.icnCollapseHtml = '\"Collapse';\r\n\r\n /**\r\n * Default text\r\n * @private\r\n */\r\n this.defaultText = 'Toggle filters';\r\n\r\n /**\r\n * ID of main container element\r\n * @type {String}\r\n */\r\n this.targetId = f.target_id || null;\r\n\r\n /**\r\n * Enable expand/collapse icon, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.enableIcon = defaultsBool(f.enable_icon, true);\r\n\r\n /**\r\n * Custom text for button\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, '');\r\n\r\n /**\r\n * Collapse button HTML\r\n * @private\r\n */\r\n this.collapseBtnHtml = this.enableIcon ?\r\n this.icnCollapseHtml + this.btnText :\r\n this.btnText || this.defaultText;\r\n\r\n /**\r\n * Expand button HTML\r\n * @private\r\n */\r\n this.expandBtnHtml = this.enableIcon ?\r\n this.icnExpandHtml + this.btnText :\r\n this.btnText || this.defaultText;\r\n\r\n /**\r\n * Button's custom HTML\r\n * @type {String}\r\n */\r\n this.btnHtml = defaultsStr(f.btn_html, null);\r\n\r\n /**\r\n * Css class for expand/collapse filters button\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class, 'btnExpClpFlt');\r\n\r\n /**\r\n * Css class for main container\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.cont_css_class, 'expClpFlt');\r\n\r\n /**\r\n * Filters row index\r\n * @type {Number}\r\n */\r\n this.filtersRowIndex = defaultsNb(f.filters_row_index,\r\n tf.getFiltersRowIndex());\r\n\r\n /**\r\n * Make filters visible at initialization, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.visibleAtStart = defaultsNb(f.visible_at_start, true);\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, RIGHT);\r\n\r\n /**\r\n * Callback fired before filters row is shown\r\n * @type {Function}\r\n */\r\n this.onBeforeShow = defaultsFn(f.on_before_show, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after filters row is shown\r\n * @type {Function}\r\n */\r\n this.onAfterShow = defaultsFn(f.on_after_show, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before filters row is hidden\r\n * @type {Function}\r\n */\r\n this.onBeforeHide = defaultsFn(f.on_before_hide, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after filters row is hidden\r\n * @type {Function}\r\n */\r\n this.onAfterHide = defaultsFn(f.on_after_hide, EMPTY_FN);\r\n\r\n //Import extension's stylesheet\r\n tf.import(f.name + 'Style', tf.getStylePath() + this.stylesheet, null,\r\n 'link');\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initialise extension\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-extension', this,\r\n !isNull(this.targetId));\r\n\r\n this.buildUI();\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.on(['show-filters'], (tf, visible) => this.show(visible));\r\n this.emitter.emit('filters-visibility-initialized', this.tf, this);\r\n this.emitter.emit('extension-initialized', this);\r\n }\r\n\r\n /**\r\n * Build UI elements\r\n */\r\n buildUI() {\r\n let tf = this.tf;\r\n let span = createElm('span');\r\n span.className = this.contCssClass;\r\n\r\n // Container element (rdiv or custom element)\r\n let targetEl = !this.targetId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.targetId);\r\n\r\n if (!this.targetId) {\r\n let firstChild = targetEl.firstChild;\r\n firstChild.parentNode.insertBefore(span, firstChild);\r\n } else {\r\n targetEl.appendChild(span);\r\n }\r\n\r\n let btn;\r\n if (!this.btnHtml) {\r\n btn = createElm('a', ['href', 'javascript:void(0);']);\r\n btn.className = this.btnCssClass;\r\n btn.title = this.btnText || this.defaultText;\r\n btn.innerHTML = this.collapseBtnHtml;\r\n span.appendChild(btn);\r\n } else { // Custom html\r\n span.innerHTML = this.btnHtml;\r\n btn = span.firstChild;\r\n }\r\n\r\n addEvt(btn, 'click', () => this.toggle());\r\n\r\n this.contEl = span;\r\n this.btnEl = btn;\r\n\r\n if (!this.visibleAtStart) {\r\n this.toggle();\r\n }\r\n }\r\n\r\n /**\r\n * Toggle filters visibility\r\n */\r\n toggle() {\r\n let tf = this.tf;\r\n let tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom();\r\n let fltRow = tbl.rows[this.filtersRowIndex];\r\n let isDisplayed = fltRow.style.display === '';\r\n\r\n this.show(!isDisplayed);\r\n }\r\n\r\n /**\r\n * Show or hide filters\r\n *\r\n * @param {boolean} [visible=true] Visibility flag\r\n */\r\n show(visible = true) {\r\n let tf = this.tf;\r\n let tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom();\r\n let fltRow = tbl.rows[this.filtersRowIndex];\r\n\r\n if (visible) {\r\n this.onBeforeShow(this);\r\n }\r\n if (!visible) {\r\n this.onBeforeHide(this);\r\n }\r\n\r\n fltRow.style.display = visible ? '' : 'none';\r\n if (this.enableIcon && !this.btnHtml) {\r\n this.btnEl.innerHTML = visible ?\r\n this.collapseBtnHtml : this.expandBtnHtml;\r\n }\r\n\r\n if (visible) {\r\n this.onAfterShow(this);\r\n }\r\n if (!visible) {\r\n this.onAfterHide(this);\r\n }\r\n\r\n this.emitter.emit('filters-toggled', tf, this, visible);\r\n }\r\n\r\n /**\r\n * Destroy the UI\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.off(['show-filters'], (tf, visible) => this.show(visible));\r\n\r\n this.btnEl.innerHTML = '';\r\n removeElm(this.btnEl);\r\n this.btnEl = null;\r\n\r\n this.contEl.innerHTML = '';\r\n removeElm(this.contEl);\r\n this.contEl = null;\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import {Feature} from '../../feature';\r\nimport {\r\n addClass, removeClass, createCheckItem, createElm, elm, removeElm,\r\n getText, tag\r\n} from '../../dom';\r\nimport {isUndef, EMPTY_FN, isNull} from '../../types';\r\nimport {addEvt, targetEvt, removeEvt} from '../../event';\r\nimport {root} from '../../root';\r\nimport {NONE} from '../../const';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsFn, defaultsNb, defaultsArr\r\n} from '../../settings';\r\nimport {RIGHT} from '../../modules/toolbar';\r\n\r\n/**\r\n * Columns Visibility extension\r\n */\r\nexport default class ColsVisibility extends Feature {\r\n\r\n /**\r\n * Creates an instance of ColsVisibility\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} Configuration object\r\n */\r\n constructor(tf, f) {\r\n super(tf, f.name);\r\n\r\n // Configuration object\r\n let cfg = this.config;\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(f.description, 'Columns visibility manager');\r\n\r\n /**\r\n * show/hide columns container element\r\n * @private\r\n */\r\n this.spanEl = null;\r\n\r\n /**\r\n * show/hide columns button element\r\n * @private\r\n */\r\n this.btnEl = null;\r\n\r\n /**\r\n * show/hide columns main container element\r\n * @private\r\n */\r\n this.contEl = null;\r\n\r\n /**\r\n * Enable tick to hide a column, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.tickToHide = defaultsBool(f.tick_to_hide, true);\r\n\r\n /**\r\n * Enable columns manager UI, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.manager = defaultsBool(f.manager, true);\r\n\r\n /**\r\n * Headers HTML table reference only if headers are external\r\n * @type {DOMElement}\r\n */\r\n this.headersTbl = f.headers_table || null;\r\n\r\n /**\r\n * Headers row index only if headers are external\r\n * @type {Number}\r\n */\r\n this.headersIndex = defaultsNb(f.headers_index, 1);\r\n\r\n /**\r\n * ID of main container element\r\n * @type {String}\r\n */\r\n this.contElTgtId = defaultsStr(f.container_target_id, null);\r\n\r\n /**\r\n * Alternative text for column headers in column manager UI\r\n * @type {Array}\r\n */\r\n this.headersText = defaultsArr(f.headers_text, []);\r\n\r\n /**\r\n * ID of button's container element\r\n * @type {String}\r\n */\r\n this.btnTgtId = defaultsStr(f.btn_target_id, null);\r\n\r\n /**\r\n * Button's text, defaults to Columns▼\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, 'Columns▼');\r\n\r\n /**\r\n * Button's inner HTML\r\n * @type {String}\r\n */\r\n this.btnHtml = defaultsStr(f.btn_html, null);\r\n\r\n /**\r\n * Css class for button\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class, 'colVis');\r\n\r\n /**\r\n * Columns manager UI close link text, defaults to 'Close'\r\n * @type {String}\r\n */\r\n this.btnCloseText = defaultsStr(f.btn_close_text, 'Close');\r\n\r\n /**\r\n * Columns manager UI close link HTML\r\n * @type {String}\r\n */\r\n this.btnCloseHtml = defaultsStr(f.btn_close_html, null);\r\n\r\n /**\r\n * Css for columns manager UI close link\r\n * @type {String}\r\n */\r\n this.btnCloseCssClass = defaultsStr(f.btn_close_css_class,\r\n this.btnCssClass);\r\n\r\n /**\r\n * Extension's stylesheet filename\r\n * @type {String}\r\n */\r\n this.stylesheet = defaultsStr(f.stylesheet, 'colsVisibility.css');\r\n\r\n /**\r\n * Css for columns manager UI span\r\n * @type {String}\r\n */\r\n this.spanCssClass = defaultsStr(f.span_css_class, 'colVisSpan');\r\n\r\n /**\r\n * Css for columns manager UI main container\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.cont_css_class, 'colVisCont');\r\n\r\n /**\r\n * Css for columns manager UI checklist (ul)\r\n * @type {String}\r\n */\r\n this.listCssClass = defaultsStr(cfg.list_css_class, 'cols_checklist');\r\n\r\n /**\r\n * Css for columns manager UI checklist item (li)\r\n * @type {String}\r\n */\r\n this.listItemCssClass = defaultsStr(cfg.checklist_item_css_class,\r\n 'cols_checklist_item');\r\n\r\n /**\r\n * Css for columns manager UI checklist item selected state (li)\r\n * @type {String}\r\n */\r\n this.listSlcItemCssClass = defaultsStr(\r\n cfg.checklist_selected_item_css_class,\r\n 'cols_checklist_slc_item'\r\n );\r\n\r\n /**\r\n * Text preceding the columns list, defaults to 'Hide' or 'Show'\r\n * depending on tick mode (tick_to_hide option)\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, this.tickToHide ? 'Hide: ' : 'Show: ');\r\n\r\n /**\r\n * List of columns indexes to be hidden at initialization\r\n * @type {Array}\r\n */\r\n this.atStart = defaultsArr(f.at_start, []);\r\n\r\n /**\r\n * Enable hover behaviour on columns manager button/link\r\n * @type {Boolean}\r\n */\r\n this.enableHover = Boolean(f.enable_hover);\r\n\r\n /**\r\n * Enable select all option, disabled by default\r\n * @type {Boolean}\r\n */\r\n this.enableTickAll = Boolean(f.enable_tick_all);\r\n\r\n /**\r\n * Text for select all option, defaults to 'Select all:'\r\n * @type {String}\r\n */\r\n this.tickAllText = defaultsStr(f.tick_all_text, 'Select all:');\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, RIGHT);\r\n\r\n /**\r\n * List of indexes of hidden columns\r\n * @private\r\n */\r\n this.hiddenCols = [];\r\n\r\n /**\r\n * Bound mouseup wrapper\r\n * @private\r\n */\r\n this.boundMouseup = null;\r\n\r\n /**\r\n * Callback fired when the extension is initialized\r\n * @type {Function}\r\n */\r\n this.onLoaded = defaultsFn(f.on_loaded, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before the columns manager is opened\r\n * @type {Function}\r\n */\r\n this.onBeforeOpen = defaultsFn(f.on_before_open, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the columns manager is opened\r\n * @type {Function}\r\n */\r\n this.onAfterOpen = defaultsFn(f.on_after_open, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before the columns manager is closed\r\n * @type {Function}\r\n */\r\n this.onBeforeClose = defaultsFn(f.on_before_close, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the columns manager is closed\r\n * @type {Function}\r\n */\r\n this.onAfterClose = defaultsFn(f.on_after_close, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before a column is hidden\r\n * @type {Function}\r\n */\r\n this.onBeforeColHidden = defaultsFn(f.on_before_col_hidden, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a column is hidden\r\n * @type {Function}\r\n */\r\n this.onAfterColHidden = defaultsFn(f.on_after_col_hidden, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before a column is displayed\r\n * @type {Function}\r\n */\r\n this.onBeforeColDisplayed = defaultsFn(f.on_before_col_displayed,\r\n EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a column is displayed\r\n * @type {Function}\r\n */\r\n this.onAfterColDisplayed = defaultsFn(f.on_after_col_displayed,\r\n EMPTY_FN);\r\n\r\n //Grid layout support\r\n if (tf.gridLayout) {\r\n this.headersTbl = tf.feature('gridLayout').headTbl; //headers table\r\n this.headersIndex = 0; //headers index\r\n }\r\n\r\n //Loads extension stylesheet\r\n tf.import(f.name + 'Style', tf.getStylePath() + this.stylesheet, null,\r\n 'link');\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Mouse-up event handler handling popup auto-close behaviour\r\n * @private\r\n */\r\n onMouseup(evt) {\r\n let targetElm = targetEvt(evt);\r\n\r\n while (targetElm && targetElm !== this.contEl\r\n && targetElm !== this.btnEl) {\r\n targetElm = targetElm.parentNode;\r\n }\r\n\r\n if (targetElm !== this.contEl && targetElm !== this.btnEl) {\r\n this.toggle();\r\n }\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Toggle columns manager UI\r\n */\r\n toggle() {\r\n // ensure mouseup event handler is removed\r\n removeEvt(root, 'mouseup', this.boundMouseup);\r\n\r\n let contDisplay = this.contEl.style.display;\r\n\r\n if (contDisplay !== 'inline') {\r\n this.onBeforeOpen(this);\r\n }\r\n if (contDisplay === 'inline') {\r\n this.onBeforeClose(this);\r\n }\r\n\r\n this.contEl.style.display = contDisplay === 'inline' ?\r\n NONE : 'inline';\r\n\r\n if (contDisplay !== 'inline') {\r\n this.onAfterOpen(this);\r\n addEvt(root, 'mouseup', this.boundMouseup);\r\n }\r\n if (contDisplay === 'inline') {\r\n this.onAfterClose(this);\r\n }\r\n }\r\n\r\n /**\r\n * Check an item in columns manager UI\r\n * @private\r\n */\r\n checkItem(lbl) {\r\n let li = lbl.parentNode;\r\n if (!li || !lbl) {\r\n return;\r\n }\r\n let isChecked = lbl.firstChild.checked;\r\n let colIndex = lbl.firstChild.getAttribute('id').split('_')[1];\r\n colIndex = parseInt(colIndex, 10);\r\n if (isChecked) {\r\n addClass(li, this.listSlcItemCssClass);\r\n } else {\r\n removeClass(li, this.listSlcItemCssClass);\r\n }\r\n\r\n let hide = false;\r\n if ((this.tickToHide && isChecked) ||\r\n (!this.tickToHide && !isChecked)) {\r\n hide = true;\r\n }\r\n this.setHidden(colIndex, hide);\r\n }\r\n\r\n /**\r\n * Initializes ColsVisibility instance\r\n */\r\n init() {\r\n if (this.initialized || !this.manager) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-extension', this,\r\n !isNull(this.btnTgtId));\r\n\r\n this.emitter.on(['hide-column'],\r\n (tf, colIndex) => this.hideCol(colIndex));\r\n\r\n this.buildBtn();\r\n this.buildManager();\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.boundMouseup = this.onMouseup.bind(this);\r\n\r\n this.emitter.emit('columns-visibility-initialized', this.tf, this);\r\n this.emitter.emit('extension-initialized', this);\r\n\r\n // Hide columns at start at very end of initialization, do not move\r\n // as order is important\r\n this._hideAtStart();\r\n }\r\n\r\n /**\r\n * Build main button UI\r\n */\r\n buildBtn() {\r\n if (this.btnEl) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n let span = createElm('span');\r\n span.className = this.spanCssClass;\r\n\r\n // Container element (rdiv or custom element)\r\n let targetEl = !this.btnTgtId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.btnTgtId);\r\n\r\n if (!this.btnTgtId) {\r\n let firstChild = targetEl.firstChild;\r\n firstChild.parentNode.insertBefore(span, firstChild);\r\n } else {\r\n targetEl.appendChild(span);\r\n }\r\n\r\n if (!this.btnHtml) {\r\n let btn = createElm('a', ['href', 'javascript:;']);\r\n btn.className = this.btnCssClass;\r\n btn.title = this.desc;\r\n\r\n btn.innerHTML = this.btnText;\r\n span.appendChild(btn);\r\n if (!this.enableHover) {\r\n addEvt(btn, 'click', (evt) => this.toggle(evt));\r\n } else {\r\n addEvt(btn, 'mouseover', (evt) => this.toggle(evt));\r\n }\r\n } else { // Custom html\r\n span.innerHTML = this.btnHtml;\r\n let colVisEl = span.firstChild;\r\n if (!this.enableHover) {\r\n addEvt(colVisEl, 'click', (evt) => this.toggle(evt));\r\n } else {\r\n addEvt(colVisEl, 'mouseover', (evt) => this.toggle(evt));\r\n }\r\n }\r\n\r\n this.spanEl = span;\r\n this.btnEl = this.spanEl.firstChild;\r\n\r\n this.onLoaded(this);\r\n }\r\n\r\n /**\r\n * Build columns manager UI\r\n */\r\n buildManager() {\r\n let tf = this.tf;\r\n\r\n let container = !this.contElTgtId ?\r\n createElm('div') :\r\n elm(this.contElTgtId);\r\n container.className = this.contCssClass;\r\n\r\n //Extension description\r\n let extNameLabel = createElm('p');\r\n extNameLabel.innerHTML = this.text;\r\n container.appendChild(extNameLabel);\r\n\r\n //Headers list\r\n let ul = createElm('ul');\r\n ul.className = this.listCssClass;\r\n\r\n let tbl = this.headersTbl || tf.dom();\r\n let headerIndex = this.headersTbl ?\r\n this.headersIndex : tf.getHeadersRowIndex();\r\n let headerRow = tbl.rows[headerIndex];\r\n\r\n //Tick all option\r\n if (this.enableTickAll) {\r\n let li = createCheckItem('col__' + tf.id, this.tickAllText,\r\n this.tickAllText);\r\n addClass(li, this.listItemCssClass);\r\n ul.appendChild(li);\r\n li.check.checked = !this.tickToHide;\r\n\r\n addEvt(li.check, 'click', () => {\r\n for (let h = 0; h < headerRow.cells.length; h++) {\r\n let itm = elm('col_' + h + '_' + tf.id);\r\n if (itm && li.check.checked !== itm.checked) {\r\n itm.click();\r\n itm.checked = li.check.checked;\r\n }\r\n }\r\n });\r\n }\r\n\r\n for (let i = 0; i < headerRow.cells.length; i++) {\r\n let cell = headerRow.cells[i];\r\n let cellText = this.headersText[i] || this._getHeaderText(cell);\r\n let liElm = createCheckItem('col_' + i + '_' + tf.id, cellText,\r\n cellText);\r\n addClass(liElm, this.listItemCssClass);\r\n if (!this.tickToHide) {\r\n addClass(liElm, this.listSlcItemCssClass);\r\n }\r\n ul.appendChild(liElm);\r\n if (!this.tickToHide) {\r\n liElm.check.checked = true;\r\n }\r\n\r\n addEvt(liElm.check, 'click', (evt) => {\r\n let elm = targetEvt(evt);\r\n let lbl = elm.parentNode;\r\n this.checkItem(lbl);\r\n });\r\n }\r\n\r\n //separator\r\n let p = createElm('p', ['align', 'center']);\r\n let btn;\r\n //Close link\r\n if (!this.btnCloseHtml) {\r\n btn = createElm('a', ['href', 'javascript:;']);\r\n btn.className = this.btnCloseCssClass;\r\n btn.innerHTML = this.btnCloseText;\r\n addEvt(btn, 'click', (evt) => this.toggle(evt));\r\n p.appendChild(btn);\r\n } else {\r\n p.innerHTML = this.btnCloseHtml;\r\n btn = p.firstChild;\r\n addEvt(btn, 'click', (evt) => this.toggle(evt));\r\n }\r\n\r\n container.appendChild(ul);\r\n container.appendChild(p);\r\n\r\n this.btnEl.parentNode.insertBefore(container, this.btnEl);\r\n this.contEl = container;\r\n }\r\n\r\n /**\r\n * Hide or show specified columns\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} hide Hide column if true or show if false\r\n */\r\n setHidden(colIndex, hide) {\r\n let tf = this.tf;\r\n let tbl = tf.dom();\r\n\r\n if (hide) {\r\n this.onBeforeColHidden(this, colIndex);\r\n } else {\r\n this.onBeforeColDisplayed(this, colIndex);\r\n }\r\n\r\n this._hideElements(tbl, colIndex, hide);\r\n if (this.headersTbl) {\r\n this._hideElements(this.headersTbl, colIndex, hide);\r\n }\r\n\r\n let hiddenCols = this.hiddenCols;\r\n let itemIndex = hiddenCols.indexOf(colIndex);\r\n if (hide) {\r\n if (itemIndex === -1) {\r\n this.hiddenCols.push(colIndex);\r\n }\r\n } else {\r\n if (itemIndex !== -1) {\r\n this.hiddenCols.splice(itemIndex, 1);\r\n }\r\n }\r\n\r\n if (hide) {\r\n this.onAfterColHidden(this, colIndex);\r\n this.emitter.emit('column-hidden', tf, this, colIndex,\r\n this.hiddenCols);\r\n } else {\r\n this.onAfterColDisplayed(this, colIndex);\r\n this.emitter.emit('column-shown', tf, this, colIndex,\r\n this.hiddenCols);\r\n }\r\n }\r\n\r\n /**\r\n * Show specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n showCol(colIndex) {\r\n if (isUndef(colIndex) || !this.isColHidden(colIndex)) {\r\n return;\r\n }\r\n if (this.manager && this.contEl) {\r\n let itm = elm('col_' + colIndex + '_' + this.tf.id);\r\n if (itm) {\r\n itm.click();\r\n }\r\n } else {\r\n this.setHidden(colIndex, false);\r\n }\r\n }\r\n\r\n /**\r\n * Hide specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n hideCol(colIndex) {\r\n if (isUndef(colIndex) || this.isColHidden(colIndex)) {\r\n return;\r\n }\r\n if (this.manager && this.contEl) {\r\n let itm = elm('col_' + colIndex + '_' + this.tf.id);\r\n if (itm) {\r\n itm.click();\r\n }\r\n } else {\r\n this.setHidden(colIndex, true);\r\n }\r\n }\r\n\r\n /**\r\n * Determine if specified column is hidden\r\n * @param {Number} colIndex Column index\r\n */\r\n isColHidden(colIndex) {\r\n if (this.hiddenCols.indexOf(colIndex) !== -1) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Toggle visibility of specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n toggleCol(colIndex) {\r\n if (isUndef(colIndex) || this.isColHidden(colIndex)) {\r\n this.showCol(colIndex);\r\n } else {\r\n this.hideCol(colIndex);\r\n }\r\n }\r\n\r\n /**\r\n * Return the indexes of the columns currently hidden\r\n * @return {Array} column indexes\r\n */\r\n getHiddenCols() {\r\n return this.hiddenCols;\r\n }\r\n\r\n /**\r\n * Remove the columns manager\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n if (elm(this.contElTgtId)) {\r\n elm(this.contElTgtId).innerHTML = '';\r\n } else {\r\n this.contEl.innerHTML = '';\r\n removeElm(this.contEl);\r\n this.contEl = null;\r\n }\r\n this.btnEl.innerHTML = '';\r\n removeElm(this.btnEl);\r\n this.btnEl = null;\r\n\r\n this.emitter.off(['hide-column'],\r\n (tf, colIndex) => this.hideCol(colIndex));\r\n\r\n this.boundMouseup = null;\r\n\r\n this.initialized = false;\r\n }\r\n\r\n _getHeaderText(cell) {\r\n if (!cell.hasChildNodes) {\r\n return '';\r\n }\r\n\r\n for (let i = 0; i < cell.childNodes.length; i++) {\r\n let n = cell.childNodes[i];\r\n if (n.nodeType === 3) {\r\n return n.nodeValue;\r\n } else if (n.nodeType === 1) {\r\n if (n.id && n.id.indexOf('popUp') !== -1) {\r\n continue;\r\n } else {\r\n return getText(n);\r\n }\r\n }\r\n continue;\r\n }\r\n return '';\r\n }\r\n\r\n _hideElements(tbl, colIdx, hide) {\r\n this._hideCells(tbl, colIdx, hide);\r\n this._hideCol(tbl, colIdx, hide);\r\n }\r\n\r\n _hideCells(tbl, colIdx, hide) {\r\n for (let i = 0; i < tbl.rows.length; i++) {\r\n let row = tbl.rows[i];\r\n let cell = row.cells[colIdx];\r\n if (cell) {\r\n cell.style.display = hide ? NONE : '';\r\n }\r\n }\r\n }\r\n\r\n _hideCol(tbl, colIdx, hide) {\r\n let colElms = tag(tbl, 'col');\r\n if (colElms.length === 0) {\r\n return;\r\n }\r\n colElms[colIdx].style.display = hide ? NONE : '';\r\n }\r\n\r\n _hideAtStart() {\r\n this.atStart.forEach((colIdx) => {\r\n this.hideCol(colIdx);\r\n });\r\n }\r\n}\r\n","import {Feature} from '../../feature';\r\nimport {createText, elm} from '../../dom';\r\nimport {isArray, isEmpty, EMPTY_FN} from '../../types';\r\nimport {numSortAsc} from '../../sort';\r\nimport {FORMATTED_NUMBER} from '../../const';\r\nimport formatNumber from 'format-number';\r\nimport {defaultsFn, defaultsArr} from '../../settings';\r\nimport {bound} from '../../event';\r\n\r\nconst EVENTS = [\r\n 'after-filtering',\r\n 'after-page-change',\r\n 'after-page-length-change'\r\n];\r\n\r\nconst SUM = 'sum';\r\nconst MEAN = 'mean';\r\nconst MIN = 'min';\r\nconst MAX = 'max';\r\nconst MEDIAN = 'median';\r\nconst Q1 = 'q1';\r\nconst Q3 = 'q3';\r\n\r\n/**\r\n * Column calculations extension\r\n */\r\nexport default class ColOps extends Feature {\r\n\r\n /**\r\n * Creates an instance of ColOps\r\n *\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} opts Configuration object\r\n */\r\n constructor(tf, opts) {\r\n super(tf, opts.name);\r\n\r\n /**\r\n * Callback fired before columns operations start\r\n * @type {Function}\r\n */\r\n this.onBeforeOperation = defaultsFn(opts.on_before_operation, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after columns operations are completed\r\n * @type {Function}\r\n */\r\n this.onAfterOperation = defaultsFn(opts.on_after_operation, EMPTY_FN);\r\n\r\n /**\r\n * Configuration options\r\n * @type {Object}\r\n */\r\n this.opts = opts;\r\n\r\n /**\r\n * List of DOM element IDs containing column's calculation result\r\n * @type {Array}\r\n */\r\n this.labelIds = defaultsArr(opts.id, []);\r\n\r\n /**\r\n * List of columns' indexes for calculations\r\n * @type {Array}\r\n */\r\n this.colIndexes = defaultsArr(opts.col, []);\r\n\r\n /**\r\n * List of operations - possible values: 'sum', 'mean', 'min', 'max',\r\n * 'median', 'q1', 'q3'\r\n * @type {Array}\r\n */\r\n this.operations = defaultsArr(opts.operation, []);\r\n\r\n /**\r\n * List of write methods used to write the result - possible values:\r\n * 'innerHTML', 'setValue', 'createTextNode'\r\n * @type {Array}\r\n */\r\n this.outputTypes = defaultsArr(opts.write_method, []);\r\n\r\n /**\r\n * List of format objects used for formatting the result -\r\n * refer to https://github.com/componitable/format-number to check\r\n * configuration options\r\n * @type {Array}\r\n */\r\n this.formatResults = defaultsArr(opts.format_result, []);\r\n\r\n /**\r\n * List of row indexes displaying the results\r\n * @type {Array}\r\n */\r\n this.totRowIndexes = defaultsArr(opts.tot_row_index, []);\r\n\r\n /**\r\n * List of row indexes excluded from calculations\r\n * @type {Array}\r\n */\r\n this.excludeRows = defaultsArr(opts.exclude_row, []);\r\n\r\n /**\r\n * List of decimal precision for calculation results\r\n * @type {Array}\r\n */\r\n this.decimalPrecisions = defaultsArr(opts.decimal_precision, 2);\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initializes ColOps instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n // subscribe to events\r\n this.emitter.on(EVENTS, bound(this.calcAll, this));\r\n\r\n this.calcAll();\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Calculates columns' values\r\n * Configuration options are stored in 'opts' property\r\n * - 'id' contains ids of elements showing result (array)\r\n * - 'col' contains the columns' indexes (array)\r\n * - 'operation' contains operation type (array, values: 'sum', 'mean',\r\n * 'min', 'max', 'median', 'q1', 'q3')\r\n * - 'write_method' array defines which method to use for displaying the\r\n * result (innerHTML, setValue, createTextNode) - default: 'innerHTML'\r\n * - 'tot_row_index' defines in which row results are displayed\r\n * (integers array)\r\n *\r\n * - changes made by Nuovella:\r\n * (1) optimized the routine (now it will only process each column once),\r\n * (2) added calculations for the median, lower and upper quartile.\r\n */\r\n calcAll() {\r\n let tf = this.tf;\r\n if (!tf.isInitialized()) {\r\n return;\r\n }\r\n\r\n this.onBeforeOperation(tf, this);\r\n this.emitter.emit('before-column-operation', tf, this);\r\n\r\n let { colIndexes, operations: colOperations, outputTypes,\r\n totRowIndexes, excludeRows, formatResults,\r\n decimalPrecisions } = this;\r\n\r\n //nuovella: determine unique list of columns to operate on\r\n let uIndexes = [];\r\n colIndexes.forEach((val) => {\r\n if (uIndexes.indexOf(val) === -1) {\r\n uIndexes.push(val);\r\n }\r\n });\r\n\r\n let nbCols = uIndexes.length,\r\n rows = tf.dom().rows,\r\n colValues = [];\r\n\r\n for (let u = 0; u < nbCols; u++) {\r\n //this retrieves col values\r\n //use uIndexes because we only want to pass through this loop\r\n //once for each column get the values in this unique column\r\n colValues.push(\r\n tf.getVisibleColumnData(uIndexes[u], false, excludeRows)\r\n );\r\n\r\n let curValues = colValues[u];\r\n\r\n //next: calculate all operations for this column\r\n let result = 0,\r\n operations = [],\r\n precisions = [],\r\n labels = [],\r\n writeType,\r\n formatResult = [],\r\n idx = 0;\r\n\r\n for (let k = 0; k < colIndexes.length; k++) {\r\n if (colIndexes[k] !== uIndexes[u]) {\r\n continue;\r\n }\r\n operations[idx] = (colOperations[k] || 'sum').toLowerCase();\r\n precisions[idx] = decimalPrecisions[k];\r\n labels[idx] = this.labelIds[k];\r\n writeType = isArray(outputTypes) ? outputTypes[k] : null;\r\n formatResult[idx] =\r\n this.configureFormat(uIndexes[u], formatResults[k]);\r\n idx++;\r\n }\r\n\r\n for (let i = 0; i < idx; i++) {\r\n // emit values before column calculation\r\n this.emitter.emit(\r\n 'before-column-calc',\r\n tf,\r\n this,\r\n uIndexes[u],\r\n curValues,\r\n operations[i],\r\n precisions[i]\r\n );\r\n\r\n result = Number(this.calc(curValues, operations[i], null));\r\n\r\n // emit column calculation result\r\n this.emitter.emit(\r\n 'column-calc',\r\n tf,\r\n this,\r\n uIndexes[u],\r\n result,\r\n operations[i],\r\n precisions[i]\r\n );\r\n\r\n // write result in expected DOM element\r\n this.writeResult(\r\n result,\r\n labels[i],\r\n writeType,\r\n precisions[i],\r\n formatResult[i]\r\n );\r\n\r\n }//for i\r\n\r\n // row(s) with result are always visible\r\n let totRow = totRowIndexes && totRowIndexes[u] ?\r\n rows[totRowIndexes[u]] : null;\r\n if (totRow) {\r\n totRow.style.display = '';\r\n }\r\n }//for u\r\n\r\n this.onAfterOperation(tf, this);\r\n this.emitter.emit('after-column-operation', tf, this);\r\n }\r\n\r\n /**\r\n * Make desired calculation on specified column.\r\n * @param {Number} colIndex Column index\r\n * @param {String} [operation=SUM] Operation type\r\n * @param {Number} precision Decimal precision\r\n * @returns {Number}\r\n */\r\n columnCalc(colIndex, operation = SUM, precision) {\r\n let excludeRows = this.excludeRows || [];\r\n let colValues = tf.getVisibleColumnData(colIndex, false, excludeRows);\r\n\r\n return Number(this.calc(colValues, operation, precision));\r\n }\r\n\r\n /**\r\n * Make calculation on passed values.\r\n * @param {Array} values List of values\r\n * @param {String} [operation=SUM] Optional operation type\r\n * @param {Number} precision Optional result precision\r\n * @returns {Number}\r\n * @private\r\n */\r\n calc(colValues, operation = SUM, precision) {\r\n let result = 0;\r\n\r\n if (operation === Q1 || operation === Q3 || operation === MEDIAN) {\r\n colValues = this.sortColumnValues(colValues, numSortAsc);\r\n }\r\n\r\n switch (operation) {\r\n case MEAN:\r\n result = this.calcMean(colValues);\r\n break;\r\n case SUM:\r\n result = this.calcSum(colValues);\r\n break;\r\n case MIN:\r\n result = this.calcMin(colValues);\r\n break;\r\n case MAX:\r\n result = this.calcMax(colValues);\r\n break;\r\n case MEDIAN:\r\n result = this.calcMedian(colValues);\r\n break;\r\n case Q1:\r\n result = this.calcQ1(colValues);\r\n break;\r\n case Q3:\r\n result = this.calcQ3(colValues);\r\n break;\r\n }\r\n\r\n return isEmpty(precision) ? result : result.toFixed(precision);\r\n }\r\n\r\n /**\r\n * Calculate the sum of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcSum(values = []) {\r\n if (isEmpty(values)) {\r\n return 0;\r\n }\r\n let result = values.reduce((x, y) => Number(x) + Number(y));\r\n return result;\r\n }\r\n\r\n /**\r\n * Calculate the mean of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMean(values = []) {\r\n let result = this.calcSum(values) / values.length;\r\n return Number(result);\r\n }\r\n\r\n /**\r\n * Calculate the max value of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMax(values = []) {\r\n return Math.max.apply(null, values);\r\n }\r\n\r\n /**\r\n * Calculate the min value of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMin(values = []) {\r\n return Math.min.apply(null, values);\r\n }\r\n\r\n /**\r\n * Calculate the median of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMedian(values = []) {\r\n let nbValues = values.length;\r\n let aux = 0;\r\n if (nbValues % 2 === 1) {\r\n aux = Math.floor(nbValues / 2);\r\n return Number(values[aux]);\r\n }\r\n return (Number(values[nbValues / 2]) +\r\n Number(values[((nbValues / 2) - 1)])) / 2;\r\n }\r\n\r\n /**\r\n * Calculate the lower quartile of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcQ1(values = []) {\r\n let nbValues = values.length;\r\n let posa = 0.0;\r\n posa = Math.floor(nbValues / 4);\r\n if (4 * posa === nbValues) {\r\n return (Number(values[posa - 1]) +\r\n Number(values[posa])) / 2;\r\n }\r\n return Number(values[posa]);\r\n }\r\n\r\n /**\r\n * Calculate the upper quartile of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcQ3(values = []) {\r\n let nbValues = values.length;\r\n let posa = 0.0;\r\n let posb = 0.0;\r\n posa = Math.floor(nbValues / 4);\r\n if (4 * posa === nbValues) {\r\n posb = 3 * posa;\r\n return (Number(values[posb]) +\r\n Number(values[posb - 1])) / 2;\r\n }\r\n return Number(values[nbValues - posa - 1]);\r\n }\r\n\r\n /**\r\n * Sort passed values with supplied sorter function.\r\n * @param {Array} [values=[]] List of values to be sorted\r\n * @param {Function} sorter Sorter function\r\n * @returns {Array}\r\n */\r\n sortColumnValues(values = [], sorter) {\r\n return values.sort(sorter);\r\n }\r\n\r\n /**\r\n * Write calculation result in passed DOM element with supplied write method\r\n * and decimal precision.\r\n * @param {Number} [result=0] Calculation result\r\n * @param {DOMElement} label DOM element\r\n * @param {String} [writeType='innerhtml'] Write method\r\n * @param {Number} [precision=2] Applied decimal precision\r\n * @private\r\n */\r\n writeResult(result = 0, label, writeType = 'innerhtml',\r\n precision = 2, format = {}) {\r\n let labelElm = elm(label);\r\n\r\n if (!labelElm) {\r\n return;\r\n }\r\n\r\n result = result.toFixed(precision);\r\n if (isNaN(result) || !isFinite(result)) {\r\n result = '';\r\n } else {\r\n result = formatNumber(format)(result);\r\n }\r\n\r\n switch (writeType.toLowerCase()) {\r\n case 'innerhtml':\r\n labelElm.innerHTML = result;\r\n break;\r\n case 'setvalue':\r\n labelElm.value = result;\r\n break;\r\n case 'createtextnode':\r\n let oldNode = labelElm.firstChild;\r\n let txtNode = createText(result);\r\n labelElm.replaceChild(txtNode, oldNode);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Configure the format options used to format the operation result based\r\n * on column type.\r\n * @param {Number} colIndex Column index\r\n * @param {Object} [format={}] Format object\r\n * @returns {Object}\r\n * @private\r\n */\r\n configureFormat(colIndex, format = {}) {\r\n let tf = this.tf;\r\n if (tf.hasType(colIndex, [FORMATTED_NUMBER])) {\r\n let colType = tf.colTypes[colIndex];\r\n if (colType.decimal && !format.decimal) {\r\n format.decimal = colType.decimal;\r\n }\r\n if (colType.thousands && !format.integerSeparator) {\r\n format.integerSeparator = colType.thousands;\r\n }\r\n } else {\r\n format.decimal = format.decimal || '';\r\n format.integerSeparator = format.integerSeparator || '';\r\n }\r\n return format;\r\n }\r\n\r\n /** Remove extension */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n // unsubscribe to events\r\n this.emitter.off(EVENTS, bound(this.calcAll, this));\r\n\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import AdapterEzEditTable from './adapterEzEditTable';\r\n\r\nexport default AdapterEzEditTable;","module.exports = \"/*----------------------------------------------------------------------------\\\\\\r\\n| Sortable Table 1.12 |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Created by Erik Arvidsson |\\r\\n| (http://webfx.eae.net/contact.html#erik) |\\r\\n| For WebFX (http://webfx.eae.net/) |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| A DOM 1 based script that allows an ordinary HTML table to be sortable. |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Copyright (c) 1998 - 2006 Erik Arvidsson |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not |\\r\\n| use this file except in compliance with the License. You may obtain a copy |\\r\\n| of the License at http://www.apache.org/licenses/LICENSE-2.0 |\\r\\n| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |\\r\\n| Unless required by applicable law or agreed to in writing, software |\\r\\n| distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT |\\r\\n| WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |\\r\\n| License for the specific language governing permissions and limitations |\\r\\n| under the License. |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| 2003-01-10 | First version |\\r\\n| 2003-01-19 | Minor changes to the date parsing |\\r\\n| 2003-01-28 | JScript 5.0 fixes (no support for 'in' operator) |\\r\\n| 2003-02-01 | Sloppy typo like error fixed in getInnerText |\\r\\n| 2003-07-04 | Added workaround for IE cellIndex bug. |\\r\\n| 2003-11-09 | The bDescending argument to sort was not correctly working |\\r\\n| | Using onclick DOM0 event if no support for addEventListener |\\r\\n| | or attachEvent |\\r\\n| 2004-01-13 | Adding addSortType and removeSortType which makes it a lot |\\r\\n| | easier to add new, custom sort types. |\\r\\n| 2004-01-27 | Switch to use descending = false as the default sort order. |\\r\\n| | Change defaultDescending to suit your needs. |\\r\\n| 2004-03-14 | Improved sort type None look and feel a bit |\\r\\n| 2004-08-26 | Made the handling of tBody and tHead more flexible. Now you |\\r\\n| | can use another tHead or no tHead, and you can chose some |\\r\\n| | other tBody. |\\r\\n| 2006-04-25 | Changed license to Apache Software License 2.0 |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Created 2003-01-10 | All changes are in the log above. | Updated 2006-04-25 |\\r\\n\\\\----------------------------------------------------------------------------*/\\r\\n\\r\\n\\r\\nfunction SortableTable(oTable, oSortTypes) {\\r\\n\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\r\\n\\tthis.sortColumn = null;\\r\\n\\tthis.descending = null;\\r\\n\\r\\n\\tvar oThis = this;\\r\\n\\tthis._headerOnclick = function (e) {\\r\\n\\t\\toThis.headerOnclick(e);\\r\\n\\t};\\r\\n\\r\\n\\tif (oTable) {\\r\\n\\t\\tthis.setTable( oTable );\\r\\n\\t\\tthis.document = oTable.ownerDocument || oTable.document;\\r\\n\\t}\\r\\n\\telse {\\r\\n\\t\\tthis.document = document;\\r\\n\\t}\\r\\n\\r\\n\\r\\n\\t// only IE needs this\\r\\n\\tvar win = this.document.defaultView || this.document.parentWindow;\\r\\n\\tthis._onunload = function () {\\r\\n\\t\\toThis.destroy();\\r\\n\\t};\\r\\n\\tif (win && typeof win.attachEvent != \\\"undefined\\\") {\\r\\n\\t\\twin.attachEvent(\\\"onunload\\\", this._onunload);\\r\\n\\t}\\r\\n}\\r\\n\\r\\nSortableTable.gecko = navigator.product == \\\"Gecko\\\";\\r\\nSortableTable.msie = /msie/i.test(navigator.userAgent);\\r\\n// Mozilla is faster when doing the DOM manipulations on\\r\\n// an orphaned element. MSIE is not\\r\\nSortableTable.removeBeforeSort = SortableTable.gecko;\\r\\n\\r\\nSortableTable.prototype.onsort = function () {};\\r\\n\\r\\n// default sort order. true -> descending, false -> ascending\\r\\nSortableTable.prototype.defaultDescending = false;\\r\\n\\r\\n// shared between all instances. This is intentional to allow external files\\r\\n// to modify the prototype\\r\\nSortableTable.prototype._sortTypeInfo = {};\\r\\n\\r\\nSortableTable.prototype.setTable = function (oTable) {\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.element = oTable;\\r\\n\\tthis.setTHead( oTable.tHead );\\r\\n\\tthis.setTBody( oTable.tBodies[0] );\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setTHead = function (oTHead) {\\r\\n\\tif (this.tHead && this.tHead != oTHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.tHead = oTHead;\\r\\n\\tthis.initHeader( this.sortTypes );\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setTBody = function (oTBody) {\\r\\n\\tthis.tBody = oTBody;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setSortTypes = function ( oSortTypes ) {\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.initHeader( this.sortTypes );\\r\\n};\\r\\n\\r\\n// adds arrow containers and events\\r\\n// also binds sort type to the header cells so that reordering columns does\\r\\n// not break the sort types\\r\\nSortableTable.prototype.initHeader = function (oSortTypes) {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar doc = this.tHead.ownerDocument || this.tHead.document;\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\tvar l = cells.length;\\r\\n\\tvar img, c;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tc = cells[i];\\r\\n\\t\\tif (this.sortTypes[i] != null && this.sortTypes[i] != \\\"None\\\") {\\r\\n\\t\\t\\timg = doc.createElement(\\\"IMG\\\");\\r\\n\\t\\t\\timg.src = \\\"images/blank.png\\\";\\r\\n\\t\\t\\tc.appendChild(img);\\r\\n\\t\\t\\tif (this.sortTypes[i] != null)\\r\\n\\t\\t\\t\\tc._sortType = this.sortTypes[i];\\r\\n\\t\\t\\tif (typeof c.addEventListener != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.addEventListener(\\\"click\\\", this._headerOnclick, false);\\r\\n\\t\\t\\telse if (typeof c.attachEvent != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.attachEvent(\\\"onclick\\\", this._headerOnclick);\\r\\n\\t\\t\\telse\\r\\n\\t\\t\\t\\tc.onclick = this._headerOnclick;\\r\\n\\t\\t}\\r\\n\\t\\telse\\r\\n\\t\\t{\\r\\n\\t\\t\\tc.setAttribute( \\\"_sortType\\\", oSortTypes[i] );\\r\\n\\t\\t\\tc._sortType = \\\"None\\\";\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\tthis.updateHeaderArrows();\\r\\n};\\r\\n\\r\\n// remove arrows and events\\r\\nSortableTable.prototype.uninitHeader = function () {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar l = cells.length;\\r\\n\\tvar c;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tc = cells[i];\\r\\n\\t\\tif (c._sortType != null && c._sortType != \\\"None\\\") {\\r\\n\\t\\t\\tc.removeChild(c.lastChild);\\r\\n\\t\\t\\tif (typeof c.removeEventListener != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.removeEventListener(\\\"click\\\", this._headerOnclick, false);\\r\\n\\t\\t\\telse if (typeof c.detachEvent != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.detachEvent(\\\"onclick\\\", this._headerOnclick);\\r\\n\\t\\t\\tc._sortType = null;\\r\\n\\t\\t\\tc.removeAttribute( \\\"_sortType\\\" );\\r\\n\\t\\t}\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.updateHeaderArrows = function () {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar l = cells.length;\\r\\n\\tvar img;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tif (cells[i]._sortType != null && cells[i]._sortType != \\\"None\\\") {\\r\\n\\t\\t\\timg = cells[i].lastChild;\\r\\n\\t\\t\\tif (i == this.sortColumn)\\r\\n\\t\\t\\t\\timg.className = \\\"sort-arrow \\\" + (this.descending ? \\\"descending\\\" : \\\"ascending\\\");\\r\\n\\t\\t\\telse\\r\\n\\t\\t\\t\\timg.className = \\\"sort-arrow\\\";\\r\\n\\t\\t}\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.headerOnclick = function (e) {\\r\\n\\t// find TD element\\r\\n\\tvar el = e.target || e.srcElement;\\r\\n\\twhile (el.tagName != \\\"TD\\\")\\r\\n\\t\\tel = el.parentNode;\\r\\n\\r\\n\\tthis.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);\\r\\n};\\r\\n\\r\\n// IE returns wrong cellIndex when columns are hidden\\r\\nSortableTable.getCellIndex = function (oTd) {\\r\\n\\tvar cells = oTd.parentNode.childNodes\\r\\n\\tvar l = cells.length;\\r\\n\\tvar i;\\r\\n\\tfor (i = 0; cells[i] != oTd && i < l; i++)\\r\\n\\t\\t;\\r\\n\\treturn i;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getSortType = function (nColumn) {\\r\\n\\treturn this.sortTypes[nColumn] || \\\"String\\\";\\r\\n};\\r\\n\\r\\n// only nColumn is required\\r\\n// if bDescending is left out the old value is taken into account\\r\\n// if sSortType is left out the sort type is found from the sortTypes array\\r\\n\\r\\nSortableTable.prototype.sort = function (nColumn, bDescending, sSortType) {\\r\\n\\tif (!this.tBody) return;\\r\\n\\tif (sSortType == null)\\r\\n\\t\\tsSortType = this.getSortType(nColumn);\\r\\n\\r\\n\\t// exit if None\\r\\n\\tif (sSortType == \\\"None\\\")\\r\\n\\t\\treturn;\\r\\n\\r\\n\\tif (bDescending == null) {\\r\\n\\t\\tif (this.sortColumn != nColumn)\\r\\n\\t\\t\\tthis.descending = this.defaultDescending;\\r\\n\\t\\telse\\r\\n\\t\\t\\tthis.descending = !this.descending;\\r\\n\\t}\\r\\n\\telse\\r\\n\\t\\tthis.descending = bDescending;\\r\\n\\r\\n\\tthis.sortColumn = nColumn;\\r\\n\\r\\n\\tif (typeof this.onbeforesort == \\\"function\\\")\\r\\n\\t\\tthis.onbeforesort();\\r\\n\\r\\n\\tvar f = this.getSortFunction(sSortType, nColumn);\\r\\n\\tvar a = this.getCache(sSortType, nColumn);\\r\\n\\tvar tBody = this.tBody;\\r\\n\\r\\n\\ta.sort(f);\\r\\n\\r\\n\\tif (this.descending)\\r\\n\\t\\ta.reverse();\\r\\n\\r\\n\\tif (SortableTable.removeBeforeSort) {\\r\\n\\t\\t// remove from doc\\r\\n\\t\\tvar nextSibling = tBody.nextSibling;\\r\\n\\t\\tvar p = tBody.parentNode;\\r\\n\\t\\tp.removeChild(tBody);\\r\\n\\t}\\r\\n\\r\\n\\t// insert in the new order\\r\\n\\tvar l = a.length;\\r\\n\\tfor (var i = 0; i < l; i++)\\r\\n\\t\\ttBody.appendChild(a[i].element);\\r\\n\\r\\n\\tif (SortableTable.removeBeforeSort) {\\r\\n\\t\\t// insert into doc\\r\\n\\t\\tp.insertBefore(tBody, nextSibling);\\r\\n\\t}\\r\\n\\r\\n\\tthis.updateHeaderArrows();\\r\\n\\r\\n\\tthis.destroyCache(a);\\r\\n\\r\\n\\tif (typeof this.onsort == \\\"function\\\")\\r\\n\\t\\tthis.onsort();\\r\\n};\\r\\n\\r\\nSortableTable.prototype.asyncSort = function (nColumn, bDescending, sSortType) {\\r\\n\\tvar oThis = this;\\r\\n\\tthis._asyncsort = function () {\\r\\n\\t\\toThis.sort(nColumn, bDescending, sSortType);\\r\\n\\t};\\r\\n\\twindow.setTimeout(this._asyncsort, 1);\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getCache = function (sType, nColumn) {\\r\\n\\tif (!this.tBody) return [];\\r\\n\\tvar rows = this.tBody.rows;\\r\\n\\tvar l = rows.length;\\r\\n\\tvar a = new Array(l);\\r\\n\\tvar r;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tr = rows[i];\\r\\n\\t\\ta[i] = {\\r\\n\\t\\t\\tvalue:\\t\\tthis.getRowValue(r, sType, nColumn),\\r\\n\\t\\t\\telement:\\tr\\r\\n\\t\\t};\\r\\n\\t};\\r\\n\\treturn a;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.destroyCache = function (oArray) {\\r\\n\\tvar l = oArray.length;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\toArray[i].value = null;\\r\\n\\t\\toArray[i].element = null;\\r\\n\\t\\toArray[i] = null;\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\\r\\n\\t// if we have defined a custom getRowValue use that\\r\\n\\tif (this._sortTypeInfo[sType] && this._sortTypeInfo[sType].getRowValue)\\r\\n\\t\\treturn this._sortTypeInfo[sType].getRowValue(oRow, nColumn);\\r\\n\\r\\n\\tvar s;\\r\\n\\tvar c = oRow.cells[nColumn];\\r\\n\\tif (typeof c.innerText != \\\"undefined\\\")\\r\\n\\t\\ts = c.innerText;\\r\\n\\telse\\r\\n\\t\\ts = SortableTable.getInnerText(c);\\r\\n\\treturn this.getValueFromString(s, sType);\\r\\n};\\r\\n\\r\\nSortableTable.getInnerText = function (oNode) {\\r\\n\\tvar s = \\\"\\\";\\r\\n\\tvar cs = oNode.childNodes;\\r\\n\\tvar l = cs.length;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tswitch (cs[i].nodeType) {\\r\\n\\t\\t\\tcase 1: //ELEMENT_NODE\\r\\n\\t\\t\\t\\ts += SortableTable.getInnerText(cs[i]);\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\tcase 3:\\t//TEXT_NODE\\r\\n\\t\\t\\t\\ts += cs[i].nodeValue;\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\treturn s;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getValueFromString = function (sText, sType) {\\r\\n\\tif (this._sortTypeInfo[sType])\\r\\n\\t\\treturn this._sortTypeInfo[sType].getValueFromString( sText );\\r\\n\\treturn sText;\\r\\n\\t/*\\r\\n\\tswitch (sType) {\\r\\n\\t\\tcase \\\"Number\\\":\\r\\n\\t\\t\\treturn Number(sText);\\r\\n\\t\\tcase \\\"CaseInsensitiveString\\\":\\r\\n\\t\\t\\treturn sText.toUpperCase();\\r\\n\\t\\tcase \\\"Date\\\":\\r\\n\\t\\t\\tvar parts = sText.split(\\\"-\\\");\\r\\n\\t\\t\\tvar d = new Date(0);\\r\\n\\t\\t\\td.setFullYear(parts[0]);\\r\\n\\t\\t\\td.setDate(parts[2]);\\r\\n\\t\\t\\td.setMonth(parts[1] - 1);\\r\\n\\t\\t\\treturn d.valueOf();\\r\\n\\t}\\r\\n\\treturn sText;\\r\\n\\t*/\\r\\n\\t};\\r\\n\\r\\nSortableTable.prototype.getSortFunction = function (sType, nColumn) {\\r\\n\\tif (this._sortTypeInfo[sType])\\r\\n\\t\\treturn this._sortTypeInfo[sType].compare;\\r\\n\\treturn SortableTable.basicCompare;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.destroy = function () {\\r\\n\\tthis.uninitHeader();\\r\\n\\tvar win = this.document.parentWindow;\\r\\n\\tif (win && typeof win.detachEvent != \\\"undefined\\\") {\\t// only IE needs this\\r\\n\\t\\twin.detachEvent(\\\"onunload\\\", this._onunload);\\r\\n\\t}\\r\\n\\tthis._onunload = null;\\r\\n\\tthis.element = null;\\r\\n\\tthis.tHead = null;\\r\\n\\tthis.tBody = null;\\r\\n\\tthis.document = null;\\r\\n\\tthis._headerOnclick = null;\\r\\n\\tthis.sortTypes = null;\\r\\n\\tthis._asyncsort = null;\\r\\n\\tthis.onsort = null;\\r\\n};\\r\\n\\r\\n// Adds a sort type to all instance of SortableTable\\r\\n// sType : String - the identifier of the sort type\\r\\n// fGetValueFromString : function ( s : string ) : T - A function that takes a\\r\\n// string and casts it to a desired format. If left out the string is just\\r\\n// returned\\r\\n// fCompareFunction : function ( n1 : T, n2 : T ) : Number - A normal JS sort\\r\\n// compare function. Takes two values and compares them. If left out less than,\\r\\n// <, compare is used\\r\\n// fGetRowValue : function( oRow : HTMLTRElement, nColumn : int ) : T - A function\\r\\n// that takes the row and the column index and returns the value used to compare.\\r\\n// If left out then the innerText is first taken for the cell and then the\\r\\n// fGetValueFromString is used to convert that string the desired value and type\\r\\n\\r\\nSortableTable.prototype.addSortType = function (sType, fGetValueFromString, fCompareFunction, fGetRowValue) {\\r\\n\\tthis._sortTypeInfo[sType] = {\\r\\n\\t\\ttype:\\t\\t\\t\\tsType,\\r\\n\\t\\tgetValueFromString:\\tfGetValueFromString || SortableTable.idFunction,\\r\\n\\t\\tcompare:\\t\\t\\tfCompareFunction || SortableTable.basicCompare,\\r\\n\\t\\tgetRowValue:\\t\\tfGetRowValue\\r\\n\\t};\\r\\n};\\r\\n\\r\\n// this removes the sort type from all instances of SortableTable\\r\\nSortableTable.prototype.removeSortType = function (sType) {\\r\\n\\tdelete this._sortTypeInfo[sType];\\r\\n};\\r\\n\\r\\nSortableTable.basicCompare = function compare(n1, n2) {\\r\\n\\tif (n1.value < n2.value)\\r\\n\\t\\treturn -1;\\r\\n\\tif (n2.value < n1.value)\\r\\n\\t\\treturn 1;\\r\\n\\treturn 0;\\r\\n};\\r\\n\\r\\nSortableTable.idFunction = function (x) {\\r\\n\\treturn x;\\r\\n};\\r\\n\\r\\nSortableTable.toUpperCase = function (s) {\\r\\n\\treturn s.toUpperCase();\\r\\n};\\r\\n\\r\\nSortableTable.toDate = function (s) {\\r\\n\\tvar parts = s.split(\\\"-\\\");\\r\\n\\tvar d = new Date(0);\\r\\n\\td.setFullYear(parts[0]);\\r\\n\\td.setDate(parts[2]);\\r\\n\\td.setMonth(parts[1] - 1);\\r\\n\\treturn d.valueOf();\\r\\n};\\r\\n\\r\\n\\r\\n// add sort types\\r\\nSortableTable.prototype.addSortType(\\\"Number\\\", Number);\\r\\nSortableTable.prototype.addSortType(\\\"CaseInsensitiveString\\\", SortableTable.toUpperCase);\\r\\nSortableTable.prototype.addSortType(\\\"Date\\\", SortableTable.toDate);\\r\\nSortableTable.prototype.addSortType(\\\"String\\\");\\r\\n// None is a special case\\r\\n\"","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\nmodule.exports = function(src) {\n\tfunction log(error) {\n\t\t(typeof console !== \"undefined\")\n\t\t&& (console.error || console.log)(\"[Script Loader]\", error);\n\t}\n\n\t// Check for IE =< 8\n\tfunction isIE() {\n\t\treturn typeof attachEvent !== \"undefined\" && typeof addEventListener === \"undefined\";\n\t}\n\n\ttry {\n\t\tif (typeof execScript !== \"undefined\" && isIE()) {\n\t\t\texecScript(src);\n\t\t} else if (typeof eval !== \"undefined\") {\n\t\t\teval.call(null, src);\n\t\t} else {\n\t\t\tlog(\"EvalError: No eval function available\");\n\t\t}\n\t} catch (error) {\n\t\tlog(error);\n\t}\n}\n","require(\"!!C:\\\\Users\\\\max.guglielmi\\\\Documents\\\\dev\\\\perso\\\\javascript\\\\GitHub\\\\TableFilter\\\\node_modules\\\\script-loader\\\\addScript.js\")(require(\"!!C:\\\\Users\\\\max.guglielmi\\\\Documents\\\\dev\\\\perso\\\\javascript\\\\GitHub\\\\TableFilter\\\\node_modules\\\\raw-loader\\\\index.js!C:\\\\Users\\\\max.guglielmi\\\\Documents\\\\dev\\\\perso\\\\javascript\\\\GitHub\\\\TableFilter\\\\libs\\\\sortabletable.js\"))","\nmodule.exports = formatter;\nmodule.exports.default = formatter;\n\nfunction formatter(options) {\n options = options || {};\n\n\n // *********************************************************************************************\n // Set defaults for negatives\n // options.negative, options.negativeOut, options.separator retained for backward compatibility\n // *********************************************************************************************\n\n // type of negative; default left\n options.negativeType = options.negativeType || (options.negative === 'R' ? 'right' : 'left')\n\n // negative symbols '-' or '()'\n if (typeof options.negativeLeftSymbol !== 'string') {\n switch (options.negativeType) {\n case 'left':\n options.negativeLeftSymbol = '-';\n break;\n case 'brackets':\n options.negativeLeftSymbol = '(';\n break;\n default:\n options.negativeLeftSymbol = '';\n }\n }\n if (typeof options.negativeRightSymbol !== 'string') {\n switch (options.negativeType) {\n case 'right':\n options.negativeRightSymbol = '-';\n break;\n case 'brackets':\n options.negativeRightSymbol = ')';\n break;\n default:\n options.negativeRightSymbol = '';\n }\n }\n\n // whether negative symbol should be inside/outside prefix and suffix\n\n if (typeof options.negativeLeftOut !== \"boolean\") {\n options.negativeLeftOut = (options.negativeOut === false ? false : true);\n }\n if (typeof options.negativeRightOut !== \"boolean\") {\n options.negativeRightOut = (options.negativeOut === false ? false : true);\n }\n\n //prefix and suffix\n options.prefix = options.prefix || '';\n options.suffix = options.suffix || '';\n\n //separators\n if (typeof options.integerSeparator !== 'string') {\n options.integerSeparator = (typeof options.separator === 'string' ? options.separator : ',');\n }\n options.decimalsSeparator = typeof options.decimalsSeparator === 'string' ? options.decimalsSeparator : '';\n options.decimal = options.decimal || '.';\n\n //padders\n options.padLeft = options.padLeft || -1 //default no padding\n options.padRight = options.padRight || -1 //default no padding\n\n function format(number, overrideOptions) {\n overrideOptions = overrideOptions || {};\n\n if (number || number === 0) {\n number = '' + number;//convert number to string if it isn't already\n } else {\n return '';\n }\n\n //identify a negative number and make it absolute\n var output = [];\n var negative = number.charAt(0) === '-';\n number = number.replace(/^\\-/g, '');\n\n //Prepare output with left hand negative and/or prefix\n if (!options.negativeLeftOut && !overrideOptions.noUnits) {\n output.push(options.prefix);\n }\n if (negative) {\n output.push(options.negativeLeftSymbol);\n }\n if (options.negativeLeftOut && !overrideOptions.noUnits) {\n output.push(options.prefix);\n }\n\n //Format core number\n number = number.split('.');\n if (options.round != null) round(number, options.round);\n if (options.truncate != null) number[1] = truncate(number[1], options.truncate);\n if (options.padLeft > 0) number[0] = padLeft(number[0], options.padLeft);\n if (options.padRight > 0) number[1] = padRight(number[1], options.padRight);\n if (!overrideOptions.noSeparator && number[1]) number[1] = addDecimalSeparators(number[1], options.decimalsSeparator);\n if (!overrideOptions.noSeparator && number[0]) number[0] = addIntegerSeparators(number[0], options.integerSeparator);\n output.push(number[0]);\n if (number[1]) {\n output.push(options.decimal);\n output.push(number[1]);\n }\n\n //Prepare output with right hand negative and/or prefix\n if (options.negativeRightOut && !overrideOptions.noUnits) {\n output.push(options.suffix);\n }\n if (negative) {\n output.push(options.negativeRightSymbol);\n }\n if (!options.negativeRightOut && !overrideOptions.noUnits) {\n output.push(options.suffix);\n }\n\n //join output and return\n return output.join('');\n }\n\n format.negative = options.negative;\n format.negativeOut = options.negativeOut;\n format.negativeType = options.negativeType;\n format.negativeLeftOut = options.negativeLeftOut;\n format.negativeLeftSymbol = options.negativeLeftSymbol;\n format.negativeRightOut = options.negativeRightOut;\n format.negativeRightSymbol = options.negativeRightSymbol;\n format.prefix = options.prefix;\n format.suffix = options.suffix;\n format.separate = options.separate;\n format.integerSeparator = options.integerSeparator;\n format.decimalsSeparator = options.decimalsSeparator;\n format.decimal = options.decimal;\n format.padLeft = options.padLeft;\n format.padRight = options.padRight;\n format.truncate = options.truncate;\n format.round = options.round;\n\n function unformat(number, allowedSeparators) {\n allowedSeparators = allowedSeparators || [];\n if (options.allowedSeparators) {\n options.allowedSeparators.forEach(function (s) { allowedSeparators.push (s); });\n }\n allowedSeparators.push(options.integerSeparator);\n allowedSeparators.push(options.decimalsSeparator);\n number = number.replace(options.prefix, '');\n number = number.replace(options.suffix, '');\n var newNumber = number;\n do {\n number = newNumber;\n for (var i = 0; i < allowedSeparators.length; i++) {\n newNumber = newNumber.replace(allowedSeparators[i], '');\n }\n } while (newNumber != number);\n return number;\n }\n format.unformat = unformat;\n\n function validate(number, allowedSeparators) {\n number = unformat(number, allowedSeparators);\n number = number.split(options.decimal);\n if (number.length > 2) {\n return false;\n } else if (options.truncate != null && number[1] && number[1].length > options.truncate) {\n return false;\n } else if (options.round != null && number[1] && number[1].length > options.round) {\n return false;\n } else {\n return /^-?\\d+\\.?\\d*$/.test(number);\n }\n }\n return format;\n}\n\n//where x is already the integer part of the number\nfunction addIntegerSeparators(x, separator) {\n x += '';\n if (!separator) return x;\n var rgx = /(\\d+)(\\d{3})/;\n while (rgx.test(x)) {\n x = x.replace(rgx, '$1' + separator + '$2');\n }\n return x;\n}\n\n//where x is already the decimal part of the number\nfunction addDecimalSeparators(x, separator) {\n x += '';\n if (!separator) return x;\n var rgx = /(\\d{3})(\\d+)/;\n while (rgx.test(x)) {\n x = x.replace(rgx, '$1' + separator + '$2');\n }\n return x;\n}\n\n//where x is the integer part of the number\nfunction padLeft(x, padding) {\n x = x + '';\n var buf = [];\n while (buf.length + x.length < padding) {\n buf.push('0');\n }\n return buf.join('') + x;\n}\n\n//where x is the decimals part of the number\nfunction padRight(x, padding) {\n if (x) {\n x += '';\n } else {\n x = '';\n }\n var buf = [];\n while (buf.length + x.length < padding) {\n buf.push('0');\n }\n return x + buf.join('');\n}\nfunction truncate(x, length) {\n if (x) {\n x += '';\n }\n if (x && x.length > length) {\n return x.substr(0, length);\n } else {\n return x;\n }\n}\n\n//where number is an array with 0th item as integer string and 1st item as decimal string (no negatives)\nfunction round(number, places) {\n if (number[1] && places >= 0 && number[1].length > places) {\n //truncate to correct number of decimal places\n var decim = number[1].slice(0, places);\n //if next digit was >= 5 we need to round up\n if (+(number[1].substr(places, 1)) >= 5) {\n //But first count leading zeros as converting to a number will loose them\n var leadingzeros = \"\";\n while (decim.charAt(0)===\"0\") {\n leadingzeros = leadingzeros + \"0\";\n decim = decim.substr(1);\n }\n //Then we can change decim to a number and add 1 before replacing leading zeros\n decim = (+decim + 1) + '';\n decim = leadingzeros + decim;\n if (decim.length > places) {\n //adding one has made it longer\n number[0] = (+number[0]+ +decim.charAt(0)) + ''; //add value of firstchar to the integer part\n decim = decim.substring(1); //ignore the 1st char at the beginning which is the carry to the integer part\n }\n }\n number[1] = decim;\n }\n return number;\n}\n"],"sourceRoot":""} \ No newline at end of file