diff options
author | dizzy <diosmosis@users.noreply.github.com> | 2021-10-06 01:26:16 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-06 01:26:16 +0300 |
commit | f6ddf36e130fb6d87cebad351057643441c3d173 (patch) | |
tree | a081baf8152c56073e08dcc0167802e00e70d796 /plugins/CoreHome | |
parent | 8998ae37375d9dcec802abb06e3fd009f93496b3 (diff) |
[Vue] migrate periods service to typescript & introduce frontend unit testing for vue & migrate periods.spec.js (#18092)
* initial periods service conversion
* get period service migration to compile
* getLastNRange was public static
* fix an issue, switch angularjs tests to use chrome headless and hope it works
* remove phantomjs requirement
* get vue unit testing to work w/ jest (only option right now, the mocha plugin is not compatible w/ vue 3 and no one is working on making it compatible)
* more test code
* progress
* more progress
* more progress, single passing test
* finish converting periods.spec.js and get test to pass
* remove use of any in periods service and rebuilt corehome
* add missing file headers
* fix run-once.sh
* debug travis build
* remove debugging code & update submodule
* update submodule
* more travis debugging
* install npm dependencies in "install-ubuntu.sh"
* use latest node
* try this again
* typos
* more debugging
* more debugging
* testing something
* testing something else
* testing something else
* testing something else
* testing something else
* testing something else
* testing something else
* testing something else
* testing something else
* testing something else
* testing something else
* revert travis.yml changes
* update some expected screenshots
* releasechecklisttest fix
Diffstat (limited to 'plugins/CoreHome')
-rw-r--r-- | plugins/CoreHome/CoreHome.php | 1 | ||||
-rw-r--r-- | plugins/CoreHome/angularjs/common/services/periods.js | 421 | ||||
-rw-r--r-- | plugins/CoreHome/vue/dist/CoreHome.umd.js | 548 | ||||
-rw-r--r-- | plugins/CoreHome/vue/dist/CoreHome.umd.js.map | 2 | ||||
-rw-r--r-- | plugins/CoreHome/vue/dist/CoreHome.umd.min.js | 70 | ||||
-rw-r--r-- | plugins/CoreHome/vue/dist/CoreHome.umd.min.js.map | 2 | ||||
-rw-r--r-- | plugins/CoreHome/vue/src/Periods/Day.ts | 36 | ||||
-rw-r--r-- | plugins/CoreHome/vue/src/Periods/Month.ts | 45 | ||||
-rw-r--r-- | plugins/CoreHome/vue/src/Periods/Periods.adapter.ts | 27 | ||||
-rw-r--r-- | plugins/CoreHome/vue/src/Periods/Periods.spec.ts | 162 | ||||
-rw-r--r-- | plugins/CoreHome/vue/src/Periods/Periods.ts | 90 | ||||
-rw-r--r-- | plugins/CoreHome/vue/src/Periods/Range.ts | 116 | ||||
-rw-r--r-- | plugins/CoreHome/vue/src/Periods/Week.ts | 48 | ||||
-rw-r--r-- | plugins/CoreHome/vue/src/Periods/Year.ts | 44 | ||||
-rw-r--r-- | plugins/CoreHome/vue/src/Periods/utilities.ts | 89 | ||||
-rw-r--r-- | plugins/CoreHome/vue/src/index.ts | 8 | ||||
-rw-r--r-- | plugins/CoreHome/vue/src/translate.ts | 2 |
17 files changed, 1275 insertions, 436 deletions
diff --git a/plugins/CoreHome/CoreHome.php b/plugins/CoreHome/CoreHome.php index 2db472032f..2f2f4554eb 100644 --- a/plugins/CoreHome/CoreHome.php +++ b/plugins/CoreHome/CoreHome.php @@ -198,7 +198,6 @@ class CoreHome extends \Piwik\Plugin $jsFiles[] = "plugins/CoreHome/angularjs/common/services/piwik-url.js"; $jsFiles[] = "plugins/CoreHome/angularjs/common/services/report-metadata-model.js"; $jsFiles[] = "plugins/CoreHome/angularjs/common/services/reporting-pages-model.js"; - $jsFiles[] = "plugins/CoreHome/angularjs/common/services/periods.js"; $jsFiles[] = "plugins/CoreHome/angularjs/common/filters/filter.module.js"; $jsFiles[] = "plugins/CoreHome/angularjs/common/filters/translate.js"; diff --git a/plugins/CoreHome/angularjs/common/services/periods.js b/plugins/CoreHome/angularjs/common/services/periods.js deleted file mode 100644 index 33c5e1abcd..0000000000 --- a/plugins/CoreHome/angularjs/common/services/periods.js +++ /dev/null @@ -1,421 +0,0 @@ -/*! - * Matomo - free/libre analytics platform - * - * @link https://matomo.org - * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */ - -/** - * Piwik period management service for the frontend. - * - * Usage: - * - * var DayPeriod = piwikPeriods.get('day'); - * var day = new DayPeriod(new Date()); - * - * or - * - * var day = piwikPeriods.parse('day', '2013-04-05'); - * - * Adding custom periods: - * - * To add your own period to the frontend, create a period class for it - * w/ the following methods: - * - * - **getPrettyString()**: returns a human readable display string for the period. - * - **getDateRange()**: returns an array w/ two elements, the first being the start - * Date of the period, the second being the end Date. The dates - * must be Date objects, not strings, and are inclusive. - * - **containsToday()**: returns true if the date period contains today. False if not. - * - (_static_) **parse(strDate)**: creates a new instance of this period from the - * value of the 'date' query parameter. - * - (_static_) **getDisplayText**: returns translated text for the period, eg, 'month', - * 'week', etc. - * - * Then call piwik.addCustomPeriod w/ your period class: - * - * piwik.addCustomPeriod('mycustomperiod', MyCustomPeriod); - * - * NOTE: currently only single date periods like day, week, month year can - * be extended. Other types of periods that require a special UI to - * view/edit aren't, since there is currently no way to use a - * custom UI for a custom period. - */ -(function () { - angular.module('piwikApp.service').factory('piwikPeriods', piwikPeriods); - - var periods = {}, periodOrder = []; - - piwik.addCustomPeriod = addCustomPeriod; - - // day period - function DayPeriod(date) { - this.dateInPeriod = date; - } - - DayPeriod.parse = singleDatePeriodFactory(DayPeriod); - DayPeriod.getDisplayText = function () { - return _pk_translate('Intl_PeriodDay'); - }; - - DayPeriod.prototype = { - getPrettyString: function () { - return format(this.dateInPeriod); - }, - - getDateRange: function () { - return [new Date(this.dateInPeriod.getTime()), new Date(this.dateInPeriod.getTime())]; - }, - - containsToday: function () { - return todayIsInRange(this.getDateRange()); - } - }; - - addCustomPeriod('day', DayPeriod); - - // week period - function WeekPeriod(date) { - this.dateInPeriod = date; - } - - WeekPeriod.parse = singleDatePeriodFactory(WeekPeriod); - - WeekPeriod.getDisplayText = function () { - return _pk_translate('Intl_PeriodWeek'); - }; - - WeekPeriod.prototype = { - getPrettyString: function () { - var weekDates = this.getDateRange(this.dateInPeriod); - var startWeek = format(weekDates[0]); - var endWeek = format(weekDates[1]); - - return _pk_translate('General_DateRangeFromTo', [startWeek, endWeek]); - }, - - getDateRange: function () { - var daysToMonday = (this.dateInPeriod.getDay() + 6) % 7; - - var startWeek = new Date(this.dateInPeriod.getTime()); - startWeek.setDate(this.dateInPeriod.getDate() - daysToMonday); - - var endWeek = new Date(startWeek.getTime()); - endWeek.setDate(startWeek.getDate() + 6); - - return [startWeek, endWeek]; - }, - - containsToday: function () { - return todayIsInRange(this.getDateRange()); - } - }; - - addCustomPeriod('week', WeekPeriod); - - // month period - function MonthPeriod(date) { - this.dateInPeriod = date; - } - - MonthPeriod.parse = singleDatePeriodFactory(MonthPeriod); - - MonthPeriod.getDisplayText = function () { - return _pk_translate('Intl_PeriodMonth'); - }; - - MonthPeriod.prototype = { - getPrettyString: function () { - return _pk_translate('Intl_Month_Long_StandAlone_' + (this.dateInPeriod.getMonth() + 1)) + ' ' + - this.dateInPeriod.getFullYear(); - }, - - getDateRange: function () { - var startMonth = new Date(this.dateInPeriod.getTime()); - startMonth.setDate(1); - - var endMonth = new Date(this.dateInPeriod.getTime()); - endMonth.setDate(1); - endMonth.setMonth(endMonth.getMonth() + 1); - endMonth.setDate(0); - - return [startMonth, endMonth]; - }, - - containsToday: function () { - return todayIsInRange(this.getDateRange()); - } - }; - - addCustomPeriod('month', MonthPeriod); - - // year period - function YearPeriod(date) { - this.dateInPeriod = date; - } - - YearPeriod.parse = singleDatePeriodFactory(YearPeriod); - - YearPeriod.getDisplayText = function () { - return _pk_translate('Intl_PeriodYear'); - }; - - YearPeriod.prototype = { - getPrettyString: function () { - return this.dateInPeriod.getFullYear(); - }, - - getDateRange: function () { - var startYear = new Date(this.dateInPeriod.getTime()); - startYear.setMonth(0); - startYear.setDate(1); - - var endYear = new Date(this.dateInPeriod.getTime()); - endYear.setMonth(12); - endYear.setDate(0); - - return [startYear, endYear]; - }, - - containsToday: function () { - return todayIsInRange(this.getDateRange()); - } - }; - - addCustomPeriod('year', YearPeriod); - - // range period - function RangePeriod(startDate, endDate, childPeriodType) { - this.startDate = startDate; - this.endDate = endDate; - this.childPeriodType = childPeriodType; - } - - RangePeriod.parse = function parseRangePeriod(strDate, childPeriodType) { - childPeriodType = childPeriodType || 'day'; - - if (/^previous/.test(strDate)) { - var endDate = RangePeriod.getLastNRange(childPeriodType, 2).startDate; - return RangePeriod.getLastNRange(childPeriodType, strDate.substring(8), endDate); - } else if (/^last/.test(strDate)) { - return RangePeriod.getLastNRange(childPeriodType, strDate.substring(4)); - } else { - var parts = decodeURIComponent(strDate).split(','); - return new RangePeriod(parseDate(parts[0]), parseDate(parts[1]), childPeriodType) - } - }; - - /** - * Returns a range representing the last N childPeriodType periods, including the current one. - * - * @param childPeriodType - * @param strAmount - * @param endDate - * @returns {RangePeriod} - */ - RangePeriod.getLastNRange = function (childPeriodType, strAmount, endDate) { - var nAmount = Math.max(parseInt(strAmount) - 1, 0); - if (isNaN(nAmount)) { - throw new Error('Invalid range date: ' + strDate); - } - - endDate = endDate ? parseDate(endDate) : getToday(); - - var startDate = new Date(endDate.getTime()); - if (childPeriodType === 'day') { - startDate.setDate(startDate.getDate() - nAmount); - } else if (childPeriodType === 'week') { - startDate.setDate(startDate.getDate() - (nAmount * 7)); - } else if (childPeriodType === 'month') { - startDate.setDate(1); - startDate.setMonth(startDate.getMonth() - nAmount); - } else if (childPeriodType === 'year') { - startDate.setFullYear(startDate.getFullYear() - nAmount); - } else { - throw new Error("Unknown period type '" + childPeriodType + "'."); - } - - if (childPeriodType !== 'day') { - var startPeriod = periods[childPeriodType].parse(startDate); - var endPeriod = periods[childPeriodType].parse(endDate); - - startDate = startPeriod.getDateRange()[0]; - endDate = endPeriod.getDateRange()[1]; - } - - var firstWebsiteDate = new Date(1991, 7, 6); - if (startDate - firstWebsiteDate < 0) { - switch (childPeriodType) { - case 'year': - startDate = new Date(1992, 0, 1); - break; - case 'month': - startDate = new Date(1991, 8, 1); - break; - case 'week': - startDate = new Date(1991, 8, 12); - break; - case 'day': - default: - startDate = firstWebsiteDate; - break; - } - } - - return new RangePeriod(startDate, endDate, childPeriodType); - }; - - RangePeriod.getDisplayText = function () { - return _pk_translate('General_DateRangeInPeriodList'); - }; - - RangePeriod.prototype = { - getPrettyString: function () { - var start = format(this.startDate); - var end = format(this.endDate); - return _pk_translate('General_DateRangeFromTo', [start, end]); - }, - - getDateRange: function () { - return [this.startDate, this.endDate]; - }, - - containsToday: function () { - return todayIsInRange(this.getDateRange()); - } - }; - - addCustomPeriod('range', RangePeriod); - - // piwikPeriods service - function piwikPeriods() { - return { - getAllLabels: getAllLabels, - isRecognizedPeriod: isRecognizedPeriod, - get: get, - parse: parse, - parseDate: parseDate, - format: format, - RangePeriod: RangePeriod, - todayIsInRange: todayIsInRange - }; - - function getAllLabels() { - return [].concat(periodOrder); - } - - function get(strPeriod) { - var periodClass = periods[strPeriod]; - if (!periodClass) { - throw new Error('Invalid period label: ' + strPeriod); - } - return periodClass; - } - - function parse(strPeriod, strDate) { - return get(strPeriod).parse(strDate); - } - - function isRecognizedPeriod(strPeriod) { - return !! periods[strPeriod]; - } - } - - function addCustomPeriod(name, periodClass) { - if (periods[name]) { - throw new Error('The "' + name + '" period already exists! It cannot be overridden.'); - } - - periods[name] = periodClass; - periodOrder.push(name); - } - - function singleDatePeriodFactory(periodClass) { - return function (strDate) { - return new periodClass(parseDate(strDate)); - }; - } - - function format(date) { - return $.datepicker.formatDate('yy-mm-dd', date); - } - - function parseDate(strDate) { - if (strDate instanceof Date) { - return strDate; - } - - strDate = decodeURIComponent(strDate); - - if (strDate === 'today' - || strDate === 'now' - ) { - return getToday(); - } - - if (strDate === 'yesterday' - // note: ignoring the 'same time' part since the frontend doesn't care about the time - || strDate === 'yesterdaySameTime' - ) { - var yesterday = getToday(); - yesterday.setDate(yesterday.getDate() - 1); - return yesterday; - } - - if (strDate.match(/last[ -]?week/i)) { - var lastWeek = getToday(); - lastWeek.setDate(lastWeek.getDate() - 7); - return lastWeek; - } - - if (strDate.match(/last[ -]?month/i)) { - var lastMonth = getToday(); - lastMonth.setDate(1); - lastMonth.setMonth(lastMonth.getMonth() - 1); - return lastMonth; - } - - if (strDate.match(/last[ -]?year/i)) { - var lastYear = getToday(); - lastYear.setFullYear(lastYear.getFullYear() - 1); - return lastYear; - } - - try { - return $.datepicker.parseDate('yy-mm-dd', strDate); - } catch (err) { - // angular swallows this error, so manual console log here - console.error(err.message || err); - throw err; - } - } - - function getToday() { - var date = new Date(Date.now()); - - // undo browser timezone - date.setTime(date.getTime() + date.getTimezoneOffset() * 60 * 1000); - - // apply piwik site timezone (if it exists) - date.setHours(date.getHours() + ((piwik.timezoneOffset || 0) / 3600)); - - // get rid of hours/minutes/seconds/etc. - date.setHours(0); - date.setMinutes(0); - date.setSeconds(0); - date.setMilliseconds(0); - return date; - } - - function todayIsInRange(dateRange) { - if (!dateRange.isArray && dateRange.length !== 2) { - return false; - } - - if (getToday() >= dateRange[0] && getToday() <= dateRange[1]) { - return true; - } - - return false; - } -})(); diff --git a/plugins/CoreHome/vue/dist/CoreHome.umd.js b/plugins/CoreHome/vue/dist/CoreHome.umd.js index b08d85b079..3b81ac053b 100644 --- a/plugins/CoreHome/vue/dist/CoreHome.umd.js +++ b/plugins/CoreHome/vue/dist/CoreHome.umd.js @@ -115,6 +115,7 @@ __webpack_require__.d(__webpack_exports__, "activityIndicatorAdapter", function( __webpack_require__.d(__webpack_exports__, "ActivityIndicator", function() { return /* reexport */ ActivityIndicator; }); __webpack_require__.d(__webpack_exports__, "translate", function() { return /* reexport */ translate; }); __webpack_require__.d(__webpack_exports__, "alertAdapter", function() { return /* reexport */ alertAdapter; }); +__webpack_require__.d(__webpack_exports__, "Periods", function() { return /* reexport */ Periods_Periods; }); // CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js // This file is imported into lib/wc client bundles. @@ -132,10 +133,516 @@ if (typeof window !== 'undefined') { // Indicate to webpack that this file can be concatenated /* harmony default export */ var setPublicPath = (null); +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/translate.ts +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ +function translate(translationStringId, values = []) { + return _pk_translate(translationStringId, values); +} +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Periods/Periods.ts +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +/** + * Piwik period management service for the frontend. + * + * Usage: + * + * var DayPeriod = piwikPeriods.get('day'); + * var day = new DayPeriod(new Date()); + * + * or + * + * var day = piwikPeriods.parse('day', '2013-04-05'); + * + * Adding custom periods: + * + * To add your own period to the frontend, create a period class for it + * w/ the following methods: + * + * - **getPrettyString()**: returns a human readable display string for the period. + * - **getDateRange()**: returns an array w/ two elements, the first being the start + * Date of the period, the second being the end Date. The dates + * must be Date objects, not strings, and are inclusive. + * - **containsToday()**: returns true if the date period contains today. False if not. + * - (_static_) **parse(strDate)**: creates a new instance of this period from the + * value of the 'date' query parameter. + * - (_static_) **getDisplayText**: returns translated text for the period, eg, 'month', + * 'week', etc. + * + * Then call piwik.addCustomPeriod w/ your period class: + * + * piwik.addCustomPeriod('mycustomperiod', MyCustomPeriod); + * + * NOTE: currently only single date periods like day, week, month year can + * be extended. Other types of periods that require a special UI to + * view/edit aren't, since there is currently no way to use a + * custom UI for a custom period. + */ +class Periods { + constructor() { + _defineProperty(this, "periods", {}); + + _defineProperty(this, "periodOrder", []); + } + + addCustomPeriod(name, periodClass) { + if (this.periods[name]) { + throw new Error(`The "${name}" period already exists! It cannot be overridden.`); + } + + this.periods[name] = periodClass; + this.periodOrder.push(name); + } + + getAllLabels() { + return Array().concat(this.periodOrder); + } + + get(strPeriod) { + const periodClass = this.periods[strPeriod]; + + if (!periodClass) { + throw new Error(`Invalid period label: ${strPeriod}`); + } + + return periodClass; + } + + parse(strPeriod, strDate) { + return this.get(strPeriod).parse(strDate); + } + + isRecognizedPeriod(strPeriod) { + return !!this.periods[strPeriod]; + } + +} + +/* harmony default export */ var Periods_Periods = (new Periods()); +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Periods/utilities.ts +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ +function format(date) { + return $.datepicker.formatDate('yy-mm-dd', date); +} +function getToday() { + const date = new Date(Date.now()); // undo browser timezone + + date.setTime(date.getTime() + date.getTimezoneOffset() * 60 * 1000); // apply piwik site timezone (if it exists) + + date.setHours(date.getHours() + (piwik.timezoneOffset || 0) / 3600); // get rid of hours/minutes/seconds/etc. + + date.setHours(0); + date.setMinutes(0); + date.setSeconds(0); + date.setMilliseconds(0); + return date; +} +function parseDate(date) { + if (date instanceof Date) { + return date; + } + + const strDate = decodeURIComponent(date); + + if (strDate === 'today' || strDate === 'now') { + return getToday(); + } + + if (strDate === 'yesterday' // note: ignoring the 'same time' part since the frontend doesn't care about the time + || strDate === 'yesterdaySameTime') { + const yesterday = getToday(); + yesterday.setDate(yesterday.getDate() - 1); + return yesterday; + } + + if (strDate.match(/last[ -]?week/i)) { + const lastWeek = getToday(); + lastWeek.setDate(lastWeek.getDate() - 7); + return lastWeek; + } + + if (strDate.match(/last[ -]?month/i)) { + const lastMonth = getToday(); + lastMonth.setDate(1); + lastMonth.setMonth(lastMonth.getMonth() - 1); + return lastMonth; + } + + if (strDate.match(/last[ -]?year/i)) { + const lastYear = getToday(); + lastYear.setFullYear(lastYear.getFullYear() - 1); + return lastYear; + } + + try { + return $.datepicker.parseDate('yy-mm-dd', strDate); + } catch (err) { + // angular swallows this error, so manual console log here + console.error(err.message || err); + throw err; + } +} +function todayIsInRange(dateRange) { + if (dateRange.length !== 2) { + return false; + } + + if (getToday() >= dateRange[0] && getToday() <= dateRange[1]) { + return true; + } + + return false; +} +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Periods/Day.ts +function Day_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + + + +class Day_DayPeriod { + constructor(dateInPeriod) { + Day_defineProperty(this, "dateInPeriod", void 0); + + this.dateInPeriod = dateInPeriod; + } + + static parse(strDate) { + return new Day_DayPeriod(parseDate(strDate)); + } + + static getDisplayText() { + return translate('Intl_PeriodDay'); + } + + getPrettyString() { + return format(this.dateInPeriod); + } + + getDateRange() { + return [new Date(this.dateInPeriod.getTime()), new Date(this.dateInPeriod.getTime())]; + } + + containsToday() { + return todayIsInRange(this.getDateRange()); + } + +} +Periods_Periods.addCustomPeriod('day', Day_DayPeriod); +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Periods/Week.ts +function Week_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + + + +class Week_WeekPeriod { + constructor(dateInPeriod) { + Week_defineProperty(this, "dateInPeriod", void 0); + + this.dateInPeriod = dateInPeriod; + } + + static parse(strDate) { + return new Week_WeekPeriod(parseDate(strDate)); + } + + static getDisplayText() { + return translate('Intl_PeriodWeek'); + } + + getPrettyString() { + const weekDates = this.getDateRange(); + const startWeek = format(weekDates[0]); + const endWeek = format(weekDates[1]); + return translate('General_DateRangeFromTo', [startWeek, endWeek]); + } + + getDateRange() { + const daysToMonday = (this.dateInPeriod.getDay() + 6) % 7; + const startWeek = new Date(this.dateInPeriod.getTime()); + startWeek.setDate(this.dateInPeriod.getDate() - daysToMonday); + const endWeek = new Date(startWeek.getTime()); + endWeek.setDate(startWeek.getDate() + 6); + return [startWeek, endWeek]; + } + + containsToday() { + return todayIsInRange(this.getDateRange()); + } + +} +Periods_Periods.addCustomPeriod('week', Week_WeekPeriod); +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Periods/Month.ts +function Month_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + + + +class Month_MonthPeriod { + constructor(dateInPeriod) { + Month_defineProperty(this, "dateInPeriod", void 0); + + this.dateInPeriod = dateInPeriod; + } + + static parse(strDate) { + return new Month_MonthPeriod(parseDate(strDate)); + } + + static getDisplayText() { + return translate('Intl_PeriodMonth'); + } + + getPrettyString() { + const month = translate(`Intl_Month_Long_StandAlone_${this.dateInPeriod.getMonth() + 1}`); + return `${month} ${this.dateInPeriod.getFullYear()}`; + } + + getDateRange() { + const startMonth = new Date(this.dateInPeriod.getTime()); + startMonth.setDate(1); + const endMonth = new Date(this.dateInPeriod.getTime()); + endMonth.setDate(1); + endMonth.setMonth(endMonth.getMonth() + 1); + endMonth.setDate(0); + return [startMonth, endMonth]; + } + + containsToday() { + return todayIsInRange(this.getDateRange()); + } + +} +Periods_Periods.addCustomPeriod('month', Month_MonthPeriod); +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Periods/Year.ts +function Year_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + + + +class Year_YearPeriod { + constructor(dateInPeriod) { + Year_defineProperty(this, "dateInPeriod", void 0); + + this.dateInPeriod = dateInPeriod; + } + + static parse(strDate) { + return new Year_YearPeriod(parseDate(strDate)); + } + + static getDisplayText() { + return translate('Intl_PeriodYear'); + } + + getPrettyString() { + return this.dateInPeriod.getFullYear().toString(); + } + + getDateRange() { + const startYear = new Date(this.dateInPeriod.getTime()); + startYear.setMonth(0); + startYear.setDate(1); + const endYear = new Date(this.dateInPeriod.getTime()); + endYear.setMonth(12); + endYear.setDate(0); + return [startYear, endYear]; + } + + containsToday() { + return todayIsInRange(this.getDateRange()); + } + +} +Periods_Periods.addCustomPeriod('year', Year_YearPeriod); +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Periods/Range.ts +function Range_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + + + +class Range_RangePeriod { + constructor(startDate, endDate, childPeriodType) { + Range_defineProperty(this, "startDate", void 0); + + Range_defineProperty(this, "endDate", void 0); + + Range_defineProperty(this, "childPeriodType", void 0); + + this.startDate = startDate; + this.endDate = endDate; + this.childPeriodType = childPeriodType; + } + /** + * Returns a range representing the last N childPeriodType periods, including the current one. + */ + + + static getLastNRange(childPeriodType, strAmount, strEndDate) { + const nAmount = Math.max(parseInt(strAmount.toString(), 10) - 1, 0); + + if (Number.isNaN(nAmount)) { + throw new Error('Invalid range strAmount'); + } + + let endDate = strEndDate ? parseDate(strEndDate) : getToday(); + let startDate = new Date(endDate.getTime()); + + if (childPeriodType === 'day') { + startDate.setDate(startDate.getDate() - nAmount); + } else if (childPeriodType === 'week') { + startDate.setDate(startDate.getDate() - nAmount * 7); + } else if (childPeriodType === 'month') { + startDate.setDate(1); + startDate.setMonth(startDate.getMonth() - nAmount); + } else if (childPeriodType === 'year') { + startDate.setFullYear(startDate.getFullYear() - nAmount); + } else { + throw new Error(`Unknown period type '${childPeriodType}'.`); + } + + if (childPeriodType !== 'day') { + const startPeriod = Periods_Periods.periods[childPeriodType].parse(startDate); + const endPeriod = Periods_Periods.periods[childPeriodType].parse(endDate); + [startDate] = startPeriod.getDateRange(); + [, endDate] = endPeriod.getDateRange(); + } + + const firstWebsiteDate = new Date(1991, 7, 6); + + if (startDate.getTime() - firstWebsiteDate.getTime() < 0) { + switch (childPeriodType) { + case 'year': + startDate = new Date(1992, 0, 1); + break; + + case 'month': + startDate = new Date(1991, 8, 1); + break; + + case 'week': + startDate = new Date(1991, 8, 12); + break; + + case 'day': + default: + startDate = firstWebsiteDate; + break; + } + } + + return new Range_RangePeriod(startDate, endDate, childPeriodType); + } + + static parse(strDate, childPeriodType = 'day') { + if (/^previous/.test(strDate)) { + const endDate = Range_RangePeriod.getLastNRange(childPeriodType, '2').startDate; + return Range_RangePeriod.getLastNRange(childPeriodType, strDate.substring(8), endDate); + } + + if (/^last/.test(strDate)) { + return Range_RangePeriod.getLastNRange(childPeriodType, strDate.substring(4)); + } + + const parts = decodeURIComponent(strDate).split(','); + return new Range_RangePeriod(parseDate(parts[0]), parseDate(parts[1]), childPeriodType); + } + + static getDisplayText() { + return translate('General_DateRangeInPeriodList'); + } + + getPrettyString() { + const start = format(this.startDate); + const end = format(this.endDate); + return translate('General_DateRangeFromTo', [start, end]); + } + + getDateRange() { + return [this.startDate, this.endDate]; + } + + containsToday() { + return todayIsInRange(this.getDateRange()); + } + +} +Periods_Periods.addCustomPeriod('range', Range_RangePeriod); +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Periods/Periods.adapter.ts +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + + + +piwik.addCustomPeriod = Periods_Periods.addCustomPeriod.bind(Periods_Periods); + +function piwikPeriods() { + return { + getAllLabels: Periods_Periods.getAllLabels.bind(Periods_Periods), + isRecognizedPeriod: Periods_Periods.isRecognizedPeriod.bind(Periods_Periods), + get: Periods_Periods.get.bind(Periods_Periods), + parse: Periods_Periods.parse.bind(Periods_Periods), + parseDate: parseDate, + format: format, + RangePeriod: Range_RangePeriod, + todayIsInRange: todayIsInRange + }; +} + +angular.module('piwikApp.service').factory('piwikPeriods', piwikPeriods); // EXTERNAL MODULE: external {"commonjs":"vue","commonjs2":"vue","root":"Vue"} var external_commonjs_vue_commonjs2_vue_root_Vue_ = __webpack_require__("8bbf"); -// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue?vue&type=template&id=c109d738 +// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue?vue&type=template&id=6af4d064 const _hoisted_1 = { class: "loadingPiwik" @@ -149,12 +656,8 @@ const _hoisted_2 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_ function render(_ctx, _cache, $props, $setup, $data, $options) { return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])((Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", _hoisted_1, [_hoisted_2, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.loadingMessage), 1)], 512)), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.loading]]); } -// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue?vue&type=template&id=c109d738 +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue?vue&type=template&id=6af4d064 -// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/translate.ts -function translate(translationStringId, values = []) { - return window._pk_translate(translationStringId, values); // eslint-disable-line -} // CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue?vue&type=script&lang=ts @@ -182,6 +685,12 @@ ActivityIndicatorvue_type_script_lang_ts.render = render /* harmony default export */ var ActivityIndicator = (ActivityIndicatorvue_type_script_lang_ts); // CONCATENATED MODULE: ./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.adapter.ts +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ @@ -218,16 +727,16 @@ function activityIndicatorAdapter() { } activityIndicatorAdapter.$inject = []; angular.module('piwikApp').directive('piwikActivityIndicator', activityIndicatorAdapter); -// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/Alert/Alert.vue?vue&type=template&id=c4d43d96 +// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/Alert/Alert.vue?vue&type=template&id=c3863ae2 -function Alertvue_type_template_id_c4d43d96_render(_ctx, _cache, $props, $setup, $data, $options) { +function Alertvue_type_template_id_c3863ae2_render(_ctx, _cache, $props, $setup, $data, $options) { return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", { class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["alert", { [`alert-${_ctx.severity}`]: true }]) }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderSlot"])(_ctx.$slots, "default")], 2); } -// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Alert/Alert.vue?vue&type=template&id=c4d43d96 +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Alert/Alert.vue?vue&type=template&id=c3863ae2 // CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/Alert/Alert.vue?vue&type=script&lang=ts @@ -245,10 +754,16 @@ function Alertvue_type_template_id_c4d43d96_render(_ctx, _cache, $props, $setup, -Alertvue_type_script_lang_ts.render = Alertvue_type_template_id_c4d43d96_render +Alertvue_type_script_lang_ts.render = Alertvue_type_template_id_c3863ae2_render /* harmony default export */ var Alert = (Alertvue_type_script_lang_ts); // CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Alert/Alert.adapter.ts +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ function alertAdapter() { @@ -294,6 +809,19 @@ function alertAdapter() { alertAdapter.$inject = []; angular.module('piwikApp').directive('piwikAlert', alertAdapter); // CONCATENATED MODULE: ./plugins/CoreHome/vue/src/index.ts +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + + + + + + + diff --git a/plugins/CoreHome/vue/dist/CoreHome.umd.js.map b/plugins/CoreHome/vue/dist/CoreHome.umd.js.map index 440bbf1132..f16372dd2f 100644 --- a/plugins/CoreHome/vue/dist/CoreHome.umd.js.map +++ b/plugins/CoreHome/vue/dist/CoreHome.umd.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://CoreHome/webpack/universalModuleDefinition","webpack://CoreHome/webpack/bootstrap","webpack://CoreHome/external {\"commonjs\":\"vue\",\"commonjs2\":\"vue\",\"root\":\"Vue\"}","webpack://CoreHome/./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js","webpack://CoreHome/./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue","webpack://CoreHome/./plugins/CoreHome/vue/src/translate.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue?0bf6","webpack://CoreHome/./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue?f42e","webpack://CoreHome/./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue?6f80","webpack://CoreHome/./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.adapter.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/Alert/Alert.vue","webpack://CoreHome/./plugins/CoreHome/vue/src/Alert/Alert.vue?14a2","webpack://CoreHome/./plugins/CoreHome/vue/src/Alert/Alert.vue?92a9","webpack://CoreHome/./plugins/CoreHome/vue/src/Alert/Alert.vue?cc69","webpack://CoreHome/./plugins/CoreHome/vue/src/Alert/Alert.adapter.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/index.ts","webpack://CoreHome/./node_modules/@vue/cli-service/lib/commands/build/entry-lib-no-default.js"],"names":[],"mappings":"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","file":"CoreHome.umd.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"vue\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"CoreHome\"] = factory(require(\"vue\"));\n\telse\n\t\troot[\"CoreHome\"] = factory(root[\"Vue\"]);\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__8bbf__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"fae3\");\n","module.exports = __WEBPACK_EXTERNAL_MODULE__8bbf__;","// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var currentScript = window.document.currentScript\n if (process.env.NEED_CURRENTSCRIPT_POLYFILL) {\n var getCurrentScript = require('@soda/get-current-script')\n currentScript = getCurrentScript()\n\n // for backward compatibility, because previously we directly included the polyfill\n if (!('currentScript' in document)) {\n Object.defineProperty(document, 'currentScript', { get: getCurrentScript })\n }\n }\n\n var src = currentScript && currentScript.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/)\n if (src) {\n __webpack_public_path__ = src[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\nexport default null\n","<template>\n <div v-show=\"loading\" class=\"loadingPiwik\">\n <img src=\"plugins/Morpheus/images/loading-blue.gif\" alt=\"\"/>\n <span>{{ loadingMessage }}</span>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport translate from '../translate';\n\nexport default defineComponent({\n props: {\n loading: {\n type: Boolean,\n required: true,\n default: false,\n },\n loadingMessage: {\n type: String,\n required: false,\n default: translate('General_LoadingData'),\n },\n },\n});\n</script>\n","export default function translate(translationStringId: string, values: string[] = []): string {\n return window._pk_translate(translationStringId, values); // eslint-disable-line\n}\n","\nimport { defineComponent } from 'vue';\nimport translate from '../translate';\n\nexport default defineComponent({\n props: {\n loading: {\n type: Boolean,\n required: true,\n default: false,\n },\n loadingMessage: {\n type: String,\n required: false,\n default: translate('General_LoadingData'),\n },\n },\n});\n","export { default } from \"-!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??ref--14-3!../../../../../node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ActivityIndicator.vue?vue&type=script&lang=ts\"; export * from \"-!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??ref--14-3!../../../../../node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ActivityIndicator.vue?vue&type=script&lang=ts\"","import { render } from \"./ActivityIndicator.vue?vue&type=template&id=c109d738\"\nimport script from \"./ActivityIndicator.vue?vue&type=script&lang=ts\"\nexport * from \"./ActivityIndicator.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","import { createApp } from 'vue';\nimport ActivityIndicator from './ActivityIndicator.vue';\nimport translate from '../translate';\n\ninterface ActivityIndicatorAdapterScope extends ng.IScope {\n loading: boolean;\n loadingMessage: string;\n}\n\nexport default function activityIndicatorAdapter(): ng.IDirective {\n return {\n restrict: 'A',\n scope: {\n loading: '<',\n loadingMessage: '<',\n },\n template: '',\n link: function activityIndicatorAdapterLink(\n scope: ActivityIndicatorAdapterScope,\n element: ng.IAugmentedJQuery,\n ) {\n const app = createApp({\n template: '<activity-indicator :loading=\"loading\" :loadingMessage=\"loadingMessage\"/>',\n data() {\n return {\n loading: scope.loading,\n loadingMessage: scope.loadingMessage,\n };\n },\n });\n app.component('activity-indicator', ActivityIndicator);\n const vm = app.mount(element[0]);\n\n scope.$watch('loading', (newValue: boolean) => {\n vm.loading = newValue;\n });\n\n scope.$watch('loadingMessage', (newValue: string) => {\n vm.loadingMessage = newValue || translate('General_LoadingData');\n });\n },\n };\n}\n\nactivityIndicatorAdapter.$inject = [];\n\nangular.module('piwikApp').directive('piwikActivityIndicator', activityIndicatorAdapter);\n","<template>\n <div\n class=\"alert\"\n :class=\"{ [`alert-${severity}`]: true }\"\n >\n <slot></slot>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n props: {\n severity: {\n type: String,\n required: true,\n },\n },\n});\n</script>\n","\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n props: {\n severity: {\n type: String,\n required: true,\n },\n },\n});\n","export { default } from \"-!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??ref--14-3!../../../../../node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Alert.vue?vue&type=script&lang=ts\"; export * from \"-!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??ref--14-3!../../../../../node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Alert.vue?vue&type=script&lang=ts\"","import { render } from \"./Alert.vue?vue&type=template&id=c4d43d96\"\nimport script from \"./Alert.vue?vue&type=script&lang=ts\"\nexport * from \"./Alert.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","import { createApp, ref } from 'vue';\nimport Alert from './Alert.vue';\n\ninterface AlertAdapterScope extends ng.IScope {\n severity: string;\n}\n\nexport default function alertAdapter(): ng.IDirective {\n return {\n restrict: 'A',\n transclude: true,\n scope: {\n severity: '@piwikAlert',\n },\n template: '<div ng-transclude/>',\n compile: function alertAdapterCompile() {\n return {\n post: function alertAdapterPostLink(\n scope: AlertAdapterScope,\n element: ng.IAugmentedJQuery,\n ) {\n const clone = element.find('[ng-transclude]');\n\n const app = createApp({\n template: '<alert :severity=\"severity\"><div ref=\"transcludeTarget\"/></alert>',\n data() {\n return { severity: scope.severity };\n },\n setup() {\n const transcludeTarget = ref(null);\n return {\n transcludeTarget,\n };\n },\n });\n app.component('alert', Alert);\n const vm = app.mount(element[0]);\n\n scope.$watch('severity', (newValue: string) => {\n vm.severity = newValue;\n });\n\n $(vm.transcludeTarget).append(clone);\n },\n };\n },\n };\n}\n\nalertAdapter.$inject = [];\n\nangular.module('piwikApp').directive('piwikAlert', alertAdapter);\n","export { default as activityIndicatorAdapter } from './ActivityIndicator/ActivityIndicator.adapter';\nexport { default as ActivityIndicator } from './ActivityIndicator/ActivityIndicator.vue';\nexport { default as translate } from './translate';\nexport { default as alertAdapter } from './Alert/Alert.adapter';\n","import './setPublicPath'\nexport * from '~entry'\n"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"sources":["webpack://CoreHome/webpack/universalModuleDefinition","webpack://CoreHome/webpack/bootstrap","webpack://CoreHome/external {\"commonjs\":\"vue\",\"commonjs2\":\"vue\",\"root\":\"Vue\"}","webpack://CoreHome/./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js","webpack://CoreHome/./plugins/CoreHome/vue/src/translate.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/Periods/Periods.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/Periods/utilities.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/Periods/Day.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/Periods/Week.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/Periods/Month.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/Periods/Year.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/Periods/Range.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/Periods/Periods.adapter.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue","webpack://CoreHome/./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue?0bf6","webpack://CoreHome/./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue?f42e","webpack://CoreHome/./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue?6f80","webpack://CoreHome/./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.adapter.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/Alert/Alert.vue","webpack://CoreHome/./plugins/CoreHome/vue/src/Alert/Alert.vue?14a2","webpack://CoreHome/./plugins/CoreHome/vue/src/Alert/Alert.vue?92a9","webpack://CoreHome/./plugins/CoreHome/vue/src/Alert/Alert.vue?cc69","webpack://CoreHome/./plugins/CoreHome/vue/src/Alert/Alert.adapter.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/index.ts","webpack://CoreHome/./node_modules/@vue/cli-service/lib/commands/build/entry-lib-no-default.js"],"names":[],"mappings":"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","file":"CoreHome.umd.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"vue\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"CoreHome\"] = factory(require(\"vue\"));\n\telse\n\t\troot[\"CoreHome\"] = factory(root[\"Vue\"]);\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__8bbf__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"fae3\");\n","module.exports = __WEBPACK_EXTERNAL_MODULE__8bbf__;","// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var currentScript = window.document.currentScript\n if (process.env.NEED_CURRENTSCRIPT_POLYFILL) {\n var getCurrentScript = require('@soda/get-current-script')\n currentScript = getCurrentScript()\n\n // for backward compatibility, because previously we directly included the polyfill\n if (!('currentScript' in document)) {\n Object.defineProperty(document, 'currentScript', { get: getCurrentScript })\n }\n }\n\n var src = currentScript && currentScript.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/)\n if (src) {\n __webpack_public_path__ = src[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\nexport default null\n","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\nexport default function translate(translationStringId: string, values: string[] = []): string {\n return _pk_translate(translationStringId, values);\n}\n","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\ninterface Period {\n getPrettyString(): string;\n getDateRange(): Date[];\n containsToday(): boolean;\n}\n\ninterface PeriodClass {\n parse(strDate: string|Date): Period;\n getDisplayText(): string;\n}\n\n/**\n * Piwik period management service for the frontend.\n *\n * Usage:\n *\n * var DayPeriod = piwikPeriods.get('day');\n * var day = new DayPeriod(new Date());\n *\n * or\n *\n * var day = piwikPeriods.parse('day', '2013-04-05');\n *\n * Adding custom periods:\n *\n * To add your own period to the frontend, create a period class for it\n * w/ the following methods:\n *\n * - **getPrettyString()**: returns a human readable display string for the period.\n * - **getDateRange()**: returns an array w/ two elements, the first being the start\n * Date of the period, the second being the end Date. The dates\n * must be Date objects, not strings, and are inclusive.\n * - **containsToday()**: returns true if the date period contains today. False if not.\n * - (_static_) **parse(strDate)**: creates a new instance of this period from the\n * value of the 'date' query parameter.\n * - (_static_) **getDisplayText**: returns translated text for the period, eg, 'month',\n * 'week', etc.\n *\n * Then call piwik.addCustomPeriod w/ your period class:\n *\n * piwik.addCustomPeriod('mycustomperiod', MyCustomPeriod);\n *\n * NOTE: currently only single date periods like day, week, month year can\n * be extended. Other types of periods that require a special UI to\n * view/edit aren't, since there is currently no way to use a\n * custom UI for a custom period.\n */\nclass Periods {\n periods: {[name: string]: PeriodClass} = {};\n\n periodOrder: string[] = [];\n\n addCustomPeriod(name: string, periodClass: PeriodClass) {\n if (this.periods[name]) {\n throw new Error(`The \"${name}\" period already exists! It cannot be overridden.`);\n }\n\n this.periods[name] = periodClass;\n this.periodOrder.push(name);\n }\n\n getAllLabels(): string[] {\n return Array<string>().concat(this.periodOrder);\n }\n\n get(strPeriod: string): PeriodClass {\n const periodClass = this.periods[strPeriod];\n if (!periodClass) {\n throw new Error(`Invalid period label: ${strPeriod}`);\n }\n return periodClass;\n }\n\n parse(strPeriod: string, strDate: string): Period {\n return this.get(strPeriod).parse(strDate);\n }\n\n isRecognizedPeriod(strPeriod: string): boolean {\n return !!this.periods[strPeriod];\n }\n}\n\nexport default new Periods();\n","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\nexport function format(date: Date): string {\n return $.datepicker.formatDate('yy-mm-dd', date);\n}\n\nexport function getToday(): Date {\n const date = new Date(Date.now());\n\n // undo browser timezone\n date.setTime(date.getTime() + date.getTimezoneOffset() * 60 * 1000);\n\n // apply piwik site timezone (if it exists)\n date.setHours(date.getHours() + ((piwik.timezoneOffset || 0) / 3600));\n\n // get rid of hours/minutes/seconds/etc.\n date.setHours(0);\n date.setMinutes(0);\n date.setSeconds(0);\n date.setMilliseconds(0);\n return date;\n}\n\nexport function parseDate(date: string|Date): Date {\n if (date instanceof Date) {\n return date;\n }\n\n const strDate = decodeURIComponent(date);\n\n if (strDate === 'today'\n || strDate === 'now'\n ) {\n return getToday();\n }\n\n if (strDate === 'yesterday'\n // note: ignoring the 'same time' part since the frontend doesn't care about the time\n || strDate === 'yesterdaySameTime'\n ) {\n const yesterday = getToday();\n yesterday.setDate(yesterday.getDate() - 1);\n return yesterday;\n }\n\n if (strDate.match(/last[ -]?week/i)) {\n const lastWeek = getToday();\n lastWeek.setDate(lastWeek.getDate() - 7);\n return lastWeek;\n }\n\n if (strDate.match(/last[ -]?month/i)) {\n const lastMonth = getToday();\n lastMonth.setDate(1);\n lastMonth.setMonth(lastMonth.getMonth() - 1);\n return lastMonth;\n }\n\n if (strDate.match(/last[ -]?year/i)) {\n const lastYear = getToday();\n lastYear.setFullYear(lastYear.getFullYear() - 1);\n return lastYear;\n }\n\n try {\n return $.datepicker.parseDate('yy-mm-dd', strDate);\n } catch (err) {\n // angular swallows this error, so manual console log here\n console.error(err.message || err);\n throw err;\n }\n}\n\nexport function todayIsInRange(dateRange: Date[]): boolean {\n if (dateRange.length !== 2) {\n return false;\n }\n\n if (getToday() >= dateRange[0] && getToday() <= dateRange[1]) {\n return true;\n }\n\n return false;\n}\n","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\nimport translate from '../translate';\nimport Periods from './Periods';\nimport { parseDate, format, todayIsInRange } from './utilities';\n\nexport default class DayPeriod {\n constructor(private dateInPeriod: Date) {}\n\n static parse(strDate: string): DayPeriod {\n return new DayPeriod(parseDate(strDate));\n }\n\n static getDisplayText(): string {\n return translate('Intl_PeriodDay');\n }\n\n getPrettyString(): string {\n return format(this.dateInPeriod);\n }\n\n getDateRange(): Date[] {\n return [new Date(this.dateInPeriod.getTime()), new Date(this.dateInPeriod.getTime())];\n }\n\n containsToday(): boolean {\n return todayIsInRange(this.getDateRange());\n }\n}\n\nPeriods.addCustomPeriod('day', DayPeriod);\n","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\nimport translate from '../translate';\nimport Periods from './Periods';\nimport { parseDate, format, todayIsInRange } from './utilities';\n\nexport default class WeekPeriod {\n constructor(private dateInPeriod: Date) {}\n\n static parse(strDate: string): WeekPeriod {\n return new WeekPeriod(parseDate(strDate));\n }\n\n static getDisplayText(): string {\n return translate('Intl_PeriodWeek');\n }\n\n getPrettyString(): string {\n const weekDates = this.getDateRange();\n const startWeek = format(weekDates[0]);\n const endWeek = format(weekDates[1]);\n\n return translate('General_DateRangeFromTo', [startWeek, endWeek]);\n }\n\n getDateRange(): Date[] {\n const daysToMonday = (this.dateInPeriod.getDay() + 6) % 7;\n\n const startWeek = new Date(this.dateInPeriod.getTime());\n startWeek.setDate(this.dateInPeriod.getDate() - daysToMonday);\n\n const endWeek = new Date(startWeek.getTime());\n endWeek.setDate(startWeek.getDate() + 6);\n\n return [startWeek, endWeek];\n }\n\n containsToday(): boolean {\n return todayIsInRange(this.getDateRange());\n }\n}\n\nPeriods.addCustomPeriod('week', WeekPeriod);\n","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\nimport translate from '../translate';\nimport Periods from './Periods';\nimport { parseDate, todayIsInRange } from './utilities';\n\nexport default class MonthPeriod {\n constructor(private dateInPeriod: Date) {}\n\n static parse(strDate: string): MonthPeriod {\n return new MonthPeriod(parseDate(strDate));\n }\n\n static getDisplayText(): string {\n return translate('Intl_PeriodMonth');\n }\n\n getPrettyString(): string {\n const month = translate(`Intl_Month_Long_StandAlone_${this.dateInPeriod.getMonth() + 1}`);\n return `${month} ${this.dateInPeriod.getFullYear()}`;\n }\n\n getDateRange(): Date[] {\n const startMonth = new Date(this.dateInPeriod.getTime());\n startMonth.setDate(1);\n\n const endMonth = new Date(this.dateInPeriod.getTime());\n endMonth.setDate(1);\n endMonth.setMonth(endMonth.getMonth() + 1);\n endMonth.setDate(0);\n\n return [startMonth, endMonth];\n }\n\n containsToday(): boolean {\n return todayIsInRange(this.getDateRange());\n }\n}\n\nPeriods.addCustomPeriod('month', MonthPeriod);\n","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\nimport translate from '../translate';\nimport Periods from './Periods';\nimport { parseDate, todayIsInRange } from './utilities';\n\nexport default class YearPeriod {\n constructor(private dateInPeriod: Date) {}\n\n static parse(strDate: string): YearPeriod {\n return new YearPeriod(parseDate(strDate));\n }\n\n static getDisplayText(): string {\n return translate('Intl_PeriodYear');\n }\n\n getPrettyString(): string {\n return this.dateInPeriod.getFullYear().toString();\n }\n\n getDateRange(): Date[] {\n const startYear = new Date(this.dateInPeriod.getTime());\n startYear.setMonth(0);\n startYear.setDate(1);\n\n const endYear = new Date(this.dateInPeriod.getTime());\n endYear.setMonth(12);\n endYear.setDate(0);\n\n return [startYear, endYear];\n }\n\n containsToday(): boolean {\n return todayIsInRange(this.getDateRange());\n }\n}\n\nPeriods.addCustomPeriod('year', YearPeriod);\n","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\nimport translate from '../translate';\nimport Periods from './Periods';\nimport {\n parseDate,\n format,\n getToday,\n todayIsInRange,\n} from './utilities';\n\nexport default class RangePeriod {\n constructor(\n public readonly startDate: Date,\n public readonly endDate: Date,\n public readonly childPeriodType: string,\n ) {}\n\n /**\n * Returns a range representing the last N childPeriodType periods, including the current one.\n */\n static getLastNRange(\n childPeriodType: string,\n strAmount: string|number,\n strEndDate?: Date|string,\n ): RangePeriod {\n const nAmount = Math.max(parseInt(strAmount.toString(), 10) - 1, 0);\n if (Number.isNaN(nAmount)) {\n throw new Error('Invalid range strAmount');\n }\n\n let endDate = strEndDate ? parseDate(strEndDate) : getToday();\n\n let startDate = new Date(endDate.getTime());\n if (childPeriodType === 'day') {\n startDate.setDate(startDate.getDate() - nAmount);\n } else if (childPeriodType === 'week') {\n startDate.setDate(startDate.getDate() - (nAmount * 7));\n } else if (childPeriodType === 'month') {\n startDate.setDate(1);\n startDate.setMonth(startDate.getMonth() - nAmount);\n } else if (childPeriodType === 'year') {\n startDate.setFullYear(startDate.getFullYear() - nAmount);\n } else {\n throw new Error(`Unknown period type '${childPeriodType}'.`);\n }\n\n if (childPeriodType !== 'day') {\n const startPeriod = Periods.periods[childPeriodType].parse(startDate);\n const endPeriod = Periods.periods[childPeriodType].parse(endDate);\n\n [startDate] = startPeriod.getDateRange();\n [, endDate] = endPeriod.getDateRange();\n }\n\n const firstWebsiteDate = new Date(1991, 7, 6);\n if (startDate.getTime() - firstWebsiteDate.getTime() < 0) {\n switch (childPeriodType) {\n case 'year':\n startDate = new Date(1992, 0, 1);\n break;\n case 'month':\n startDate = new Date(1991, 8, 1);\n break;\n case 'week':\n startDate = new Date(1991, 8, 12);\n break;\n case 'day':\n default:\n startDate = firstWebsiteDate;\n break;\n }\n }\n\n return new RangePeriod(startDate, endDate, childPeriodType);\n }\n\n static parse(strDate: string, childPeriodType = 'day'): RangePeriod {\n if (/^previous/.test(strDate)) {\n const endDate = RangePeriod.getLastNRange(childPeriodType, '2').startDate;\n return RangePeriod.getLastNRange(childPeriodType, strDate.substring(8), endDate);\n }\n\n if (/^last/.test(strDate)) {\n return RangePeriod.getLastNRange(childPeriodType, strDate.substring(4));\n }\n\n const parts = decodeURIComponent(strDate).split(',');\n return new RangePeriod(parseDate(parts[0]), parseDate(parts[1]), childPeriodType);\n }\n\n static getDisplayText(): string {\n return translate('General_DateRangeInPeriodList');\n }\n\n getPrettyString(): string {\n const start = format(this.startDate);\n const end = format(this.endDate);\n return translate('General_DateRangeFromTo', [start, end]);\n }\n\n getDateRange(): Date[] {\n return [this.startDate, this.endDate];\n }\n\n containsToday(): boolean {\n return todayIsInRange(this.getDateRange());\n }\n}\n\nPeriods.addCustomPeriod('range', RangePeriod);\n","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\nimport Periods from './Periods';\nimport RangePeriod from './Range';\nimport { parseDate, format, todayIsInRange } from './utilities';\n\npiwik.addCustomPeriod = Periods.addCustomPeriod.bind(Periods);\n\nfunction piwikPeriods() {\n return {\n getAllLabels: Periods.getAllLabels.bind(Periods),\n isRecognizedPeriod: Periods.isRecognizedPeriod.bind(Periods),\n get: Periods.get.bind(Periods),\n parse: Periods.parse.bind(Periods),\n parseDate,\n format,\n RangePeriod,\n todayIsInRange,\n };\n}\n\nangular.module('piwikApp.service').factory('piwikPeriods', piwikPeriods);\n","<!--\n Matomo - free/libre analytics platform\n\n @link https://matomo.org\n @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n-->\n\n<template>\n <div v-show=\"loading\" class=\"loadingPiwik\">\n <img src=\"plugins/Morpheus/images/loading-blue.gif\" alt=\"\"/>\n <span>{{ loadingMessage }}</span>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport translate from '../translate';\n\nexport default defineComponent({\n props: {\n loading: {\n type: Boolean,\n required: true,\n default: false,\n },\n loadingMessage: {\n type: String,\n required: false,\n default: translate('General_LoadingData'),\n },\n },\n});\n</script>\n","\nimport { defineComponent } from 'vue';\nimport translate from '../translate';\n\nexport default defineComponent({\n props: {\n loading: {\n type: Boolean,\n required: true,\n default: false,\n },\n loadingMessage: {\n type: String,\n required: false,\n default: translate('General_LoadingData'),\n },\n },\n});\n","export { default } from \"-!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??ref--14-3!../../../../../node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ActivityIndicator.vue?vue&type=script&lang=ts\"; export * from \"-!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??ref--14-3!../../../../../node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ActivityIndicator.vue?vue&type=script&lang=ts\"","import { render } from \"./ActivityIndicator.vue?vue&type=template&id=6af4d064\"\nimport script from \"./ActivityIndicator.vue?vue&type=script&lang=ts\"\nexport * from \"./ActivityIndicator.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\nimport { createApp } from 'vue';\nimport ActivityIndicator from './ActivityIndicator.vue';\nimport translate from '../translate';\n\ninterface ActivityIndicatorAdapterScope extends ng.IScope {\n loading: boolean;\n loadingMessage: string;\n}\n\nexport default function activityIndicatorAdapter(): ng.IDirective {\n return {\n restrict: 'A',\n scope: {\n loading: '<',\n loadingMessage: '<',\n },\n template: '',\n link: function activityIndicatorAdapterLink(\n scope: ActivityIndicatorAdapterScope,\n element: ng.IAugmentedJQuery,\n ) {\n const app = createApp({\n template: '<activity-indicator :loading=\"loading\" :loadingMessage=\"loadingMessage\"/>',\n data() {\n return {\n loading: scope.loading,\n loadingMessage: scope.loadingMessage,\n };\n },\n });\n app.component('activity-indicator', ActivityIndicator);\n const vm = app.mount(element[0]);\n\n scope.$watch('loading', (newValue: boolean) => {\n vm.loading = newValue;\n });\n\n scope.$watch('loadingMessage', (newValue: string) => {\n vm.loadingMessage = newValue || translate('General_LoadingData');\n });\n },\n };\n}\n\nactivityIndicatorAdapter.$inject = [];\n\nangular.module('piwikApp').directive('piwikActivityIndicator', activityIndicatorAdapter);\n","<!--\n Matomo - free/libre analytics platform\n\n @link https://matomo.org\n @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n-->\n\n<template>\n <div\n class=\"alert\"\n :class=\"{ [`alert-${severity}`]: true }\"\n >\n <slot></slot>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n props: {\n severity: {\n type: String,\n required: true,\n },\n },\n});\n</script>\n","\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n props: {\n severity: {\n type: String,\n required: true,\n },\n },\n});\n","export { default } from \"-!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??ref--14-3!../../../../../node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Alert.vue?vue&type=script&lang=ts\"; export * from \"-!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??ref--14-3!../../../../../node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Alert.vue?vue&type=script&lang=ts\"","import { render } from \"./Alert.vue?vue&type=template&id=c3863ae2\"\nimport script from \"./Alert.vue?vue&type=script&lang=ts\"\nexport * from \"./Alert.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\nimport { createApp, ref } from 'vue';\nimport Alert from './Alert.vue';\n\ninterface AlertAdapterScope extends ng.IScope {\n severity: string;\n}\n\nexport default function alertAdapter(): ng.IDirective {\n return {\n restrict: 'A',\n transclude: true,\n scope: {\n severity: '@piwikAlert',\n },\n template: '<div ng-transclude/>',\n compile: function alertAdapterCompile() {\n return {\n post: function alertAdapterPostLink(\n scope: AlertAdapterScope,\n element: ng.IAugmentedJQuery,\n ) {\n const clone = element.find('[ng-transclude]');\n\n const app = createApp({\n template: '<alert :severity=\"severity\"><div ref=\"transcludeTarget\"/></alert>',\n data() {\n return { severity: scope.severity };\n },\n setup() {\n const transcludeTarget = ref(null);\n return {\n transcludeTarget,\n };\n },\n });\n app.component('alert', Alert);\n const vm = app.mount(element[0]);\n\n scope.$watch('severity', (newValue: string) => {\n vm.severity = newValue;\n });\n\n $(vm.transcludeTarget).append(clone);\n },\n };\n },\n };\n}\n\nalertAdapter.$inject = [];\n\nangular.module('piwikApp').directive('piwikAlert', alertAdapter);\n","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\nimport './Periods/Day';\nimport './Periods/Week';\nimport './Periods/Month';\nimport './Periods/Year';\nimport './Periods/Range';\nimport './Periods/Periods.adapter';\n\nexport { default as activityIndicatorAdapter } from './ActivityIndicator/ActivityIndicator.adapter';\nexport { default as ActivityIndicator } from './ActivityIndicator/ActivityIndicator.vue';\nexport { default as translate } from './translate';\nexport { default as alertAdapter } from './Alert/Alert.adapter';\nexport { default as Periods } from './Periods/Periods';\n","import './setPublicPath'\nexport * from '~entry'\n"],"sourceRoot":""}
\ No newline at end of file diff --git a/plugins/CoreHome/vue/dist/CoreHome.umd.min.js b/plugins/CoreHome/vue/dist/CoreHome.umd.min.js index 8491c5f946..840356a986 100644 --- a/plugins/CoreHome/vue/dist/CoreHome.umd.min.js +++ b/plugins/CoreHome/vue/dist/CoreHome.umd.min.js @@ -1,2 +1,70 @@ -(function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t(require("vue")):"function"===typeof define&&define.amd?define([],t):"object"===typeof exports?exports["CoreHome"]=t(require("vue")):e["CoreHome"]=t(e["Vue"])})("undefined"!==typeof self?self:this,(function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s="fae3")}({"8bbf":function(t,n){t.exports=e},fae3:function(e,t,n){"use strict";if(n.r(t),n.d(t,"activityIndicatorAdapter",(function(){return p})),n.d(t,"ActivityIndicator",(function(){return s})),n.d(t,"translate",(function(){return u})),n.d(t,"alertAdapter",(function(){return b})),"undefined"!==typeof window){var r=window.document.currentScript,i=r&&r.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);i&&(n.p=i[1])}var o=n("8bbf");const a={class:"loadingPiwik"},c=Object(o["createElementVNode"])("img",{src:"plugins/Morpheus/images/loading-blue.gif",alt:""},null,-1);function l(e,t,n,r,i,l){return Object(o["withDirectives"])((Object(o["openBlock"])(),Object(o["createElementBlock"])("div",a,[c,Object(o["createElementVNode"])("span",null,Object(o["toDisplayString"])(e.loadingMessage),1)],512)),[[o["vShow"],e.loading]])}function u(e,t=[]){return window._pk_translate(e,t)}var d=Object(o["defineComponent"])({props:{loading:{type:Boolean,required:!0,default:!1},loadingMessage:{type:String,required:!1,default:u("General_LoadingData")}}});d.render=l;var s=d;function p(){return{restrict:"A",scope:{loading:"<",loadingMessage:"<"},template:"",link:function(e,t){const n=Object(o["createApp"])({template:'<activity-indicator :loading="loading" :loadingMessage="loadingMessage"/>',data(){return{loading:e.loading,loadingMessage:e.loadingMessage}}});n.component("activity-indicator",s);const r=n.mount(t[0]);e.$watch("loading",e=>{r.loading=e}),e.$watch("loadingMessage",e=>{r.loadingMessage=e||u("General_LoadingData")})}}}function f(e,t,n,r,i,a){return Object(o["openBlock"])(),Object(o["createElementBlock"])("div",{class:Object(o["normalizeClass"])(["alert",{["alert-"+e.severity]:!0}])},[Object(o["renderSlot"])(e.$slots,"default")],2)}p.$inject=[],angular.module("piwikApp").directive("piwikActivityIndicator",p);var g=Object(o["defineComponent"])({props:{severity:{type:String,required:!0}}});g.render=f;var v=g;function b(){return{restrict:"A",transclude:!0,scope:{severity:"@piwikAlert"},template:"<div ng-transclude/>",compile:function(){return{post:function(e,t){const n=t.find("[ng-transclude]"),r=Object(o["createApp"])({template:'<alert :severity="severity"><div ref="transcludeTarget"/></alert>',data(){return{severity:e.severity}},setup(){const e=Object(o["ref"])(null);return{transcludeTarget:e}}});r.component("alert",v);const i=r.mount(t[0]);e.$watch("severity",e=>{i.severity=e}),$(i.transcludeTarget).append(n)}}}}}b.$inject=[],angular.module("piwikApp").directive("piwikAlert",b)}})})); +(function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t(require("vue")):"function"===typeof define&&define.amd?define([],t):"object"===typeof exports?exports["CoreHome"]=t(require("vue")):e["CoreHome"]=t(e["Vue"])})("undefined"!==typeof self?self:this,(function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s="fae3")}({"8bbf":function(t,r){t.exports=e},fae3:function(e,t,r){"use strict";if(r.r(t),r.d(t,"activityIndicatorAdapter",(function(){return S})),r.d(t,"ActivityIndicator",(function(){return R})),r.d(t,"translate",(function(){return a})),r.d(t,"alertAdapter",(function(){return C})),r.d(t,"Periods",(function(){return d})),"undefined"!==typeof window){var n=window.document.currentScript,i=n&&n.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);i&&(r.p=i[1])} +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ +function a(e,t=[]){return _pk_translate(e,t)}function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e} +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */class s{constructor(){o(this,"periods",{}),o(this,"periodOrder",[])}addCustomPeriod(e,t){if(this.periods[e])throw new Error(`The "${e}" period already exists! It cannot be overridden.`);this.periods[e]=t,this.periodOrder.push(e)}getAllLabels(){return Array().concat(this.periodOrder)}get(e){const t=this.periods[e];if(!t)throw new Error("Invalid period label: "+e);return t}parse(e,t){return this.get(e).parse(t)}isRecognizedPeriod(e){return!!this.periods[e]}}var d=new s; +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */function c(e){return $.datepicker.formatDate("yy-mm-dd",e)}function u(){const e=new Date(Date.now());return e.setTime(e.getTime()+60*e.getTimezoneOffset()*1e3),e.setHours(e.getHours()+(piwik.timezoneOffset||0)/3600),e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0),e}function l(e){if(e instanceof Date)return e;const t=decodeURIComponent(e);if("today"===t||"now"===t)return u();if("yesterday"===t||"yesterdaySameTime"===t){const e=u();return e.setDate(e.getDate()-1),e}if(t.match(/last[ -]?week/i)){const e=u();return e.setDate(e.getDate()-7),e}if(t.match(/last[ -]?month/i)){const e=u();return e.setDate(1),e.setMonth(e.getMonth()-1),e}if(t.match(/last[ -]?year/i)){const e=u();return e.setFullYear(e.getFullYear()-1),e}try{return $.datepicker.parseDate("yy-mm-dd",t)}catch(r){throw console.error(r.message||r),r}}function g(e){return 2===e.length&&(u()>=e[0]&&u()<=e[1])}function p(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e} +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */class f{constructor(e){p(this,"dateInPeriod",void 0),this.dateInPeriod=e}static parse(e){return new f(l(e))}static getDisplayText(){return a("Intl_PeriodDay")}getPrettyString(){return c(this.dateInPeriod)}getDateRange(){return[new Date(this.dateInPeriod.getTime()),new Date(this.dateInPeriod.getTime())]}containsToday(){return g(this.getDateRange())}}function h(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e} +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */d.addCustomPeriod("day",f);class m{constructor(e){h(this,"dateInPeriod",void 0),this.dateInPeriod=e}static parse(e){return new m(l(e))}static getDisplayText(){return a("Intl_PeriodWeek")}getPrettyString(){const e=this.getDateRange(),t=c(e[0]),r=c(e[1]);return a("General_DateRangeFromTo",[t,r])}getDateRange(){const e=(this.dateInPeriod.getDay()+6)%7,t=new Date(this.dateInPeriod.getTime());t.setDate(this.dateInPeriod.getDate()-e);const r=new Date(t.getTime());return r.setDate(t.getDate()+6),[t,r]}containsToday(){return g(this.getDateRange())}}function y(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e} +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */d.addCustomPeriod("week",m);class b{constructor(e){y(this,"dateInPeriod",void 0),this.dateInPeriod=e}static parse(e){return new b(l(e))}static getDisplayText(){return a("Intl_PeriodMonth")}getPrettyString(){const e=a("Intl_Month_Long_StandAlone_"+(this.dateInPeriod.getMonth()+1));return`${e} ${this.dateInPeriod.getFullYear()}`}getDateRange(){const e=new Date(this.dateInPeriod.getTime());e.setDate(1);const t=new Date(this.dateInPeriod.getTime());return t.setDate(1),t.setMonth(t.getMonth()+1),t.setDate(0),[e,t]}containsToday(){return g(this.getDateRange())}}function D(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e} +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */d.addCustomPeriod("month",b);class w{constructor(e){D(this,"dateInPeriod",void 0),this.dateInPeriod=e}static parse(e){return new w(l(e))}static getDisplayText(){return a("Intl_PeriodYear")}getPrettyString(){return this.dateInPeriod.getFullYear().toString()}getDateRange(){const e=new Date(this.dateInPeriod.getTime());e.setMonth(0),e.setDate(1);const t=new Date(this.dateInPeriod.getTime());return t.setMonth(12),t.setDate(0),[e,t]}containsToday(){return g(this.getDateRange())}}function P(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e} +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */d.addCustomPeriod("year",w);class v{constructor(e,t,r){P(this,"startDate",void 0),P(this,"endDate",void 0),P(this,"childPeriodType",void 0),this.startDate=e,this.endDate=t,this.childPeriodType=r}static getLastNRange(e,t,r){const n=Math.max(parseInt(t.toString(),10)-1,0);if(Number.isNaN(n))throw new Error("Invalid range strAmount");let i=r?l(r):u(),a=new Date(i.getTime());if("day"===e)a.setDate(a.getDate()-n);else if("week"===e)a.setDate(a.getDate()-7*n);else if("month"===e)a.setDate(1),a.setMonth(a.getMonth()-n);else{if("year"!==e)throw new Error(`Unknown period type '${e}'.`);a.setFullYear(a.getFullYear()-n)}if("day"!==e){const t=d.periods[e].parse(a),r=d.periods[e].parse(i);[a]=t.getDateRange(),[,i]=r.getDateRange()}const o=new Date(1991,7,6);if(a.getTime()-o.getTime()<0)switch(e){case"year":a=new Date(1992,0,1);break;case"month":a=new Date(1991,8,1);break;case"week":a=new Date(1991,8,12);break;case"day":default:a=o;break}return new v(a,i,e)}static parse(e,t="day"){if(/^previous/.test(e)){const r=v.getLastNRange(t,"2").startDate;return v.getLastNRange(t,e.substring(8),r)}if(/^last/.test(e))return v.getLastNRange(t,e.substring(4));const r=decodeURIComponent(e).split(",");return new v(l(r[0]),l(r[1]),t)}static getDisplayText(){return a("General_DateRangeInPeriodList")}getPrettyString(){const e=c(this.startDate),t=c(this.endDate);return a("General_DateRangeFromTo",[e,t])}getDateRange(){return[this.startDate,this.endDate]}containsToday(){return g(this.getDateRange())}}function I(){return{getAllLabels:d.getAllLabels.bind(d),isRecognizedPeriod:d.isRecognizedPeriod.bind(d),get:d.get.bind(d),parse:d.parse.bind(d),parseDate:l,format:c,RangePeriod:v,todayIsInRange:g}}d.addCustomPeriod("range",v), +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ +piwik.addCustomPeriod=d.addCustomPeriod.bind(d),angular.module("piwikApp.service").factory("piwikPeriods",I);var T=r("8bbf");const j={class:"loadingPiwik"},O=Object(T["createElementVNode"])("img",{src:"plugins/Morpheus/images/loading-blue.gif",alt:""},null,-1);function k(e,t,r,n,i,a){return Object(T["withDirectives"])((Object(T["openBlock"])(),Object(T["createElementBlock"])("div",j,[O,Object(T["createElementVNode"])("span",null,Object(T["toDisplayString"])(e.loadingMessage),1)],512)),[[T["vShow"],e.loading]])}var M=Object(T["defineComponent"])({props:{loading:{type:Boolean,required:!0,default:!1},loadingMessage:{type:String,required:!1,default:a("General_LoadingData")}}});M.render=k;var R=M; +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */function S(){return{restrict:"A",scope:{loading:"<",loadingMessage:"<"},template:"",link:function(e,t){const r=Object(T["createApp"])({template:'<activity-indicator :loading="loading" :loadingMessage="loadingMessage"/>',data(){return{loading:e.loading,loadingMessage:e.loadingMessage}}});r.component("activity-indicator",R);const n=r.mount(t[0]);e.$watch("loading",e=>{n.loading=e}),e.$watch("loadingMessage",e=>{n.loadingMessage=e||a("General_LoadingData")})}}}function _(e,t,r,n,i,a){return Object(T["openBlock"])(),Object(T["createElementBlock"])("div",{class:Object(T["normalizeClass"])(["alert",{["alert-"+e.severity]:!0}])},[Object(T["renderSlot"])(e.$slots,"default")],2)}S.$inject=[],angular.module("piwikApp").directive("piwikActivityIndicator",S);var A=Object(T["defineComponent"])({props:{severity:{type:String,required:!0}}});A.render=_;var x=A; +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */function C(){return{restrict:"A",transclude:!0,scope:{severity:"@piwikAlert"},template:"<div ng-transclude/>",compile:function(){return{post:function(e,t){const r=t.find("[ng-transclude]"),n=Object(T["createApp"])({template:'<alert :severity="severity"><div ref="transcludeTarget"/></alert>',data(){return{severity:e.severity}},setup(){const e=Object(T["ref"])(null);return{transcludeTarget:e}}});n.component("alert",x);const i=n.mount(t[0]);e.$watch("severity",e=>{i.severity=e}),$(i.transcludeTarget).append(r)}}}}}C.$inject=[],angular.module("piwikApp").directive("piwikAlert",C)}})})); //# sourceMappingURL=CoreHome.umd.min.js.map
\ No newline at end of file diff --git a/plugins/CoreHome/vue/dist/CoreHome.umd.min.js.map b/plugins/CoreHome/vue/dist/CoreHome.umd.min.js.map index 74c909a584..2bdc50eeae 100644 --- a/plugins/CoreHome/vue/dist/CoreHome.umd.min.js.map +++ b/plugins/CoreHome/vue/dist/CoreHome.umd.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://CoreHome/webpack/universalModuleDefinition","webpack://CoreHome/webpack/bootstrap","webpack://CoreHome/external {\"commonjs\":\"vue\",\"commonjs2\":\"vue\",\"root\":\"Vue\"}","webpack://CoreHome/./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js","webpack://CoreHome/./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue","webpack://CoreHome/./plugins/CoreHome/vue/src/translate.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue?0bf6","webpack://CoreHome/./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue?6f80","webpack://CoreHome/./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.adapter.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/Alert/Alert.vue","webpack://CoreHome/./plugins/CoreHome/vue/src/Alert/Alert.vue?14a2","webpack://CoreHome/./plugins/CoreHome/vue/src/Alert/Alert.vue?cc69","webpack://CoreHome/./plugins/CoreHome/vue/src/Alert/Alert.adapter.ts"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__8bbf__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","window","currentScript","document","src","match","class","alt","loadingMessage","loading","translate","translationStringId","values","_pk_translate","props","type","Boolean","required","default","String","render","activityIndicatorAdapter","restrict","scope","template","link","element","app","component","ActivityIndicator","vm","mount","$watch","newValue","severity","$inject","angular","directive","alertAdapter","transclude","compile","post","clone","find","transcludeTarget","Alert","$","append"],"mappings":"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","file":"CoreHome.umd.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"vue\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"CoreHome\"] = factory(require(\"vue\"));\n\telse\n\t\troot[\"CoreHome\"] = factory(root[\"Vue\"]);\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__8bbf__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"fae3\");\n","module.exports = __WEBPACK_EXTERNAL_MODULE__8bbf__;","// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var currentScript = window.document.currentScript\n if (process.env.NEED_CURRENTSCRIPT_POLYFILL) {\n var getCurrentScript = require('@soda/get-current-script')\n currentScript = getCurrentScript()\n\n // for backward compatibility, because previously we directly included the polyfill\n if (!('currentScript' in document)) {\n Object.defineProperty(document, 'currentScript', { get: getCurrentScript })\n }\n }\n\n var src = currentScript && currentScript.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/)\n if (src) {\n __webpack_public_path__ = src[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\nexport default null\n","<template>\n <div v-show=\"loading\" class=\"loadingPiwik\">\n <img src=\"plugins/Morpheus/images/loading-blue.gif\" alt=\"\"/>\n <span>{{ loadingMessage }}</span>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport translate from '../translate';\n\nexport default defineComponent({\n props: {\n loading: {\n type: Boolean,\n required: true,\n default: false,\n },\n loadingMessage: {\n type: String,\n required: false,\n default: translate('General_LoadingData'),\n },\n },\n});\n</script>\n","export default function translate(translationStringId: string, values: string[] = []): string {\n return window._pk_translate(translationStringId, values); // eslint-disable-line\n}\n","\nimport { defineComponent } from 'vue';\nimport translate from '../translate';\n\nexport default defineComponent({\n props: {\n loading: {\n type: Boolean,\n required: true,\n default: false,\n },\n loadingMessage: {\n type: String,\n required: false,\n default: translate('General_LoadingData'),\n },\n },\n});\n","import { render } from \"./ActivityIndicator.vue?vue&type=template&id=c109d738\"\nimport script from \"./ActivityIndicator.vue?vue&type=script&lang=ts\"\nexport * from \"./ActivityIndicator.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","import { createApp } from 'vue';\nimport ActivityIndicator from './ActivityIndicator.vue';\nimport translate from '../translate';\n\ninterface ActivityIndicatorAdapterScope extends ng.IScope {\n loading: boolean;\n loadingMessage: string;\n}\n\nexport default function activityIndicatorAdapter(): ng.IDirective {\n return {\n restrict: 'A',\n scope: {\n loading: '<',\n loadingMessage: '<',\n },\n template: '',\n link: function activityIndicatorAdapterLink(\n scope: ActivityIndicatorAdapterScope,\n element: ng.IAugmentedJQuery,\n ) {\n const app = createApp({\n template: '<activity-indicator :loading=\"loading\" :loadingMessage=\"loadingMessage\"/>',\n data() {\n return {\n loading: scope.loading,\n loadingMessage: scope.loadingMessage,\n };\n },\n });\n app.component('activity-indicator', ActivityIndicator);\n const vm = app.mount(element[0]);\n\n scope.$watch('loading', (newValue: boolean) => {\n vm.loading = newValue;\n });\n\n scope.$watch('loadingMessage', (newValue: string) => {\n vm.loadingMessage = newValue || translate('General_LoadingData');\n });\n },\n };\n}\n\nactivityIndicatorAdapter.$inject = [];\n\nangular.module('piwikApp').directive('piwikActivityIndicator', activityIndicatorAdapter);\n","<template>\n <div\n class=\"alert\"\n :class=\"{ [`alert-${severity}`]: true }\"\n >\n <slot></slot>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n props: {\n severity: {\n type: String,\n required: true,\n },\n },\n});\n</script>\n","\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n props: {\n severity: {\n type: String,\n required: true,\n },\n },\n});\n","import { render } from \"./Alert.vue?vue&type=template&id=c4d43d96\"\nimport script from \"./Alert.vue?vue&type=script&lang=ts\"\nexport * from \"./Alert.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","import { createApp, ref } from 'vue';\nimport Alert from './Alert.vue';\n\ninterface AlertAdapterScope extends ng.IScope {\n severity: string;\n}\n\nexport default function alertAdapter(): ng.IDirective {\n return {\n restrict: 'A',\n transclude: true,\n scope: {\n severity: '@piwikAlert',\n },\n template: '<div ng-transclude/>',\n compile: function alertAdapterCompile() {\n return {\n post: function alertAdapterPostLink(\n scope: AlertAdapterScope,\n element: ng.IAugmentedJQuery,\n ) {\n const clone = element.find('[ng-transclude]');\n\n const app = createApp({\n template: '<alert :severity=\"severity\"><div ref=\"transcludeTarget\"/></alert>',\n data() {\n return { severity: scope.severity };\n },\n setup() {\n const transcludeTarget = ref(null);\n return {\n transcludeTarget,\n };\n },\n });\n app.component('alert', Alert);\n const vm = app.mount(element[0]);\n\n scope.$watch('severity', (newValue: string) => {\n vm.severity = newValue;\n });\n\n $(vm.transcludeTarget).append(clone);\n },\n };\n },\n };\n}\n\nalertAdapter.$inject = [];\n\nangular.module('piwikApp').directive('piwikAlert', alertAdapter);\n"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"sources":["webpack://CoreHome/webpack/universalModuleDefinition","webpack://CoreHome/webpack/bootstrap","webpack://CoreHome/external {\"commonjs\":\"vue\",\"commonjs2\":\"vue\",\"root\":\"Vue\"}","webpack://CoreHome/./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js","webpack://CoreHome/./plugins/CoreHome/vue/src/translate.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/Periods/Periods.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/Periods/utilities.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/Periods/Day.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/Periods/Week.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/Periods/Month.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/Periods/Year.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/Periods/Range.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/Periods/Periods.adapter.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue","webpack://CoreHome/./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue?0bf6","webpack://CoreHome/./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue?6f80","webpack://CoreHome/./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.adapter.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/Alert/Alert.vue","webpack://CoreHome/./plugins/CoreHome/vue/src/Alert/Alert.vue?14a2","webpack://CoreHome/./plugins/CoreHome/vue/src/Alert/Alert.vue?cc69","webpack://CoreHome/./plugins/CoreHome/vue/src/Alert/Alert.adapter.ts"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__8bbf__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","window","currentScript","document","src","match","translate","translationStringId","values","_pk_translate","Periods","periodClass","periods","Error","periodOrder","push","Array","concat","strPeriod","strDate","parse","format","date","$","datepicker","formatDate","getToday","Date","now","setTime","getTime","getTimezoneOffset","setHours","getHours","piwik","timezoneOffset","setMinutes","setSeconds","setMilliseconds","parseDate","decodeURIComponent","yesterday","setDate","getDate","lastWeek","lastMonth","setMonth","getMonth","lastYear","setFullYear","getFullYear","err","console","error","message","todayIsInRange","dateRange","length","dateInPeriod","getDateRange","addCustomPeriod","weekDates","startWeek","endWeek","daysToMonday","getDay","month","startMonth","endMonth","toString","startYear","endYear","startDate","endDate","childPeriodType","strAmount","strEndDate","nAmount","Math","max","parseInt","Number","isNaN","startPeriod","endPeriod","firstWebsiteDate","test","getLastNRange","substring","parts","split","start","end","piwikPeriods","getAllLabels","isRecognizedPeriod","RangePeriod","angular","class","alt","loadingMessage","loading","props","type","Boolean","required","default","String","render","activityIndicatorAdapter","restrict","scope","template","link","element","app","component","ActivityIndicator","vm","mount","$watch","newValue","severity","$inject","directive","alertAdapter","transclude","compile","post","clone","find","transcludeTarget","Alert","append"],"mappings":"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","file":"CoreHome.umd.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"vue\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"CoreHome\"] = factory(require(\"vue\"));\n\telse\n\t\troot[\"CoreHome\"] = factory(root[\"Vue\"]);\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__8bbf__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"fae3\");\n","module.exports = __WEBPACK_EXTERNAL_MODULE__8bbf__;","// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var currentScript = window.document.currentScript\n if (process.env.NEED_CURRENTSCRIPT_POLYFILL) {\n var getCurrentScript = require('@soda/get-current-script')\n currentScript = getCurrentScript()\n\n // for backward compatibility, because previously we directly included the polyfill\n if (!('currentScript' in document)) {\n Object.defineProperty(document, 'currentScript', { get: getCurrentScript })\n }\n }\n\n var src = currentScript && currentScript.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/)\n if (src) {\n __webpack_public_path__ = src[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\nexport default null\n","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\nexport default function translate(translationStringId: string, values: string[] = []): string {\n return _pk_translate(translationStringId, values);\n}\n","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\ninterface Period {\n getPrettyString(): string;\n getDateRange(): Date[];\n containsToday(): boolean;\n}\n\ninterface PeriodClass {\n parse(strDate: string|Date): Period;\n getDisplayText(): string;\n}\n\n/**\n * Piwik period management service for the frontend.\n *\n * Usage:\n *\n * var DayPeriod = piwikPeriods.get('day');\n * var day = new DayPeriod(new Date());\n *\n * or\n *\n * var day = piwikPeriods.parse('day', '2013-04-05');\n *\n * Adding custom periods:\n *\n * To add your own period to the frontend, create a period class for it\n * w/ the following methods:\n *\n * - **getPrettyString()**: returns a human readable display string for the period.\n * - **getDateRange()**: returns an array w/ two elements, the first being the start\n * Date of the period, the second being the end Date. The dates\n * must be Date objects, not strings, and are inclusive.\n * - **containsToday()**: returns true if the date period contains today. False if not.\n * - (_static_) **parse(strDate)**: creates a new instance of this period from the\n * value of the 'date' query parameter.\n * - (_static_) **getDisplayText**: returns translated text for the period, eg, 'month',\n * 'week', etc.\n *\n * Then call piwik.addCustomPeriod w/ your period class:\n *\n * piwik.addCustomPeriod('mycustomperiod', MyCustomPeriod);\n *\n * NOTE: currently only single date periods like day, week, month year can\n * be extended. Other types of periods that require a special UI to\n * view/edit aren't, since there is currently no way to use a\n * custom UI for a custom period.\n */\nclass Periods {\n periods: {[name: string]: PeriodClass} = {};\n\n periodOrder: string[] = [];\n\n addCustomPeriod(name: string, periodClass: PeriodClass) {\n if (this.periods[name]) {\n throw new Error(`The \"${name}\" period already exists! It cannot be overridden.`);\n }\n\n this.periods[name] = periodClass;\n this.periodOrder.push(name);\n }\n\n getAllLabels(): string[] {\n return Array<string>().concat(this.periodOrder);\n }\n\n get(strPeriod: string): PeriodClass {\n const periodClass = this.periods[strPeriod];\n if (!periodClass) {\n throw new Error(`Invalid period label: ${strPeriod}`);\n }\n return periodClass;\n }\n\n parse(strPeriod: string, strDate: string): Period {\n return this.get(strPeriod).parse(strDate);\n }\n\n isRecognizedPeriod(strPeriod: string): boolean {\n return !!this.periods[strPeriod];\n }\n}\n\nexport default new Periods();\n","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\nexport function format(date: Date): string {\n return $.datepicker.formatDate('yy-mm-dd', date);\n}\n\nexport function getToday(): Date {\n const date = new Date(Date.now());\n\n // undo browser timezone\n date.setTime(date.getTime() + date.getTimezoneOffset() * 60 * 1000);\n\n // apply piwik site timezone (if it exists)\n date.setHours(date.getHours() + ((piwik.timezoneOffset || 0) / 3600));\n\n // get rid of hours/minutes/seconds/etc.\n date.setHours(0);\n date.setMinutes(0);\n date.setSeconds(0);\n date.setMilliseconds(0);\n return date;\n}\n\nexport function parseDate(date: string|Date): Date {\n if (date instanceof Date) {\n return date;\n }\n\n const strDate = decodeURIComponent(date);\n\n if (strDate === 'today'\n || strDate === 'now'\n ) {\n return getToday();\n }\n\n if (strDate === 'yesterday'\n // note: ignoring the 'same time' part since the frontend doesn't care about the time\n || strDate === 'yesterdaySameTime'\n ) {\n const yesterday = getToday();\n yesterday.setDate(yesterday.getDate() - 1);\n return yesterday;\n }\n\n if (strDate.match(/last[ -]?week/i)) {\n const lastWeek = getToday();\n lastWeek.setDate(lastWeek.getDate() - 7);\n return lastWeek;\n }\n\n if (strDate.match(/last[ -]?month/i)) {\n const lastMonth = getToday();\n lastMonth.setDate(1);\n lastMonth.setMonth(lastMonth.getMonth() - 1);\n return lastMonth;\n }\n\n if (strDate.match(/last[ -]?year/i)) {\n const lastYear = getToday();\n lastYear.setFullYear(lastYear.getFullYear() - 1);\n return lastYear;\n }\n\n try {\n return $.datepicker.parseDate('yy-mm-dd', strDate);\n } catch (err) {\n // angular swallows this error, so manual console log here\n console.error(err.message || err);\n throw err;\n }\n}\n\nexport function todayIsInRange(dateRange: Date[]): boolean {\n if (dateRange.length !== 2) {\n return false;\n }\n\n if (getToday() >= dateRange[0] && getToday() <= dateRange[1]) {\n return true;\n }\n\n return false;\n}\n","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\nimport translate from '../translate';\nimport Periods from './Periods';\nimport { parseDate, format, todayIsInRange } from './utilities';\n\nexport default class DayPeriod {\n constructor(private dateInPeriod: Date) {}\n\n static parse(strDate: string): DayPeriod {\n return new DayPeriod(parseDate(strDate));\n }\n\n static getDisplayText(): string {\n return translate('Intl_PeriodDay');\n }\n\n getPrettyString(): string {\n return format(this.dateInPeriod);\n }\n\n getDateRange(): Date[] {\n return [new Date(this.dateInPeriod.getTime()), new Date(this.dateInPeriod.getTime())];\n }\n\n containsToday(): boolean {\n return todayIsInRange(this.getDateRange());\n }\n}\n\nPeriods.addCustomPeriod('day', DayPeriod);\n","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\nimport translate from '../translate';\nimport Periods from './Periods';\nimport { parseDate, format, todayIsInRange } from './utilities';\n\nexport default class WeekPeriod {\n constructor(private dateInPeriod: Date) {}\n\n static parse(strDate: string): WeekPeriod {\n return new WeekPeriod(parseDate(strDate));\n }\n\n static getDisplayText(): string {\n return translate('Intl_PeriodWeek');\n }\n\n getPrettyString(): string {\n const weekDates = this.getDateRange();\n const startWeek = format(weekDates[0]);\n const endWeek = format(weekDates[1]);\n\n return translate('General_DateRangeFromTo', [startWeek, endWeek]);\n }\n\n getDateRange(): Date[] {\n const daysToMonday = (this.dateInPeriod.getDay() + 6) % 7;\n\n const startWeek = new Date(this.dateInPeriod.getTime());\n startWeek.setDate(this.dateInPeriod.getDate() - daysToMonday);\n\n const endWeek = new Date(startWeek.getTime());\n endWeek.setDate(startWeek.getDate() + 6);\n\n return [startWeek, endWeek];\n }\n\n containsToday(): boolean {\n return todayIsInRange(this.getDateRange());\n }\n}\n\nPeriods.addCustomPeriod('week', WeekPeriod);\n","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\nimport translate from '../translate';\nimport Periods from './Periods';\nimport { parseDate, todayIsInRange } from './utilities';\n\nexport default class MonthPeriod {\n constructor(private dateInPeriod: Date) {}\n\n static parse(strDate: string): MonthPeriod {\n return new MonthPeriod(parseDate(strDate));\n }\n\n static getDisplayText(): string {\n return translate('Intl_PeriodMonth');\n }\n\n getPrettyString(): string {\n const month = translate(`Intl_Month_Long_StandAlone_${this.dateInPeriod.getMonth() + 1}`);\n return `${month} ${this.dateInPeriod.getFullYear()}`;\n }\n\n getDateRange(): Date[] {\n const startMonth = new Date(this.dateInPeriod.getTime());\n startMonth.setDate(1);\n\n const endMonth = new Date(this.dateInPeriod.getTime());\n endMonth.setDate(1);\n endMonth.setMonth(endMonth.getMonth() + 1);\n endMonth.setDate(0);\n\n return [startMonth, endMonth];\n }\n\n containsToday(): boolean {\n return todayIsInRange(this.getDateRange());\n }\n}\n\nPeriods.addCustomPeriod('month', MonthPeriod);\n","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\nimport translate from '../translate';\nimport Periods from './Periods';\nimport { parseDate, todayIsInRange } from './utilities';\n\nexport default class YearPeriod {\n constructor(private dateInPeriod: Date) {}\n\n static parse(strDate: string): YearPeriod {\n return new YearPeriod(parseDate(strDate));\n }\n\n static getDisplayText(): string {\n return translate('Intl_PeriodYear');\n }\n\n getPrettyString(): string {\n return this.dateInPeriod.getFullYear().toString();\n }\n\n getDateRange(): Date[] {\n const startYear = new Date(this.dateInPeriod.getTime());\n startYear.setMonth(0);\n startYear.setDate(1);\n\n const endYear = new Date(this.dateInPeriod.getTime());\n endYear.setMonth(12);\n endYear.setDate(0);\n\n return [startYear, endYear];\n }\n\n containsToday(): boolean {\n return todayIsInRange(this.getDateRange());\n }\n}\n\nPeriods.addCustomPeriod('year', YearPeriod);\n","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\nimport translate from '../translate';\nimport Periods from './Periods';\nimport {\n parseDate,\n format,\n getToday,\n todayIsInRange,\n} from './utilities';\n\nexport default class RangePeriod {\n constructor(\n public readonly startDate: Date,\n public readonly endDate: Date,\n public readonly childPeriodType: string,\n ) {}\n\n /**\n * Returns a range representing the last N childPeriodType periods, including the current one.\n */\n static getLastNRange(\n childPeriodType: string,\n strAmount: string|number,\n strEndDate?: Date|string,\n ): RangePeriod {\n const nAmount = Math.max(parseInt(strAmount.toString(), 10) - 1, 0);\n if (Number.isNaN(nAmount)) {\n throw new Error('Invalid range strAmount');\n }\n\n let endDate = strEndDate ? parseDate(strEndDate) : getToday();\n\n let startDate = new Date(endDate.getTime());\n if (childPeriodType === 'day') {\n startDate.setDate(startDate.getDate() - nAmount);\n } else if (childPeriodType === 'week') {\n startDate.setDate(startDate.getDate() - (nAmount * 7));\n } else if (childPeriodType === 'month') {\n startDate.setDate(1);\n startDate.setMonth(startDate.getMonth() - nAmount);\n } else if (childPeriodType === 'year') {\n startDate.setFullYear(startDate.getFullYear() - nAmount);\n } else {\n throw new Error(`Unknown period type '${childPeriodType}'.`);\n }\n\n if (childPeriodType !== 'day') {\n const startPeriod = Periods.periods[childPeriodType].parse(startDate);\n const endPeriod = Periods.periods[childPeriodType].parse(endDate);\n\n [startDate] = startPeriod.getDateRange();\n [, endDate] = endPeriod.getDateRange();\n }\n\n const firstWebsiteDate = new Date(1991, 7, 6);\n if (startDate.getTime() - firstWebsiteDate.getTime() < 0) {\n switch (childPeriodType) {\n case 'year':\n startDate = new Date(1992, 0, 1);\n break;\n case 'month':\n startDate = new Date(1991, 8, 1);\n break;\n case 'week':\n startDate = new Date(1991, 8, 12);\n break;\n case 'day':\n default:\n startDate = firstWebsiteDate;\n break;\n }\n }\n\n return new RangePeriod(startDate, endDate, childPeriodType);\n }\n\n static parse(strDate: string, childPeriodType = 'day'): RangePeriod {\n if (/^previous/.test(strDate)) {\n const endDate = RangePeriod.getLastNRange(childPeriodType, '2').startDate;\n return RangePeriod.getLastNRange(childPeriodType, strDate.substring(8), endDate);\n }\n\n if (/^last/.test(strDate)) {\n return RangePeriod.getLastNRange(childPeriodType, strDate.substring(4));\n }\n\n const parts = decodeURIComponent(strDate).split(',');\n return new RangePeriod(parseDate(parts[0]), parseDate(parts[1]), childPeriodType);\n }\n\n static getDisplayText(): string {\n return translate('General_DateRangeInPeriodList');\n }\n\n getPrettyString(): string {\n const start = format(this.startDate);\n const end = format(this.endDate);\n return translate('General_DateRangeFromTo', [start, end]);\n }\n\n getDateRange(): Date[] {\n return [this.startDate, this.endDate];\n }\n\n containsToday(): boolean {\n return todayIsInRange(this.getDateRange());\n }\n}\n\nPeriods.addCustomPeriod('range', RangePeriod);\n","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\nimport Periods from './Periods';\nimport RangePeriod from './Range';\nimport { parseDate, format, todayIsInRange } from './utilities';\n\npiwik.addCustomPeriod = Periods.addCustomPeriod.bind(Periods);\n\nfunction piwikPeriods() {\n return {\n getAllLabels: Periods.getAllLabels.bind(Periods),\n isRecognizedPeriod: Periods.isRecognizedPeriod.bind(Periods),\n get: Periods.get.bind(Periods),\n parse: Periods.parse.bind(Periods),\n parseDate,\n format,\n RangePeriod,\n todayIsInRange,\n };\n}\n\nangular.module('piwikApp.service').factory('piwikPeriods', piwikPeriods);\n","<!--\n Matomo - free/libre analytics platform\n\n @link https://matomo.org\n @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n-->\n\n<template>\n <div v-show=\"loading\" class=\"loadingPiwik\">\n <img src=\"plugins/Morpheus/images/loading-blue.gif\" alt=\"\"/>\n <span>{{ loadingMessage }}</span>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport translate from '../translate';\n\nexport default defineComponent({\n props: {\n loading: {\n type: Boolean,\n required: true,\n default: false,\n },\n loadingMessage: {\n type: String,\n required: false,\n default: translate('General_LoadingData'),\n },\n },\n});\n</script>\n","\nimport { defineComponent } from 'vue';\nimport translate from '../translate';\n\nexport default defineComponent({\n props: {\n loading: {\n type: Boolean,\n required: true,\n default: false,\n },\n loadingMessage: {\n type: String,\n required: false,\n default: translate('General_LoadingData'),\n },\n },\n});\n","import { render } from \"./ActivityIndicator.vue?vue&type=template&id=6af4d064\"\nimport script from \"./ActivityIndicator.vue?vue&type=script&lang=ts\"\nexport * from \"./ActivityIndicator.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\nimport { createApp } from 'vue';\nimport ActivityIndicator from './ActivityIndicator.vue';\nimport translate from '../translate';\n\ninterface ActivityIndicatorAdapterScope extends ng.IScope {\n loading: boolean;\n loadingMessage: string;\n}\n\nexport default function activityIndicatorAdapter(): ng.IDirective {\n return {\n restrict: 'A',\n scope: {\n loading: '<',\n loadingMessage: '<',\n },\n template: '',\n link: function activityIndicatorAdapterLink(\n scope: ActivityIndicatorAdapterScope,\n element: ng.IAugmentedJQuery,\n ) {\n const app = createApp({\n template: '<activity-indicator :loading=\"loading\" :loadingMessage=\"loadingMessage\"/>',\n data() {\n return {\n loading: scope.loading,\n loadingMessage: scope.loadingMessage,\n };\n },\n });\n app.component('activity-indicator', ActivityIndicator);\n const vm = app.mount(element[0]);\n\n scope.$watch('loading', (newValue: boolean) => {\n vm.loading = newValue;\n });\n\n scope.$watch('loadingMessage', (newValue: string) => {\n vm.loadingMessage = newValue || translate('General_LoadingData');\n });\n },\n };\n}\n\nactivityIndicatorAdapter.$inject = [];\n\nangular.module('piwikApp').directive('piwikActivityIndicator', activityIndicatorAdapter);\n","<!--\n Matomo - free/libre analytics platform\n\n @link https://matomo.org\n @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n-->\n\n<template>\n <div\n class=\"alert\"\n :class=\"{ [`alert-${severity}`]: true }\"\n >\n <slot></slot>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n props: {\n severity: {\n type: String,\n required: true,\n },\n },\n});\n</script>\n","\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n props: {\n severity: {\n type: String,\n required: true,\n },\n },\n});\n","import { render } from \"./Alert.vue?vue&type=template&id=c3863ae2\"\nimport script from \"./Alert.vue?vue&type=script&lang=ts\"\nexport * from \"./Alert.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\nimport { createApp, ref } from 'vue';\nimport Alert from './Alert.vue';\n\ninterface AlertAdapterScope extends ng.IScope {\n severity: string;\n}\n\nexport default function alertAdapter(): ng.IDirective {\n return {\n restrict: 'A',\n transclude: true,\n scope: {\n severity: '@piwikAlert',\n },\n template: '<div ng-transclude/>',\n compile: function alertAdapterCompile() {\n return {\n post: function alertAdapterPostLink(\n scope: AlertAdapterScope,\n element: ng.IAugmentedJQuery,\n ) {\n const clone = element.find('[ng-transclude]');\n\n const app = createApp({\n template: '<alert :severity=\"severity\"><div ref=\"transcludeTarget\"/></alert>',\n data() {\n return { severity: scope.severity };\n },\n setup() {\n const transcludeTarget = ref(null);\n return {\n transcludeTarget,\n };\n },\n });\n app.component('alert', Alert);\n const vm = app.mount(element[0]);\n\n scope.$watch('severity', (newValue: string) => {\n vm.severity = newValue;\n });\n\n $(vm.transcludeTarget).append(clone);\n },\n };\n },\n };\n}\n\nalertAdapter.$inject = [];\n\nangular.module('piwikApp').directive('piwikAlert', alertAdapter);\n"],"sourceRoot":""}
\ No newline at end of file diff --git a/plugins/CoreHome/vue/src/Periods/Day.ts b/plugins/CoreHome/vue/src/Periods/Day.ts new file mode 100644 index 0000000000..f4150d9a35 --- /dev/null +++ b/plugins/CoreHome/vue/src/Periods/Day.ts @@ -0,0 +1,36 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +import translate from '../translate'; +import Periods from './Periods'; +import { parseDate, format, todayIsInRange } from './utilities'; + +export default class DayPeriod { + constructor(private dateInPeriod: Date) {} + + static parse(strDate: string): DayPeriod { + return new DayPeriod(parseDate(strDate)); + } + + static getDisplayText(): string { + return translate('Intl_PeriodDay'); + } + + getPrettyString(): string { + return format(this.dateInPeriod); + } + + getDateRange(): Date[] { + return [new Date(this.dateInPeriod.getTime()), new Date(this.dateInPeriod.getTime())]; + } + + containsToday(): boolean { + return todayIsInRange(this.getDateRange()); + } +} + +Periods.addCustomPeriod('day', DayPeriod); diff --git a/plugins/CoreHome/vue/src/Periods/Month.ts b/plugins/CoreHome/vue/src/Periods/Month.ts new file mode 100644 index 0000000000..2924745912 --- /dev/null +++ b/plugins/CoreHome/vue/src/Periods/Month.ts @@ -0,0 +1,45 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +import translate from '../translate'; +import Periods from './Periods'; +import { parseDate, todayIsInRange } from './utilities'; + +export default class MonthPeriod { + constructor(private dateInPeriod: Date) {} + + static parse(strDate: string): MonthPeriod { + return new MonthPeriod(parseDate(strDate)); + } + + static getDisplayText(): string { + return translate('Intl_PeriodMonth'); + } + + getPrettyString(): string { + const month = translate(`Intl_Month_Long_StandAlone_${this.dateInPeriod.getMonth() + 1}`); + return `${month} ${this.dateInPeriod.getFullYear()}`; + } + + getDateRange(): Date[] { + const startMonth = new Date(this.dateInPeriod.getTime()); + startMonth.setDate(1); + + const endMonth = new Date(this.dateInPeriod.getTime()); + endMonth.setDate(1); + endMonth.setMonth(endMonth.getMonth() + 1); + endMonth.setDate(0); + + return [startMonth, endMonth]; + } + + containsToday(): boolean { + return todayIsInRange(this.getDateRange()); + } +} + +Periods.addCustomPeriod('month', MonthPeriod); diff --git a/plugins/CoreHome/vue/src/Periods/Periods.adapter.ts b/plugins/CoreHome/vue/src/Periods/Periods.adapter.ts new file mode 100644 index 0000000000..b81b16242b --- /dev/null +++ b/plugins/CoreHome/vue/src/Periods/Periods.adapter.ts @@ -0,0 +1,27 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +import Periods from './Periods'; +import RangePeriod from './Range'; +import { parseDate, format, todayIsInRange } from './utilities'; + +piwik.addCustomPeriod = Periods.addCustomPeriod.bind(Periods); + +function piwikPeriods() { + return { + getAllLabels: Periods.getAllLabels.bind(Periods), + isRecognizedPeriod: Periods.isRecognizedPeriod.bind(Periods), + get: Periods.get.bind(Periods), + parse: Periods.parse.bind(Periods), + parseDate, + format, + RangePeriod, + todayIsInRange, + }; +} + +angular.module('piwikApp.service').factory('piwikPeriods', piwikPeriods); diff --git a/plugins/CoreHome/vue/src/Periods/Periods.spec.ts b/plugins/CoreHome/vue/src/Periods/Periods.spec.ts new file mode 100644 index 0000000000..5698f88423 --- /dev/null +++ b/plugins/CoreHome/vue/src/Periods/Periods.spec.ts @@ -0,0 +1,162 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ +import Periods from './Periods'; +import './Day'; +import './Week'; +import './Month'; +import './Year'; +import RangePeriod from './Range'; +import { parseDate } from './utilities'; + +describe('CoreHome/Periods', () => { + function clearDate(strDate: Date|string):Date { + const date = new Date(strDate); + date.setHours(0); + date.setMinutes(0); + date.setSeconds(0); + date.setMilliseconds(0); + + return date; + } + + let originalDateNow: (() => number)|null; + + beforeEach(() => { + originalDateNow = null; + piwik.timezoneOffset = 0; + }); + + afterEach(() => { + if (originalDateNow) { + Date.now = originalDateNow; + } + }); + + it('should get daterange for day', () => { + const day = '2021-03-10'; + + const result = Periods.parse('day', day).getDateRange(); + const expected = [clearDate(day), clearDate(day)]; + + expect(result).toEqual(expected); + }) + + it('should get daterange for week', function() { + const day = '2021-03-10'; + const monday = '2021-03-08'; + const sunday = '2021-03-14'; + + const result = Periods.parse('week', day).getDateRange(); + const expected = [clearDate(monday), clearDate(sunday)]; + + expect(result).toEqual(expected); + }); + + it('should get daterange for month', function() { + const day = '2021-03-10'; + const first = '2021-03-01'; + const last = '2021-03-31'; + + const result = Periods.parse('month', day).getDateRange(); + const expected = [clearDate(first), clearDate(last)]; + + expect(result).toEqual(expected); + }); + + it('should get daterange for month for date 31th', function() { + const day = '2021-03-31'; + const first = '2021-03-01'; + const last = '2021-03-31'; + + const result = Periods.parse('month', day).getDateRange(); + const expected = [clearDate(first), clearDate(last)]; + + expect(result).toEqual(expected); + }); + + it('should get daterange for year', function() { + const day = '2021-03-10'; + const first = '2021-01-01'; + const last = '2021-12-31'; + + const result = Periods.parse('year', day).getDateRange(); + const expected = [clearDate(first), clearDate(last)]; + + expect(result).toEqual(expected); + }); + + it('should get daterange for year for date 31th december', function() { + const day = '2021-12-31'; + const first = '2021-01-01'; + const last = '2021-12-31'; + + const result = Periods.parse('year', day).getDateRange(); + const expected = [clearDate(first), clearDate(last)]; + + expect(result).toEqual(expected); + }); + + it('should get proper month rangeperiod when date is 31th march', function() { + const day = '2021-03-31'; + const first = '2021-02-01'; + const last = '2021-03-31'; + + const result = RangePeriod.getLastNRange('month', 2, day); + + expect(result.startDate).toEqual(clearDate(first)); + expect(result.endDate).toEqual(clearDate(last)); + }); + + it('should parse last month properly when date is 31th march', function() { + originalDateNow = Date.now; + Date.now = function mockNow() { + return clearDate('2021-03-31').getTime(); + }; + + const result = parseDate('last month'); + + expect(result.getMonth()).toEqual(1); // 1 is February + }); + + it('should parse last month properly', function() { + originalDateNow = Date.now; + Date.now = function mockNow() { + return clearDate('2021-03-10').getTime(); + }; + + const result = parseDate('last month'); + + expect(result.getMonth()).toEqual(1); // 1 is February + }); + + it('should contains today for daterange if it contains', function() { + const day = '2021-03-10'; + + originalDateNow = Date.now; + Date.now = function() { + return clearDate(day).getTime(); + }; + + const result = Periods.parse('week', day).containsToday(); + + expect(result).toBe(true); + }); + + it('should not contains today for daterange if it not contains', function() { + const today = '2021-03-10'; + const day = '2021-03-17'; + + originalDateNow = Date.now; + Date.now = function() { + return clearDate(today).getTime(); + }; + + const result = Periods.parse('week', day).containsToday(); + + expect(result).toBe(false); + }); +}); diff --git a/plugins/CoreHome/vue/src/Periods/Periods.ts b/plugins/CoreHome/vue/src/Periods/Periods.ts new file mode 100644 index 0000000000..b832629e26 --- /dev/null +++ b/plugins/CoreHome/vue/src/Periods/Periods.ts @@ -0,0 +1,90 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +interface Period { + getPrettyString(): string; + getDateRange(): Date[]; + containsToday(): boolean; +} + +interface PeriodClass { + parse(strDate: string|Date): Period; + getDisplayText(): string; +} + +/** + * Piwik period management service for the frontend. + * + * Usage: + * + * var DayPeriod = piwikPeriods.get('day'); + * var day = new DayPeriod(new Date()); + * + * or + * + * var day = piwikPeriods.parse('day', '2013-04-05'); + * + * Adding custom periods: + * + * To add your own period to the frontend, create a period class for it + * w/ the following methods: + * + * - **getPrettyString()**: returns a human readable display string for the period. + * - **getDateRange()**: returns an array w/ two elements, the first being the start + * Date of the period, the second being the end Date. The dates + * must be Date objects, not strings, and are inclusive. + * - **containsToday()**: returns true if the date period contains today. False if not. + * - (_static_) **parse(strDate)**: creates a new instance of this period from the + * value of the 'date' query parameter. + * - (_static_) **getDisplayText**: returns translated text for the period, eg, 'month', + * 'week', etc. + * + * Then call piwik.addCustomPeriod w/ your period class: + * + * piwik.addCustomPeriod('mycustomperiod', MyCustomPeriod); + * + * NOTE: currently only single date periods like day, week, month year can + * be extended. Other types of periods that require a special UI to + * view/edit aren't, since there is currently no way to use a + * custom UI for a custom period. + */ +class Periods { + periods: {[name: string]: PeriodClass} = {}; + + periodOrder: string[] = []; + + addCustomPeriod(name: string, periodClass: PeriodClass) { + if (this.periods[name]) { + throw new Error(`The "${name}" period already exists! It cannot be overridden.`); + } + + this.periods[name] = periodClass; + this.periodOrder.push(name); + } + + getAllLabels(): string[] { + return Array<string>().concat(this.periodOrder); + } + + get(strPeriod: string): PeriodClass { + const periodClass = this.periods[strPeriod]; + if (!periodClass) { + throw new Error(`Invalid period label: ${strPeriod}`); + } + return periodClass; + } + + parse(strPeriod: string, strDate: string): Period { + return this.get(strPeriod).parse(strDate); + } + + isRecognizedPeriod(strPeriod: string): boolean { + return !!this.periods[strPeriod]; + } +} + +export default new Periods(); diff --git a/plugins/CoreHome/vue/src/Periods/Range.ts b/plugins/CoreHome/vue/src/Periods/Range.ts new file mode 100644 index 0000000000..78274b7789 --- /dev/null +++ b/plugins/CoreHome/vue/src/Periods/Range.ts @@ -0,0 +1,116 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +import translate from '../translate'; +import Periods from './Periods'; +import { + parseDate, + format, + getToday, + todayIsInRange, +} from './utilities'; + +export default class RangePeriod { + constructor( + public readonly startDate: Date, + public readonly endDate: Date, + public readonly childPeriodType: string, + ) {} + + /** + * Returns a range representing the last N childPeriodType periods, including the current one. + */ + static getLastNRange( + childPeriodType: string, + strAmount: string|number, + strEndDate?: Date|string, + ): RangePeriod { + const nAmount = Math.max(parseInt(strAmount.toString(), 10) - 1, 0); + if (Number.isNaN(nAmount)) { + throw new Error('Invalid range strAmount'); + } + + let endDate = strEndDate ? parseDate(strEndDate) : getToday(); + + let startDate = new Date(endDate.getTime()); + if (childPeriodType === 'day') { + startDate.setDate(startDate.getDate() - nAmount); + } else if (childPeriodType === 'week') { + startDate.setDate(startDate.getDate() - (nAmount * 7)); + } else if (childPeriodType === 'month') { + startDate.setDate(1); + startDate.setMonth(startDate.getMonth() - nAmount); + } else if (childPeriodType === 'year') { + startDate.setFullYear(startDate.getFullYear() - nAmount); + } else { + throw new Error(`Unknown period type '${childPeriodType}'.`); + } + + if (childPeriodType !== 'day') { + const startPeriod = Periods.periods[childPeriodType].parse(startDate); + const endPeriod = Periods.periods[childPeriodType].parse(endDate); + + [startDate] = startPeriod.getDateRange(); + [, endDate] = endPeriod.getDateRange(); + } + + const firstWebsiteDate = new Date(1991, 7, 6); + if (startDate.getTime() - firstWebsiteDate.getTime() < 0) { + switch (childPeriodType) { + case 'year': + startDate = new Date(1992, 0, 1); + break; + case 'month': + startDate = new Date(1991, 8, 1); + break; + case 'week': + startDate = new Date(1991, 8, 12); + break; + case 'day': + default: + startDate = firstWebsiteDate; + break; + } + } + + return new RangePeriod(startDate, endDate, childPeriodType); + } + + static parse(strDate: string, childPeriodType = 'day'): RangePeriod { + if (/^previous/.test(strDate)) { + const endDate = RangePeriod.getLastNRange(childPeriodType, '2').startDate; + return RangePeriod.getLastNRange(childPeriodType, strDate.substring(8), endDate); + } + + if (/^last/.test(strDate)) { + return RangePeriod.getLastNRange(childPeriodType, strDate.substring(4)); + } + + const parts = decodeURIComponent(strDate).split(','); + return new RangePeriod(parseDate(parts[0]), parseDate(parts[1]), childPeriodType); + } + + static getDisplayText(): string { + return translate('General_DateRangeInPeriodList'); + } + + getPrettyString(): string { + const start = format(this.startDate); + const end = format(this.endDate); + return translate('General_DateRangeFromTo', [start, end]); + } + + getDateRange(): Date[] { + return [this.startDate, this.endDate]; + } + + containsToday(): boolean { + return todayIsInRange(this.getDateRange()); + } +} + +Periods.addCustomPeriod('range', RangePeriod); diff --git a/plugins/CoreHome/vue/src/Periods/Week.ts b/plugins/CoreHome/vue/src/Periods/Week.ts new file mode 100644 index 0000000000..4bb45ceedf --- /dev/null +++ b/plugins/CoreHome/vue/src/Periods/Week.ts @@ -0,0 +1,48 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +import translate from '../translate'; +import Periods from './Periods'; +import { parseDate, format, todayIsInRange } from './utilities'; + +export default class WeekPeriod { + constructor(private dateInPeriod: Date) {} + + static parse(strDate: string): WeekPeriod { + return new WeekPeriod(parseDate(strDate)); + } + + static getDisplayText(): string { + return translate('Intl_PeriodWeek'); + } + + getPrettyString(): string { + const weekDates = this.getDateRange(); + const startWeek = format(weekDates[0]); + const endWeek = format(weekDates[1]); + + return translate('General_DateRangeFromTo', [startWeek, endWeek]); + } + + getDateRange(): Date[] { + const daysToMonday = (this.dateInPeriod.getDay() + 6) % 7; + + const startWeek = new Date(this.dateInPeriod.getTime()); + startWeek.setDate(this.dateInPeriod.getDate() - daysToMonday); + + const endWeek = new Date(startWeek.getTime()); + endWeek.setDate(startWeek.getDate() + 6); + + return [startWeek, endWeek]; + } + + containsToday(): boolean { + return todayIsInRange(this.getDateRange()); + } +} + +Periods.addCustomPeriod('week', WeekPeriod); diff --git a/plugins/CoreHome/vue/src/Periods/Year.ts b/plugins/CoreHome/vue/src/Periods/Year.ts new file mode 100644 index 0000000000..9f9c0c0c88 --- /dev/null +++ b/plugins/CoreHome/vue/src/Periods/Year.ts @@ -0,0 +1,44 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +import translate from '../translate'; +import Periods from './Periods'; +import { parseDate, todayIsInRange } from './utilities'; + +export default class YearPeriod { + constructor(private dateInPeriod: Date) {} + + static parse(strDate: string): YearPeriod { + return new YearPeriod(parseDate(strDate)); + } + + static getDisplayText(): string { + return translate('Intl_PeriodYear'); + } + + getPrettyString(): string { + return this.dateInPeriod.getFullYear().toString(); + } + + getDateRange(): Date[] { + const startYear = new Date(this.dateInPeriod.getTime()); + startYear.setMonth(0); + startYear.setDate(1); + + const endYear = new Date(this.dateInPeriod.getTime()); + endYear.setMonth(12); + endYear.setDate(0); + + return [startYear, endYear]; + } + + containsToday(): boolean { + return todayIsInRange(this.getDateRange()); + } +} + +Periods.addCustomPeriod('year', YearPeriod); diff --git a/plugins/CoreHome/vue/src/Periods/utilities.ts b/plugins/CoreHome/vue/src/Periods/utilities.ts new file mode 100644 index 0000000000..dd77f5e2a0 --- /dev/null +++ b/plugins/CoreHome/vue/src/Periods/utilities.ts @@ -0,0 +1,89 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +export function format(date: Date): string { + return $.datepicker.formatDate('yy-mm-dd', date); +} + +export function getToday(): Date { + const date = new Date(Date.now()); + + // undo browser timezone + date.setTime(date.getTime() + date.getTimezoneOffset() * 60 * 1000); + + // apply piwik site timezone (if it exists) + date.setHours(date.getHours() + ((piwik.timezoneOffset || 0) / 3600)); + + // get rid of hours/minutes/seconds/etc. + date.setHours(0); + date.setMinutes(0); + date.setSeconds(0); + date.setMilliseconds(0); + return date; +} + +export function parseDate(date: string|Date): Date { + if (date instanceof Date) { + return date; + } + + const strDate = decodeURIComponent(date); + + if (strDate === 'today' + || strDate === 'now' + ) { + return getToday(); + } + + if (strDate === 'yesterday' + // note: ignoring the 'same time' part since the frontend doesn't care about the time + || strDate === 'yesterdaySameTime' + ) { + const yesterday = getToday(); + yesterday.setDate(yesterday.getDate() - 1); + return yesterday; + } + + if (strDate.match(/last[ -]?week/i)) { + const lastWeek = getToday(); + lastWeek.setDate(lastWeek.getDate() - 7); + return lastWeek; + } + + if (strDate.match(/last[ -]?month/i)) { + const lastMonth = getToday(); + lastMonth.setDate(1); + lastMonth.setMonth(lastMonth.getMonth() - 1); + return lastMonth; + } + + if (strDate.match(/last[ -]?year/i)) { + const lastYear = getToday(); + lastYear.setFullYear(lastYear.getFullYear() - 1); + return lastYear; + } + + try { + return $.datepicker.parseDate('yy-mm-dd', strDate); + } catch (err) { + // angular swallows this error, so manual console log here + console.error(err.message || err); + throw err; + } +} + +export function todayIsInRange(dateRange: Date[]): boolean { + if (dateRange.length !== 2) { + return false; + } + + if (getToday() >= dateRange[0] && getToday() <= dateRange[1]) { + return true; + } + + return false; +} diff --git a/plugins/CoreHome/vue/src/index.ts b/plugins/CoreHome/vue/src/index.ts index 3853065aea..6e6e61e0ad 100644 --- a/plugins/CoreHome/vue/src/index.ts +++ b/plugins/CoreHome/vue/src/index.ts @@ -5,7 +5,15 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later */ +import './Periods/Day'; +import './Periods/Week'; +import './Periods/Month'; +import './Periods/Year'; +import './Periods/Range'; +import './Periods/Periods.adapter'; + export { default as activityIndicatorAdapter } from './ActivityIndicator/ActivityIndicator.adapter'; export { default as ActivityIndicator } from './ActivityIndicator/ActivityIndicator.vue'; export { default as translate } from './translate'; export { default as alertAdapter } from './Alert/Alert.adapter'; +export { default as Periods } from './Periods/Periods'; diff --git a/plugins/CoreHome/vue/src/translate.ts b/plugins/CoreHome/vue/src/translate.ts index 0f543432de..cb233f6acd 100644 --- a/plugins/CoreHome/vue/src/translate.ts +++ b/plugins/CoreHome/vue/src/translate.ts @@ -6,5 +6,5 @@ */ export default function translate(translationStringId: string, values: string[] = []): string { - return window._pk_translate(translationStringId, values); // eslint-disable-line + return _pk_translate(translationStringId, values); } |