Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordizzy <diosmosis@users.noreply.github.com>2021-10-08 08:55:23 +0300
committerGitHub <noreply@github.com>2021-10-08 08:55:23 +0300
commit61f6b2da14fdb2c93c2106a2a6f008f4716f26ee (patch)
treebf4b58bcbdd050089cf9628c7e373434aed0c14f /plugins
parent52caa6e3bcfe4b9d66cf42825f5523510664c53e (diff)
[Vue] Migrate ajaxHelper.ts + piwik-url service (#18104)
Diffstat (limited to 'plugins')
-rw-r--r--plugins/CoreAdminHome/CoreAdminHome.php1
-rw-r--r--plugins/CoreHome/CoreHome.php3
-rw-r--r--plugins/CoreHome/angularjs/common/services/global-ajax-queue.js14
-rw-r--r--plugins/CoreHome/angularjs/common/services/periods.spec.js159
-rw-r--r--plugins/CoreHome/angularjs/common/services/piwik-url.js38
-rw-r--r--plugins/CoreHome/vue/dist/CoreHome.umd.js579
-rw-r--r--plugins/CoreHome/vue/dist/CoreHome.umd.js.map2
-rw-r--r--plugins/CoreHome/vue/dist/CoreHome.umd.min.js44
-rw-r--r--plugins/CoreHome/vue/dist/CoreHome.umd.min.js.map2
-rw-r--r--plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.adapter.ts15
-rw-r--r--plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.ts498
-rw-r--r--plugins/CoreHome/vue/src/PiwikUrl/PiwikUrl.adapter.ts19
-rw-r--r--plugins/CoreHome/vue/src/PiwikUrl/PiwikUrl.ts32
-rw-r--r--plugins/CoreHome/vue/src/index.ts4
-rw-r--r--plugins/CoreVue/Commands/Build.php29
-rw-r--r--plugins/CoreVue/types/index.d.ts60
-rw-r--r--plugins/Morpheus/javascripts/ajaxHelper.js565
17 files changed, 1262 insertions, 802 deletions
diff --git a/plugins/CoreAdminHome/CoreAdminHome.php b/plugins/CoreAdminHome/CoreAdminHome.php
index c8c4a0dcef..5a713664a1 100644
--- a/plugins/CoreAdminHome/CoreAdminHome.php
+++ b/plugins/CoreAdminHome/CoreAdminHome.php
@@ -69,7 +69,6 @@ class CoreAdminHome extends \Piwik\Plugin
$jsFiles[] = "node_modules/jquery.browser/dist/jquery.browser.min.js";
$jsFiles[] = "node_modules/sprintf-js/dist/sprintf.min.js";
$jsFiles[] = "plugins/Morpheus/javascripts/piwikHelper.js";
- $jsFiles[] = "plugins/Morpheus/javascripts/ajaxHelper.js";
$jsFiles[] = "plugins/CoreHome/javascripts/broadcast.js";
$jsFiles[] = "plugins/CoreAdminHome/javascripts/protocolCheck.js";
}
diff --git a/plugins/CoreHome/CoreHome.php b/plugins/CoreHome/CoreHome.php
index 2f2f4554eb..0f2bdb280d 100644
--- a/plugins/CoreHome/CoreHome.php
+++ b/plugins/CoreHome/CoreHome.php
@@ -170,7 +170,6 @@ class CoreHome extends \Piwik\Plugin
$jsFiles[] = "node_modules/angular-cookies/angular-cookies.min.js";
$jsFiles[] = "node_modules/ng-dialog/js/ngDialog.min.js";
$jsFiles[] = "plugins/Morpheus/javascripts/piwikHelper.js";
- $jsFiles[] = "plugins/Morpheus/javascripts/ajaxHelper.js";
$jsFiles[] = "plugins/Morpheus/javascripts/layout.js";
$jsFiles[] = "plugins/CoreHome/javascripts/require.js";
$jsFiles[] = "plugins/CoreHome/javascripts/uiControl.js";
@@ -192,10 +191,8 @@ class CoreHome extends \Piwik\Plugin
$jsFiles[] = "plugins/CoreHome/angularjs/piwikApp.config.js";
$jsFiles[] = "plugins/CoreHome/angularjs/common/services/service.module.js";
- $jsFiles[] = "plugins/CoreHome/angularjs/common/services/global-ajax-queue.js";
$jsFiles[] = "plugins/CoreHome/angularjs/common/services/piwik.js";
$jsFiles[] = "plugins/CoreHome/angularjs/common/services/piwik-api.js";
- $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";
diff --git a/plugins/CoreHome/angularjs/common/services/global-ajax-queue.js b/plugins/CoreHome/angularjs/common/services/global-ajax-queue.js
deleted file mode 100644
index 2a216b296d..0000000000
--- a/plugins/CoreHome/angularjs/common/services/global-ajax-queue.js
+++ /dev/null
@@ -1,14 +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
- */
-(function () {
- angular.module('piwikApp.service').service('globalAjaxQueue', ajaxQueue);
-
- function ajaxQueue() {
-
- return globalAjaxQueue;
- }
-})(); \ No newline at end of file
diff --git a/plugins/CoreHome/angularjs/common/services/periods.spec.js b/plugins/CoreHome/angularjs/common/services/periods.spec.js
deleted file mode 100644
index 1ae3a52106..0000000000
--- a/plugins/CoreHome/angularjs/common/services/periods.spec.js
+++ /dev/null
@@ -1,159 +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
- */
-(function () {
- describe('piwikPeriods', function() {
- var piwikPeriods;
-
- function clearDate(date)
- {
- var date = new Date(date);
- date.setHours(0);
- date.setMinutes(0);
- date.setSeconds(0);
- date.setMilliseconds(0);
-
- return date;
- }
-
- beforeEach(module('piwikApp.service'));
- beforeEach(inject(function($injector) {
- piwikPeriods = $injector.get('piwikPeriods');
- }));
-
- it('should get daterange for day', function() {
- var day = '2021-03-10';
-
- var result = piwikPeriods.parse('day', day).getDateRange();
- var expected = [clearDate(day), clearDate(day)];
-
- expect(result).to.eql(expected);
- });
-
- it('should get daterange for week', function() {
- var day = '2021-03-10';
- var monday = '2021-03-08';
- var sunday = '2021-03-14';
-
- var result = piwikPeriods.parse('week', day).getDateRange();
- var expected = [clearDate(monday), clearDate(sunday)];
-
- expect(result).to.eql(expected);
- });
-
- it('should get daterange for month', function() {
- var day = '2021-03-10';
- var first = '2021-03-01';
- var last = '2021-03-31';
-
- var result = piwikPeriods.parse('month', day).getDateRange();
- var expected = [clearDate(first), clearDate(last)];
-
- expect(result).to.eql(expected);
- });
-
- it('should get daterange for month for date 31th', function() {
- var day = '2021-03-31';
- var first = '2021-03-01';
- var last = '2021-03-31';
-
- var result = piwikPeriods.parse('month', day).getDateRange();
- var expected = [clearDate(first), clearDate(last)];
-
- expect(result).to.eql(expected);
- });
-
- it('should get daterange for year', function() {
- var day = '2021-03-10';
- var first = '2021-01-01';
- var last = '2021-12-31';
-
- var result = piwikPeriods.parse('year', day).getDateRange();
- var expected = [clearDate(first), clearDate(last)];
-
- expect(result).to.eql(expected);
- });
-
- it('should get daterange for year for date 31th december', function() {
- var day = '2021-12-31';
- var first = '2021-01-01';
- var last = '2021-12-31';
-
- var result = piwikPeriods.parse('year', day).getDateRange();
- var expected = [clearDate(first), clearDate(last)];
-
- expect(result).to.eql(expected);
- });
-
- it('should get proper month rangeperiod when date is 31th march', function() {
- var day = '2021-03-31';
- var first = '2021-02-01';
- var last = '2021-03-31';
-
- var result = piwikPeriods.RangePeriod.getLastNRange('month', 2, day);
-
- expect(result.startDate).to.eql(clearDate(first));
- expect(result.endDate).to.eql(clearDate(last));
- });
-
- it('should parse last month properly when date is 31th march', function() {
- originalDateNow = Date.now;
- Date.now = function() {
- return clearDate('2021-03-31').getTime();
- }
-
- var result = piwikPeriods.parseDate('last month');
-
- expect(result.getMonth()).to.eql(1); // 1 is February
-
- Date.now = originalDateNow;
- });
-
- it('should parse last month properly', function() {
- originalDateNow = Date.now;
- Date.now = function() {
- return clearDate('2021-03-10').getTime();
- };
-
- var result = piwikPeriods.parseDate('last month');
-
- expect(result.getMonth()).to.eql(1); // 1 is February
-
- Date.now = originalDateNow;
- });
-
- it('should contains today for daterange if it contains', function() {
- var day = '2021-03-10';
-
- originalDateNow = Date.now;
- Date.now = function() {
- return clearDate(day).getTime();
- };
-
- var result = piwikPeriods.parse('week', day).containsToday();
-
- expect(result).to.be.true;
-
- Date.now = originalDateNow;
- });
-
- it('should not contains today for daterange if it not contains', function() {
- var today = '2021-03-10';
- var day = '2021-03-17';
-
- originalDateNow = Date.now;
- Date.now = function() {
- return clearDate(today).getTime();
- };
-
- var result = piwikPeriods.parse('week', day).containsToday();
-
- expect(result).to.be.false;
-
- Date.now = originalDateNow;
- });
- });
-})();
diff --git a/plugins/CoreHome/angularjs/common/services/piwik-url.js b/plugins/CoreHome/angularjs/common/services/piwik-url.js
deleted file mode 100644
index 3743bf0d62..0000000000
--- a/plugins/CoreHome/angularjs/common/services/piwik-url.js
+++ /dev/null
@@ -1,38 +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
- */
-(function () {
- angular.module('piwikApp.service').service('piwikUrl', piwikUrl);
-
- piwikUrl.$inject = ['$location', '$window'];
-
- /**
- * Similar to angulars $location but works around some limitation. Use it if you need to access search params
- */
- function piwikUrl($location, $window) {
-
- var model = {
- getSearchParam: getSearchParam
- };
-
- return model;
-
- function getSearchParam(paramName)
- {
- var hash = $window.location.href.split('#');
- if (hash && hash[1] && (new RegExp(paramName + '(\\[]|=)')).test(decodeURIComponent(hash[1]))) {
- var valueFromHash = broadcast.getValueFromHash(paramName, $window.location.href);
-
- // for date, period and idsite fall back to parameter from url, if non in hash was provided
- if (valueFromHash || (paramName !== 'date' && paramName !== 'period' && paramName !== 'idSite')) {
- return valueFromHash;
- }
-
- }
- return broadcast.getValueFromUrl(paramName, $window.location.search);
- }
- }
-})();
diff --git a/plugins/CoreHome/vue/dist/CoreHome.umd.js b/plugins/CoreHome/vue/dist/CoreHome.umd.js
index 3b81ac053b..f2d953639a 100644
--- a/plugins/CoreHome/vue/dist/CoreHome.umd.js
+++ b/plugins/CoreHome/vue/dist/CoreHome.umd.js
@@ -116,6 +116,8 @@ __webpack_require__.d(__webpack_exports__, "ActivityIndicator", function() { ret
__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; });
+__webpack_require__.d(__webpack_exports__, "AjaxHelper", function() { return /* reexport */ AjaxHelper_AjaxHelper; });
+__webpack_require__.d(__webpack_exports__, "PiwikUrl", function() { return /* reexport */ PiwikUrl_PiwikUrl; });
// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js
// This file is imported into lib/wc client bundles.
@@ -639,6 +641,579 @@ function piwikPeriods() {
}
angular.module('piwikApp.service').factory('piwikPeriods', piwikPeriods);
+// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/PiwikUrl/PiwikUrl.ts
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+/**
+ * Similar to angulars $location but works around some limitation. Use it if you need to access
+ * search params
+ */
+const PiwikUrl = {
+ getSearchParam(paramName) {
+ const hash = window.location.href.split('#');
+ const regex = new RegExp(`${paramName}(\\[]|=)`);
+
+ if (hash && hash[1] && regex.test(decodeURIComponent(hash[1]))) {
+ const valueFromHash = broadcast.getValueFromHash(paramName, window.location.href); // for date, period and idsite fall back to parameter from url, if non in hash was provided
+
+ if (valueFromHash || paramName !== 'date' && paramName !== 'period' && paramName !== 'idSite') {
+ return valueFromHash;
+ }
+ }
+
+ return broadcast.getValueFromUrl(paramName, window.location.search);
+ }
+
+};
+/* harmony default export */ var PiwikUrl_PiwikUrl = (PiwikUrl);
+// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.ts
+function AjaxHelper_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
+ */
+
+window.globalAjaxQueue = [];
+window.globalAjaxQueue.active = 0;
+
+window.globalAjaxQueue.clean = function globalAjaxQueueClean() {
+ for (let i = this.length; i >= 0; i -= 1) {
+ if (!this[i] || this[i].readyState === 4) {
+ this.splice(i, 1);
+ }
+ }
+};
+
+window.globalAjaxQueue.push = function globalAjaxQueuePush(...args) {
+ this.active += args.length; // cleanup ajax queue
+
+ this.clean(); // call original array push
+
+ return Array.prototype.push.call(this, ...args);
+};
+
+window.globalAjaxQueue.abort = function globalAjaxQueueAbort() {
+ // abort all queued requests if possible
+ this.forEach(x => x && x.abort && x.abort()); // remove all elements from array
+
+ this.splice(0, this.length);
+ this.active = 0;
+};
+/**
+ * error callback to use by default
+ */
+
+
+function defaultErrorCallback(deferred, status) {
+ // do not display error message if request was aborted
+ if (status === 'abort') {
+ return;
+ }
+
+ const loadingError = $('#loadingError');
+
+ if (Piwik_Popover.isOpen() && deferred && deferred.status === 500) {
+ if (deferred && deferred.status === 500) {
+ $(document.body).html(piwikHelper.escape(deferred.responseText));
+ }
+ } else {
+ loadingError.show();
+ }
+}
+/**
+ * Global ajax helper to handle requests within piwik
+ */
+
+
+class AjaxHelper_AjaxHelper {
+ /**
+ * Format of response
+ */
+
+ /**
+ * A timeout for the request which will override any global timeout
+ */
+
+ /**
+ * Callback function to be executed on success
+ */
+
+ /**
+ * Use this.callback if an error is returned
+ */
+
+ /**
+ * Callback function to be executed on error
+ */
+
+ /**
+ * Callback function to be executed on complete (after error or success)
+ */
+
+ /**
+ * Params to be passed as GET params
+ * @see ajaxHelper.mixinDefaultGetParams
+ */
+
+ /**
+ * Base URL used in the AJAX request. Can be set by setUrl.
+ *
+ * It is set to '?' rather than 'index.php?' to increase chances that it works
+ * including for users who have an automatic 301 redirection from index.php? to ?
+ * POST values are missing when there is such 301 redirection. So by by-passing
+ * this 301 redirection, we avoid this issue.
+ *
+ * @see ajaxHelper.setUrl
+ */
+
+ /**
+ * Params to be passed as GET params
+ * @see ajaxHelper.mixinDefaultPostParams
+ */
+
+ /**
+ * Element to be displayed while loading
+ */
+
+ /**
+ * Element to be displayed on error
+ */
+
+ /**
+ * Handle for current request
+ */
+ constructor() {
+ AjaxHelper_defineProperty(this, "format", 'json');
+
+ AjaxHelper_defineProperty(this, "timeout", null);
+
+ AjaxHelper_defineProperty(this, "callback", null);
+
+ AjaxHelper_defineProperty(this, "useRegularCallbackInCaseOfError", false);
+
+ AjaxHelper_defineProperty(this, "errorCallback", void 0);
+
+ AjaxHelper_defineProperty(this, "withToken", false);
+
+ AjaxHelper_defineProperty(this, "completeCallback", void 0);
+
+ AjaxHelper_defineProperty(this, "getParams", {});
+
+ AjaxHelper_defineProperty(this, "getUrl", '?');
+
+ AjaxHelper_defineProperty(this, "postParams", {});
+
+ AjaxHelper_defineProperty(this, "loadingElement", null);
+
+ AjaxHelper_defineProperty(this, "errorElement", '#ajaxError');
+
+ AjaxHelper_defineProperty(this, "requestHandle", null);
+
+ AjaxHelper_defineProperty(this, "defaultParams", ['idSite', 'period', 'date', 'segment']);
+
+ this.errorCallback = defaultErrorCallback;
+ }
+ /**
+ * Adds params to the request.
+ * If params are given more then once, the latest given value is used for the request
+ *
+ * @param params
+ * @param type type of given parameters (POST or GET)
+ * @return {void}
+ */
+
+
+ addParams(params, type) {
+ if (typeof params === 'string') {
+ // TODO: add global types for broadcast (multiple uses below)
+ params = window['broadcast'].getValuesFromUrl(params); // eslint-disable-line
+ }
+
+ const arrayParams = ['compareSegments', 'comparePeriods', 'compareDates'];
+ Object.keys(params).forEach(key => {
+ const value = params[key];
+
+ if (arrayParams.indexOf(key) !== -1 && !value) {
+ return;
+ }
+
+ if (type.toLowerCase() === 'get') {
+ this.getParams[key] = value;
+ } else if (type.toLowerCase() === 'post') {
+ this.postParams[key] = value;
+ }
+ });
+ }
+
+ withTokenInUrl() {
+ this.withToken = true;
+ }
+ /**
+ * Sets the base URL to use in the AJAX request.
+ */
+
+
+ setUrl(url) {
+ this.addParams(broadcast.getValuesFromUrl(url), 'GET');
+ }
+ /**
+ * Gets this helper instance ready to send a bulk request. Each argument to this
+ * function is a single request to use.
+ */
+
+
+ setBulkRequests(...urls) {
+ const urlsProcessed = urls.map(u => $.param(u));
+ this.addParams({
+ module: 'API',
+ method: 'API.getBulkRequest',
+ urls: urlsProcessed,
+ format: 'json'
+ }, 'post');
+ }
+ /**
+ * Set a timeout (in milliseconds) for the request. This will override any global timeout.
+ *
+ * @param timeout Timeout in milliseconds
+ */
+
+
+ setTimeout(timeout) {
+ this.timeout = timeout;
+ }
+ /**
+ * Sets the callback called after the request finishes
+ *
+ * @param callback Callback function
+ */
+
+
+ setCallback(callback) {
+ this.callback = callback;
+ }
+ /**
+ * Set that the callback passed to setCallback() should be used if an application error (i.e. an
+ * Exception in PHP) is returned.
+ */
+
+
+ useCallbackInCaseOfError() {
+ this.useRegularCallbackInCaseOfError = true;
+ }
+ /**
+ * Set callback to redirect on success handler
+ * &update=1(+x) will be appended to the current url
+ *
+ * @param [params] to modify in redirect url
+ * @return {void}
+ */
+
+
+ redirectOnSuccess(params) {
+ this.setCallback(() => {
+ piwikHelper.redirect(params);
+ });
+ }
+ /**
+ * Sets the callback called in case of an error within the request
+ */
+
+
+ setErrorCallback(callback) {
+ this.errorCallback = callback;
+ }
+ /**
+ * Sets the complete callback which is called after an error or success callback.
+ */
+
+
+ setCompleteCallback(callback) {
+ this.completeCallback = callback;
+ }
+ /**
+ * Sets the response format for the request
+ *
+ * @param format response format (e.g. json, html, ...)
+ */
+
+
+ setFormat(format) {
+ this.format = format;
+ }
+ /**
+ * Set the div element to show while request is loading
+ *
+ * @param [element] selector for the loading element
+ */
+
+
+ setLoadingElement(element) {
+ this.loadingElement = element || '#ajaxLoadingDiv';
+ }
+ /**
+ * Set the div element to show on error
+ *
+ * @param element selector for the error element
+ */
+
+
+ setErrorElement(element) {
+ if (!element) {
+ return;
+ }
+
+ this.errorElement = element;
+ }
+ /**
+ * Detect whether are allowed to use the given default parameter or not
+ */
+
+
+ useGETDefaultParameter(parameter) {
+ if (parameter && this.defaultParams) {
+ for (let i = 0; i < this.defaultParams.length; i += 1) {
+ if (this.defaultParams[i] === parameter) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+ /**
+ * Removes a default parameter that is usually send automatically along the request.
+ *
+ * @param parameter A name such as "period", "date", "segment".
+ */
+
+
+ removeDefaultParameter(parameter) {
+ if (parameter && this.defaultParams) {
+ for (let i = 0; i < this.defaultParams.length; i += 1) {
+ if (this.defaultParams[i] === parameter) {
+ this.defaultParams.splice(i, 1);
+ }
+ }
+ }
+ }
+ /**
+ * Send the request
+ */
+
+
+ send() {
+ if ($(this.errorElement).length) {
+ $(this.errorElement).hide();
+ }
+
+ if (this.loadingElement) {
+ $(this.loadingElement).fadeIn();
+ }
+
+ this.requestHandle = this.buildAjaxCall();
+ globalAjaxQueue.push(this.requestHandle);
+ }
+ /**
+ * Aborts the current request if it is (still) running
+ */
+
+
+ abort() {
+ if (this.requestHandle && typeof this.requestHandle.abort === 'function') {
+ this.requestHandle.abort();
+ this.requestHandle = null;
+ }
+ }
+ /**
+ * Builds and sends the ajax requests
+ */
+
+
+ buildAjaxCall() {
+ const self = this;
+ const parameters = this.mixinDefaultGetParams(this.getParams);
+ let url = this.getUrl;
+
+ if (url[url.length - 1] !== '?') {
+ url += '&';
+ } // we took care of encoding &segment properly already, so we don't use $.param for it ($.param
+ // URL encodes the values)
+
+
+ if (parameters.segment) {
+ url = `${url}segment=${parameters.segment}&`;
+ delete parameters.segment;
+ }
+
+ if (parameters.date) {
+ url = `${url}date=${decodeURIComponent(parameters.date.toString())}&`;
+ delete parameters.date;
+ }
+
+ url += $.param(parameters);
+ const ajaxCall = {
+ type: 'POST',
+ async: true,
+ url,
+ dataType: this.format || 'json',
+ complete: this.completeCallback,
+ error: function errorCallback() {
+ globalAjaxQueue.active -= 1;
+
+ if (self.errorCallback) {
+ self.errorCallback.apply(this, arguments); // eslint-disable-line
+ }
+ },
+ success: (response, status, request) => {
+ if (this.loadingElement) {
+ $(this.loadingElement).hide();
+ }
+
+ if (response && response.result === 'error' && !this.useRegularCallbackInCaseOfError) {
+ let placeAt = null;
+ let type = 'toast';
+
+ if ($(this.errorElement).length && response.message) {
+ $(this.errorElement).show();
+ placeAt = this.errorElement;
+ type = null;
+ }
+
+ if (response.message) {
+ const UI = window['require']('piwik/UI'); // eslint-disable-line
+
+ const notification = new UI.Notification();
+ notification.show(response.message, {
+ placeat: placeAt,
+ context: 'error',
+ type,
+ id: 'ajaxHelper'
+ });
+ notification.scrollToNotification();
+ }
+ } else if (this.callback) {
+ this.callback(response, status, request);
+ }
+
+ globalAjaxQueue.active -= 1;
+ const {
+ piwik
+ } = window;
+
+ if (piwik && piwik.ajaxRequestFinished) {
+ piwik.ajaxRequestFinished();
+ }
+ },
+ data: this.mixinDefaultPostParams(this.postParams),
+ timeout: this.timeout !== null ? this.timeout : undefined
+ };
+ return $.ajax(ajaxCall);
+ }
+
+ isRequestToApiMethod() {
+ return this.getParams && this.getParams.module === 'API' && this.getParams.method || this.postParams && this.postParams.module === 'API' && this.postParams.method;
+ }
+
+ isWidgetizedRequest() {
+ return broadcast.getValueFromUrl('module') === 'Widgetize';
+ }
+
+ getDefaultPostParams() {
+ if (this.withToken || this.isRequestToApiMethod() || piwik.shouldPropagateTokenAuth) {
+ return {
+ token_auth: piwik.token_auth,
+ // When viewing a widgetized report there won't be any session that can be used, so don't
+ // force session usage
+ force_api_session: broadcast.isWidgetizeRequestWithoutSession() ? 0 : 1
+ };
+ }
+
+ return {};
+ }
+ /**
+ * Mixin the default parameters to send as POST
+ *
+ * @param params parameter object
+ */
+
+
+ mixinDefaultPostParams(params) {
+ const defaultParams = this.getDefaultPostParams();
+ const mergedParams = { ...defaultParams,
+ ...params
+ };
+ return mergedParams;
+ }
+ /**
+ * Mixin the default parameters to send as GET
+ *
+ * @param params parameter object
+ */
+
+
+ mixinDefaultGetParams(originalParams) {
+ const segment = PiwikUrl_PiwikUrl.getSearchParam('segment');
+ const defaultParams = {
+ idSite: piwik.idSite || broadcast.getValueFromUrl('idSite'),
+ period: piwik.period || broadcast.getValueFromUrl('period'),
+ segment
+ };
+ const params = originalParams; // never append token_auth to url
+
+ if (params.token_auth) {
+ params.token_auth = null;
+ delete params.token_auth;
+ }
+
+ Object.keys(defaultParams).forEach(key => {
+ if (this.useGETDefaultParameter(key) && !params[key] && !this.postParams[key] && defaultParams[key]) {
+ params[key] = defaultParams[key];
+ }
+ }); // handle default date & period if not already set
+
+ if (this.useGETDefaultParameter('date') && !params.date && !this.postParams.date) {
+ params.date = piwik.currentDateString;
+ }
+
+ return params;
+ }
+
+}
+// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.adapter.ts
+
+window.ajaxHelper = AjaxHelper_AjaxHelper;
+
+function ajaxQueue() {
+ return globalAjaxQueue;
+}
+
+angular.module('piwikApp.service').service('globalAjaxQueue', ajaxQueue);
+// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/PiwikUrl/PiwikUrl.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 piwikUrl() {
+ const model = {
+ getSearchParam: PiwikUrl_PiwikUrl.getSearchParam.bind(PiwikUrl_PiwikUrl)
+ };
+ return model;
+}
+
+piwikUrl.$inject = [];
+angular.module('piwikApp.service').service('piwikUrl', piwikUrl);
// EXTERNAL MODULE: external {"commonjs":"vue","commonjs2":"vue","root":"Vue"}
var external_commonjs_vue_commonjs2_vue_root_Vue_ = __webpack_require__("8bbf");
@@ -826,6 +1401,10 @@ angular.module('piwikApp').directive('piwikAlert', alertAdapter);
+
+
+
+
// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib-no-default.js
diff --git a/plugins/CoreHome/vue/dist/CoreHome.umd.js.map b/plugins/CoreHome/vue/dist/CoreHome.umd.js.map
index f16372dd2f..2db6bfe8e8 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/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
+{"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/PiwikUrl/PiwikUrl.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.adapter.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/PiwikUrl/PiwikUrl.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/**\n * Similar to angulars $location but works around some limitation. Use it if you need to access\n * search params\n */\nconst PiwikUrl = {\n getSearchParam(paramName: string): string {\n const hash = window.location.href.split('#');\n\n const regex = new RegExp(`${paramName}(\\\\[]|=)`);\n if (hash && hash[1] && regex.test(decodeURIComponent(hash[1]))) {\n const valueFromHash = broadcast.getValueFromHash(paramName, window.location.href);\n\n // for date, period and idsite fall back to parameter from url, if non in hash was provided\n if (valueFromHash\n || (paramName !== 'date' && paramName !== 'period' && paramName !== 'idSite')\n ) {\n return valueFromHash;\n }\n }\n\n return broadcast.getValueFromUrl(paramName, window.location.search);\n },\n};\n\nexport default PiwikUrl;\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 PiwikUrl from '../PiwikUrl/PiwikUrl';\n\nwindow.globalAjaxQueue = [] as GlobalAjaxQueue;\nwindow.globalAjaxQueue.active = 0;\n\nwindow.globalAjaxQueue.clean = function globalAjaxQueueClean() {\n for (let i = this.length; i >= 0; i -= 1) {\n if (!this[i] || this[i].readyState === 4) {\n this.splice(i, 1);\n }\n }\n};\n\nwindow.globalAjaxQueue.push = function globalAjaxQueuePush(...args: (XMLHttpRequest|null)[]) {\n this.active += args.length;\n\n // cleanup ajax queue\n this.clean();\n\n // call original array push\n return Array.prototype.push.call(this, ...args);\n};\n\nwindow.globalAjaxQueue.abort = function globalAjaxQueueAbort() {\n // abort all queued requests if possible\n this.forEach((x) => x && x.abort && x.abort());\n\n // remove all elements from array\n this.splice(0, this.length);\n\n this.active = 0;\n};\n\ntype ParameterValue = string | number | null | undefined | ParameterValue[];\ntype Parameters = {[name: string]: ParameterValue | Parameters};\ntype AnyFunction = (...params:any[]) => any; // eslint-disable-line\n\n/**\n * error callback to use by default\n */\nfunction defaultErrorCallback(deferred: XMLHttpRequest, status: string): void {\n // do not display error message if request was aborted\n if (status === 'abort') {\n return;\n }\n\n const loadingError = $('#loadingError');\n if (Piwik_Popover.isOpen() && deferred && deferred.status === 500) {\n if (deferred && deferred.status === 500) {\n $(document.body).html(piwikHelper.escape(deferred.responseText));\n }\n } else {\n loadingError.show();\n }\n}\n\n/**\n * Global ajax helper to handle requests within piwik\n */\nexport default class AjaxHelper {\n /**\n * Format of response\n */\n format = 'json';\n\n /**\n * A timeout for the request which will override any global timeout\n */\n timeout = null;\n\n /**\n * Callback function to be executed on success\n */\n callback: AnyFunction = null;\n\n /**\n * Use this.callback if an error is returned\n */\n useRegularCallbackInCaseOfError = false;\n\n /**\n * Callback function to be executed on error\n */\n errorCallback: AnyFunction;\n\n withToken = false;\n\n /**\n * Callback function to be executed on complete (after error or success)\n */\n completeCallback: AnyFunction;\n\n /**\n * Params to be passed as GET params\n * @see ajaxHelper.mixinDefaultGetParams\n */\n getParams: Parameters = {};\n\n /**\n * Base URL used in the AJAX request. Can be set by setUrl.\n *\n * It is set to '?' rather than 'index.php?' to increase chances that it works\n * including for users who have an automatic 301 redirection from index.php? to ?\n * POST values are missing when there is such 301 redirection. So by by-passing\n * this 301 redirection, we avoid this issue.\n *\n * @see ajaxHelper.setUrl\n */\n getUrl = '?';\n\n /**\n * Params to be passed as GET params\n * @see ajaxHelper.mixinDefaultPostParams\n */\n postParams: Parameters = {};\n\n /**\n * Element to be displayed while loading\n */\n loadingElement: HTMLElement|null|JQuery|JQLite|string = null;\n\n /**\n * Element to be displayed on error\n */\n errorElement: HTMLElement|JQuery|JQLite|string = '#ajaxError';\n\n /**\n * Handle for current request\n */\n requestHandle: XMLHttpRequest|JQuery.jqXHR|null = null;\n\n defaultParams = ['idSite', 'period', 'date', 'segment'];\n\n constructor() {\n this.errorCallback = defaultErrorCallback;\n }\n\n /**\n * Adds params to the request.\n * If params are given more then once, the latest given value is used for the request\n *\n * @param params\n * @param type type of given parameters (POST or GET)\n * @return {void}\n */\n addParams(params: Parameters|string, type: string): void {\n if (typeof params === 'string') {\n // TODO: add global types for broadcast (multiple uses below)\n params = window['broadcast'].getValuesFromUrl(params); // eslint-disable-line\n }\n\n const arrayParams = ['compareSegments', 'comparePeriods', 'compareDates'];\n Object.keys(params).forEach((key) => {\n const value = params[key];\n if (arrayParams.indexOf(key) !== -1\n && !value\n ) {\n return;\n }\n\n if (type.toLowerCase() === 'get') {\n this.getParams[key] = value;\n } else if (type.toLowerCase() === 'post') {\n this.postParams[key] = value;\n }\n });\n }\n\n withTokenInUrl(): void {\n this.withToken = true;\n }\n\n /**\n * Sets the base URL to use in the AJAX request.\n */\n setUrl(url: string): void {\n this.addParams(broadcast.getValuesFromUrl(url), 'GET');\n }\n\n /**\n * Gets this helper instance ready to send a bulk request. Each argument to this\n * function is a single request to use.\n */\n setBulkRequests(...urls: string[]): void {\n const urlsProcessed = urls.map((u) => $.param(u));\n\n this.addParams({\n module: 'API',\n method: 'API.getBulkRequest',\n urls: urlsProcessed,\n format: 'json',\n }, 'post');\n }\n\n /**\n * Set a timeout (in milliseconds) for the request. This will override any global timeout.\n *\n * @param timeout Timeout in milliseconds\n */\n setTimeout(timeout: number): void {\n this.timeout = timeout;\n }\n\n /**\n * Sets the callback called after the request finishes\n *\n * @param callback Callback function\n */\n setCallback(callback: AnyFunction): void {\n this.callback = callback;\n }\n\n /**\n * Set that the callback passed to setCallback() should be used if an application error (i.e. an\n * Exception in PHP) is returned.\n */\n useCallbackInCaseOfError(): void {\n this.useRegularCallbackInCaseOfError = true;\n }\n\n /**\n * Set callback to redirect on success handler\n * &update=1(+x) will be appended to the current url\n *\n * @param [params] to modify in redirect url\n * @return {void}\n */\n redirectOnSuccess(params: Parameters): void {\n this.setCallback(() => {\n piwikHelper.redirect(params);\n });\n }\n\n /**\n * Sets the callback called in case of an error within the request\n */\n setErrorCallback(callback: AnyFunction): void {\n this.errorCallback = callback;\n }\n\n /**\n * Sets the complete callback which is called after an error or success callback.\n */\n setCompleteCallback(callback: AnyFunction): void {\n this.completeCallback = callback;\n }\n\n /**\n * Sets the response format for the request\n *\n * @param format response format (e.g. json, html, ...)\n */\n setFormat(format: string): void {\n this.format = format;\n }\n\n /**\n * Set the div element to show while request is loading\n *\n * @param [element] selector for the loading element\n */\n setLoadingElement(element: string|HTMLElement|JQuery): void {\n this.loadingElement = element || '#ajaxLoadingDiv';\n }\n\n /**\n * Set the div element to show on error\n *\n * @param element selector for the error element\n */\n setErrorElement(element: HTMLElement|JQuery|string): void {\n if (!element) {\n return;\n }\n this.errorElement = element;\n }\n\n /**\n * Detect whether are allowed to use the given default parameter or not\n */\n private useGETDefaultParameter(parameter: string): boolean {\n if (parameter && this.defaultParams) {\n for (let i = 0; i < this.defaultParams.length; i += 1) {\n if (this.defaultParams[i] === parameter) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n /**\n * Removes a default parameter that is usually send automatically along the request.\n *\n * @param parameter A name such as \"period\", \"date\", \"segment\".\n */\n removeDefaultParameter(parameter: string): void {\n if (parameter && this.defaultParams) {\n for (let i = 0; i < this.defaultParams.length; i += 1) {\n if (this.defaultParams[i] === parameter) {\n this.defaultParams.splice(i, 1);\n }\n }\n }\n }\n\n /**\n * Send the request\n */\n send(): void {\n if ($(this.errorElement).length) {\n $(this.errorElement).hide();\n }\n\n if (this.loadingElement) {\n $(this.loadingElement).fadeIn();\n }\n\n this.requestHandle = this.buildAjaxCall();\n globalAjaxQueue.push(this.requestHandle);\n }\n\n /**\n * Aborts the current request if it is (still) running\n */\n abort(): void {\n if (this.requestHandle && typeof this.requestHandle.abort === 'function') {\n this.requestHandle.abort();\n this.requestHandle = null;\n }\n }\n\n /**\n * Builds and sends the ajax requests\n */\n private buildAjaxCall(): JQuery.jqXHR {\n const self = this;\n const parameters = this.mixinDefaultGetParams(this.getParams);\n\n let url = this.getUrl;\n if (url[url.length - 1] !== '?') {\n url += '&';\n }\n\n // we took care of encoding &segment properly already, so we don't use $.param for it ($.param\n // URL encodes the values)\n if (parameters.segment) {\n url = `${url}segment=${parameters.segment}&`;\n delete parameters.segment;\n }\n if (parameters.date) {\n url = `${url}date=${decodeURIComponent(parameters.date.toString())}&`;\n delete parameters.date;\n }\n url += $.param(parameters);\n const ajaxCall = {\n type: 'POST',\n async: true,\n url,\n dataType: this.format || 'json',\n complete: this.completeCallback,\n error: function errorCallback() {\n globalAjaxQueue.active -= 1;\n\n if (self.errorCallback) {\n self.errorCallback.apply(this, arguments); // eslint-disable-line\n }\n },\n success: (response, status, request) => {\n if (this.loadingElement) {\n $(this.loadingElement).hide();\n }\n\n if (response && response.result === 'error' && !this.useRegularCallbackInCaseOfError) {\n let placeAt = null;\n let type = 'toast';\n if ($(this.errorElement).length && response.message) {\n $(this.errorElement).show();\n placeAt = this.errorElement;\n type = null;\n }\n\n if (response.message) {\n const UI = window['require']('piwik/UI'); // eslint-disable-line\n const notification = new UI.Notification();\n notification.show(response.message, {\n placeat: placeAt,\n context: 'error',\n type,\n id: 'ajaxHelper',\n });\n notification.scrollToNotification();\n }\n } else if (this.callback) {\n this.callback(response, status, request);\n }\n\n globalAjaxQueue.active -= 1;\n const { piwik } = window;\n if (piwik\n && piwik.ajaxRequestFinished\n ) {\n piwik.ajaxRequestFinished();\n }\n },\n data: this.mixinDefaultPostParams(this.postParams),\n timeout: this.timeout !== null ? this.timeout : undefined,\n };\n\n return $.ajax(ajaxCall);\n }\n\n private isRequestToApiMethod() {\n return (this.getParams && this.getParams.module === 'API' && this.getParams.method)\n || (this.postParams && this.postParams.module === 'API' && this.postParams.method);\n }\n\n isWidgetizedRequest(): boolean {\n return (broadcast.getValueFromUrl('module') === 'Widgetize');\n }\n\n private getDefaultPostParams() {\n if (this.withToken || this.isRequestToApiMethod() || piwik.shouldPropagateTokenAuth) {\n return {\n token_auth: piwik.token_auth,\n // When viewing a widgetized report there won't be any session that can be used, so don't\n // force session usage\n force_api_session: broadcast.isWidgetizeRequestWithoutSession() ? 0 : 1,\n };\n }\n\n return {};\n }\n\n /**\n * Mixin the default parameters to send as POST\n *\n * @param params parameter object\n */\n private mixinDefaultPostParams(params): Parameters {\n const defaultParams = this.getDefaultPostParams();\n\n const mergedParams = {\n ...defaultParams,\n ...params,\n };\n\n return mergedParams;\n }\n\n /**\n * Mixin the default parameters to send as GET\n *\n * @param params parameter object\n */\n private mixinDefaultGetParams(originalParams): Parameters {\n const segment = PiwikUrl.getSearchParam('segment');\n\n const defaultParams = {\n idSite: piwik.idSite || broadcast.getValueFromUrl('idSite'),\n period: piwik.period || broadcast.getValueFromUrl('period'),\n segment,\n };\n\n const params = originalParams;\n\n // never append token_auth to url\n if (params.token_auth) {\n params.token_auth = null;\n delete params.token_auth;\n }\n\n Object.keys(defaultParams).forEach((key) => {\n if (this.useGETDefaultParameter(key)\n && !params[key]\n && !this.postParams[key]\n && defaultParams[key]\n ) {\n params[key] = defaultParams[key];\n }\n });\n\n // handle default date & period if not already set\n if (this.useGETDefaultParameter('date') && !params.date && !this.postParams.date) {\n params.date = piwik.currentDateString;\n }\n\n return params;\n }\n}\n","import AjaxHelper from './AjaxHelper';\n\ndeclare global {\n interface Window {\n ajaxHelper: AjaxHelper;\n }\n}\n\nwindow.ajaxHelper = AjaxHelper;\n\nfunction ajaxQueue() {\n return globalAjaxQueue;\n}\n\nangular.module('piwikApp.service').service('globalAjaxQueue', ajaxQueue);\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 */\nimport PiwikUrl from './PiwikUrl';\n\nfunction piwikUrl() {\n const model = {\n getSearchParam: PiwikUrl.getSearchParam.bind(PiwikUrl),\n };\n\n return model;\n}\n\npiwikUrl.$inject = [];\n\nangular.module('piwikApp.service').service('piwikUrl', piwikUrl);\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';\nimport './AjaxHelper/AjaxHelper.adapter';\nimport './PiwikUrl/PiwikUrl.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';\nexport { default as AjaxHelper } from './AjaxHelper/AjaxHelper';\nexport { default as PiwikUrl } from './PiwikUrl/PiwikUrl';\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 840356a986..871029fd20 100644
--- a/plugins/CoreHome/vue/dist/CoreHome.umd.min.js
+++ b/plugins/CoreHome/vue/dist/CoreHome.umd.min.js
@@ -1,70 +1,90 @@
-(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])}
+(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(a){if(t[a])return t[a].exports;var n=t[a]={i:a,l:!1,exports:{}};return e[a].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,a){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},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 a=Object.create(null);if(r.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(a,n,function(t){return e[t]}.bind(null,n));return a},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 F})),r.d(t,"ActivityIndicator",(function(){return q})),r.d(t,"translate",(function(){return i})),r.d(t,"alertAdapter",(function(){return G})),r.d(t,"Periods",(function(){return l})),r.d(t,"AjaxHelper",(function(){return O})),r.d(t,"PiwikUrl",(function(){return I})),"undefined"!==typeof window){var a=window.document.currentScript,n=a&&a.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);n&&(r.p=n[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}
+function i(e,t=[]){return _pk_translate(e,t)}function s(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;
+ */class o{constructor(){s(this,"periods",{}),s(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 l=new o;
/*!
* 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}
+ */function d(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 c(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 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
- */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}
+ */class p{constructor(e){h(this,"dateInPeriod",void 0),this.dateInPeriod=e}static parse(e){return new p(c(e))}static getDisplayText(){return i("Intl_PeriodDay")}getPrettyString(){return d(this.dateInPeriod)}getDateRange(){return[new Date(this.dateInPeriod.getTime()),new Date(this.dateInPeriod.getTime())]}containsToday(){return g(this.getDateRange())}}function m(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}
+ */l.addCustomPeriod("day",p);class f{constructor(e){m(this,"dateInPeriod",void 0),this.dateInPeriod=e}static parse(e){return new f(c(e))}static getDisplayText(){return i("Intl_PeriodWeek")}getPrettyString(){const e=this.getDateRange(),t=d(e[0]),r=d(e[1]);return i("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 b(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}
+ */l.addCustomPeriod("week",f);class w{constructor(e){b(this,"dateInPeriod",void 0),this.dateInPeriod=e}static parse(e){return new w(c(e))}static getDisplayText(){return i("Intl_PeriodMonth")}getPrettyString(){const e=i("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 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("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}
+ */l.addCustomPeriod("month",w);class y{constructor(e){P(this,"dateInPeriod",void 0),this.dateInPeriod=e}static parse(e){return new y(c(e))}static getDisplayText(){return i("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 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("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),
+ */l.addCustomPeriod("year",y);class k{constructor(e,t,r){D(this,"startDate",void 0),D(this,"endDate",void 0),D(this,"childPeriodType",void 0),this.startDate=e,this.endDate=t,this.childPeriodType=r}static getLastNRange(e,t,r){const a=Math.max(parseInt(t.toString(),10)-1,0);if(Number.isNaN(a))throw new Error("Invalid range strAmount");let n=r?c(r):u(),i=new Date(n.getTime());if("day"===e)i.setDate(i.getDate()-a);else if("week"===e)i.setDate(i.getDate()-7*a);else if("month"===e)i.setDate(1),i.setMonth(i.getMonth()-a);else{if("year"!==e)throw new Error(`Unknown period type '${e}'.`);i.setFullYear(i.getFullYear()-a)}if("day"!==e){const t=l.periods[e].parse(i),r=l.periods[e].parse(n);[i]=t.getDateRange(),[,n]=r.getDateRange()}const s=new Date(1991,7,6);if(i.getTime()-s.getTime()<0)switch(e){case"year":i=new Date(1992,0,1);break;case"month":i=new Date(1991,8,1);break;case"week":i=new Date(1991,8,12);break;case"day":default:i=s;break}return new k(i,n,e)}static parse(e,t="day"){if(/^previous/.test(e)){const r=k.getLastNRange(t,"2").startDate;return k.getLastNRange(t,e.substring(8),r)}if(/^last/.test(e))return k.getLastNRange(t,e.substring(4));const r=decodeURIComponent(e).split(",");return new k(c(r[0]),c(r[1]),t)}static getDisplayText(){return i("General_DateRangeInPeriodList")}getPrettyString(){const e=d(this.startDate),t=d(this.endDate);return i("General_DateRangeFromTo",[e,t])}getDateRange(){return[this.startDate,this.endDate]}containsToday(){return g(this.getDateRange())}}function v(){return{getAllLabels:l.getAllLabels.bind(l),isRecognizedPeriod:l.isRecognizedPeriod.bind(l),get:l.get.bind(l),parse:l.parse.bind(l),parseDate:c,format:d,RangePeriod:k,todayIsInRange:g}}l.addCustomPeriod("range",k),
/*!
* 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;
+piwik.addCustomPeriod=l.addCustomPeriod.bind(l),angular.module("piwikApp.service").factory("piwikPeriods",v);
/*!
* 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;
+ */
+const j={getSearchParam(e){const t=window.location.href.split("#"),r=new RegExp(e+"(\\[]|=)");if(t&&t[1]&&r.test(decodeURIComponent(t[1]))){const t=broadcast.getValueFromHash(e,window.location.href);if(t||"date"!==e&&"period"!==e&&"idSite"!==e)return t}return broadcast.getValueFromUrl(e,window.location.search)}};var I=j;function T(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
+ */function x(e,t){if("abort"===t)return;const r=$("#loadingError");Piwik_Popover.isOpen()&&e&&500===e.status?e&&500===e.status&&$(document.body).html(piwikHelper.escape(e.responseText)):r.show()}window.globalAjaxQueue=[],window.globalAjaxQueue.active=0,window.globalAjaxQueue.clean=function(){for(let e=this.length;e>=0;e-=1)this[e]&&4!==this[e].readyState||this.splice(e,1)},window.globalAjaxQueue.push=function(...e){return this.active+=e.length,this.clean(),Array.prototype.push.call(this,...e)},window.globalAjaxQueue.abort=function(){this.forEach(e=>e&&e.abort&&e.abort()),this.splice(0,this.length),this.active=0};class O{constructor(){T(this,"format","json"),T(this,"timeout",null),T(this,"callback",null),T(this,"useRegularCallbackInCaseOfError",!1),T(this,"errorCallback",void 0),T(this,"withToken",!1),T(this,"completeCallback",void 0),T(this,"getParams",{}),T(this,"getUrl","?"),T(this,"postParams",{}),T(this,"loadingElement",null),T(this,"errorElement","#ajaxError"),T(this,"requestHandle",null),T(this,"defaultParams",["idSite","period","date","segment"]),this.errorCallback=x}addParams(e,t){"string"===typeof e&&(e=window["broadcast"].getValuesFromUrl(e));const r=["compareSegments","comparePeriods","compareDates"];Object.keys(e).forEach(a=>{const n=e[a];(-1===r.indexOf(a)||n)&&("get"===t.toLowerCase()?this.getParams[a]=n:"post"===t.toLowerCase()&&(this.postParams[a]=n))})}withTokenInUrl(){this.withToken=!0}setUrl(e){this.addParams(broadcast.getValuesFromUrl(e),"GET")}setBulkRequests(...e){const t=e.map(e=>$.param(e));this.addParams({module:"API",method:"API.getBulkRequest",urls:t,format:"json"},"post")}setTimeout(e){this.timeout=e}setCallback(e){this.callback=e}useCallbackInCaseOfError(){this.useRegularCallbackInCaseOfError=!0}redirectOnSuccess(e){this.setCallback(()=>{piwikHelper.redirect(e)})}setErrorCallback(e){this.errorCallback=e}setCompleteCallback(e){this.completeCallback=e}setFormat(e){this.format=e}setLoadingElement(e){this.loadingElement=e||"#ajaxLoadingDiv"}setErrorElement(e){e&&(this.errorElement=e)}useGETDefaultParameter(e){if(e&&this.defaultParams)for(let t=0;t<this.defaultParams.length;t+=1)if(this.defaultParams[t]===e)return!0;return!1}removeDefaultParameter(e){if(e&&this.defaultParams)for(let t=0;t<this.defaultParams.length;t+=1)this.defaultParams[t]===e&&this.defaultParams.splice(t,1)}send(){$(this.errorElement).length&&$(this.errorElement).hide(),this.loadingElement&&$(this.loadingElement).fadeIn(),this.requestHandle=this.buildAjaxCall(),globalAjaxQueue.push(this.requestHandle)}abort(){this.requestHandle&&"function"===typeof this.requestHandle.abort&&(this.requestHandle.abort(),this.requestHandle=null)}buildAjaxCall(){const e=this,t=this.mixinDefaultGetParams(this.getParams);let r=this.getUrl;"?"!==r[r.length-1]&&(r+="&"),t.segment&&(r=`${r}segment=${t.segment}&`,delete t.segment),t.date&&(r=`${r}date=${decodeURIComponent(t.date.toString())}&`,delete t.date),r+=$.param(t);const a={type:"POST",async:!0,url:r,dataType:this.format||"json",complete:this.completeCallback,error:function(){globalAjaxQueue.active-=1,e.errorCallback&&e.errorCallback.apply(this,arguments)},success:(e,t,r)=>{if(this.loadingElement&&$(this.loadingElement).hide(),e&&"error"===e.result&&!this.useRegularCallbackInCaseOfError){let t=null,r="toast";if($(this.errorElement).length&&e.message&&($(this.errorElement).show(),t=this.errorElement,r=null),e.message){const a=window["require"]("piwik/UI"),n=new a.Notification;n.show(e.message,{placeat:t,context:"error",type:r,id:"ajaxHelper"}),n.scrollToNotification()}}else this.callback&&this.callback(e,t,r);globalAjaxQueue.active-=1;const{piwik:a}=window;a&&a.ajaxRequestFinished&&a.ajaxRequestFinished()},data:this.mixinDefaultPostParams(this.postParams),timeout:null!==this.timeout?this.timeout:void 0};return $.ajax(a)}isRequestToApiMethod(){return this.getParams&&"API"===this.getParams.module&&this.getParams.method||this.postParams&&"API"===this.postParams.module&&this.postParams.method}isWidgetizedRequest(){return"Widgetize"===broadcast.getValueFromUrl("module")}getDefaultPostParams(){return this.withToken||this.isRequestToApiMethod()||piwik.shouldPropagateTokenAuth?{token_auth:piwik.token_auth,force_api_session:broadcast.isWidgetizeRequestWithoutSession()?0:1}:{}}mixinDefaultPostParams(e){const t=this.getDefaultPostParams(),r={...t,...e};return r}mixinDefaultGetParams(e){const t=I.getSearchParam("segment"),r={idSite:piwik.idSite||broadcast.getValueFromUrl("idSite"),period:piwik.period||broadcast.getValueFromUrl("period"),segment:t},a=e;return a.token_auth&&(a.token_auth=null,delete a.token_auth),Object.keys(r).forEach(e=>{this.useGETDefaultParameter(e)&&!a[e]&&!this.postParams[e]&&r[e]&&(a[e]=r[e])}),!this.useGETDefaultParameter("date")||a.date||this.postParams.date||(a.date=piwik.currentDateString),a}}function A(){return globalAjaxQueue}
+/*!
+ * 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(){const e={getSearchParam:I.getSearchParam.bind(I)};return e}window.ajaxHelper=O,angular.module("piwikApp.service").service("globalAjaxQueue",A),C.$inject=[],angular.module("piwikApp.service").service("piwikUrl",C);var R=r("8bbf");const E={class:"loadingPiwik"},S=Object(R["createElementVNode"])("img",{src:"plugins/Morpheus/images/loading-blue.gif",alt:""},null,-1);function M(e,t,r,a,n,i){return Object(R["withDirectives"])((Object(R["openBlock"])(),Object(R["createElementBlock"])("div",E,[S,Object(R["createElementVNode"])("span",null,Object(R["toDisplayString"])(e.loadingMessage),1)],512)),[[R["vShow"],e.loading]])}var _=Object(R["defineComponent"])({props:{loading:{type:Boolean,required:!0,default:!1},loadingMessage:{type:String,required:!1,default:i("General_LoadingData")}}});_.render=M;var q=_;
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */function F(){return{restrict:"A",scope:{loading:"<",loadingMessage:"<"},template:"",link:function(e,t){const r=Object(R["createApp"])({template:'<activity-indicator :loading="loading" :loadingMessage="loadingMessage"/>',data(){return{loading:e.loading,loadingMessage:e.loadingMessage}}});r.component("activity-indicator",q);const a=r.mount(t[0]);e.$watch("loading",e=>{a.loading=e}),e.$watch("loadingMessage",e=>{a.loadingMessage=e||i("General_LoadingData")})}}}function H(e,t,r,a,n,i){return Object(R["openBlock"])(),Object(R["createElementBlock"])("div",{class:Object(R["normalizeClass"])(["alert",{["alert-"+e.severity]:!0}])},[Object(R["renderSlot"])(e.$slots,"default")],2)}F.$inject=[],angular.module("piwikApp").directive("piwikActivityIndicator",F);var U=Object(R["defineComponent"])({props:{severity:{type:String,required:!0}}});U.render=H;var L=U;
/*!
* 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)}})}));
+ */function G(){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]"),a=Object(R["createApp"])({template:'<alert :severity="severity"><div ref="transcludeTarget"/></alert>',data(){return{severity:e.severity}},setup(){const e=Object(R["ref"])(null);return{transcludeTarget:e}}});a.component("alert",L);const n=a.mount(t[0]);e.$watch("severity",e=>{n.severity=e}),$(n.transcludeTarget).append(r)}}}}}G.$inject=[],angular.module("piwikApp").directive("piwikAlert",G)}})}));
//# 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 2bdc50eeae..51235694b3 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/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
+{"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/PiwikUrl/PiwikUrl.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.adapter.ts","webpack://CoreHome/./plugins/CoreHome/vue/src/PiwikUrl/PiwikUrl.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","PiwikUrl","paramName","hash","location","href","regex","RegExp","valueFromHash","broadcast","getValueFromHash","getValueFromUrl","search","defaultErrorCallback","deferred","status","loadingError","Piwik_Popover","isOpen","body","html","piwikHelper","escape","responseText","show","globalAjaxQueue","active","clean","readyState","splice","args","abort","forEach","x","errorCallback","params","type","getValuesFromUrl","arrayParams","keys","indexOf","toLowerCase","getParams","postParams","withToken","url","addParams","urls","urlsProcessed","map","u","param","method","timeout","callback","useRegularCallbackInCaseOfError","setCallback","redirect","completeCallback","element","loadingElement","errorElement","parameter","defaultParams","hide","fadeIn","requestHandle","buildAjaxCall","parameters","mixinDefaultGetParams","getUrl","segment","ajaxCall","async","dataType","complete","apply","arguments","success","response","request","result","placeAt","UI","notification","Notification","placeat","context","id","scrollToNotification","ajaxRequestFinished","data","mixinDefaultPostParams","undefined","ajax","isRequestToApiMethod","shouldPropagateTokenAuth","token_auth","force_api_session","isWidgetizeRequestWithoutSession","getDefaultPostParams","mergedParams","originalParams","getSearchParam","idSite","period","useGETDefaultParameter","currentDateString","ajaxQueue","piwikUrl","model","ajaxHelper","service","$inject","class","alt","loadingMessage","loading","props","Boolean","required","default","String","render","activityIndicatorAdapter","restrict","scope","template","link","app","component","ActivityIndicator","vm","mount","$watch","newValue","severity","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/**\n * Similar to angulars $location but works around some limitation. Use it if you need to access\n * search params\n */\nconst PiwikUrl = {\n getSearchParam(paramName: string): string {\n const hash = window.location.href.split('#');\n\n const regex = new RegExp(`${paramName}(\\\\[]|=)`);\n if (hash && hash[1] && regex.test(decodeURIComponent(hash[1]))) {\n const valueFromHash = broadcast.getValueFromHash(paramName, window.location.href);\n\n // for date, period and idsite fall back to parameter from url, if non in hash was provided\n if (valueFromHash\n || (paramName !== 'date' && paramName !== 'period' && paramName !== 'idSite')\n ) {\n return valueFromHash;\n }\n }\n\n return broadcast.getValueFromUrl(paramName, window.location.search);\n },\n};\n\nexport default PiwikUrl;\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 PiwikUrl from '../PiwikUrl/PiwikUrl';\n\nwindow.globalAjaxQueue = [] as GlobalAjaxQueue;\nwindow.globalAjaxQueue.active = 0;\n\nwindow.globalAjaxQueue.clean = function globalAjaxQueueClean() {\n for (let i = this.length; i >= 0; i -= 1) {\n if (!this[i] || this[i].readyState === 4) {\n this.splice(i, 1);\n }\n }\n};\n\nwindow.globalAjaxQueue.push = function globalAjaxQueuePush(...args: (XMLHttpRequest|null)[]) {\n this.active += args.length;\n\n // cleanup ajax queue\n this.clean();\n\n // call original array push\n return Array.prototype.push.call(this, ...args);\n};\n\nwindow.globalAjaxQueue.abort = function globalAjaxQueueAbort() {\n // abort all queued requests if possible\n this.forEach((x) => x && x.abort && x.abort());\n\n // remove all elements from array\n this.splice(0, this.length);\n\n this.active = 0;\n};\n\ntype ParameterValue = string | number | null | undefined | ParameterValue[];\ntype Parameters = {[name: string]: ParameterValue | Parameters};\ntype AnyFunction = (...params:any[]) => any; // eslint-disable-line\n\n/**\n * error callback to use by default\n */\nfunction defaultErrorCallback(deferred: XMLHttpRequest, status: string): void {\n // do not display error message if request was aborted\n if (status === 'abort') {\n return;\n }\n\n const loadingError = $('#loadingError');\n if (Piwik_Popover.isOpen() && deferred && deferred.status === 500) {\n if (deferred && deferred.status === 500) {\n $(document.body).html(piwikHelper.escape(deferred.responseText));\n }\n } else {\n loadingError.show();\n }\n}\n\n/**\n * Global ajax helper to handle requests within piwik\n */\nexport default class AjaxHelper {\n /**\n * Format of response\n */\n format = 'json';\n\n /**\n * A timeout for the request which will override any global timeout\n */\n timeout = null;\n\n /**\n * Callback function to be executed on success\n */\n callback: AnyFunction = null;\n\n /**\n * Use this.callback if an error is returned\n */\n useRegularCallbackInCaseOfError = false;\n\n /**\n * Callback function to be executed on error\n */\n errorCallback: AnyFunction;\n\n withToken = false;\n\n /**\n * Callback function to be executed on complete (after error or success)\n */\n completeCallback: AnyFunction;\n\n /**\n * Params to be passed as GET params\n * @see ajaxHelper.mixinDefaultGetParams\n */\n getParams: Parameters = {};\n\n /**\n * Base URL used in the AJAX request. Can be set by setUrl.\n *\n * It is set to '?' rather than 'index.php?' to increase chances that it works\n * including for users who have an automatic 301 redirection from index.php? to ?\n * POST values are missing when there is such 301 redirection. So by by-passing\n * this 301 redirection, we avoid this issue.\n *\n * @see ajaxHelper.setUrl\n */\n getUrl = '?';\n\n /**\n * Params to be passed as GET params\n * @see ajaxHelper.mixinDefaultPostParams\n */\n postParams: Parameters = {};\n\n /**\n * Element to be displayed while loading\n */\n loadingElement: HTMLElement|null|JQuery|JQLite|string = null;\n\n /**\n * Element to be displayed on error\n */\n errorElement: HTMLElement|JQuery|JQLite|string = '#ajaxError';\n\n /**\n * Handle for current request\n */\n requestHandle: XMLHttpRequest|JQuery.jqXHR|null = null;\n\n defaultParams = ['idSite', 'period', 'date', 'segment'];\n\n constructor() {\n this.errorCallback = defaultErrorCallback;\n }\n\n /**\n * Adds params to the request.\n * If params are given more then once, the latest given value is used for the request\n *\n * @param params\n * @param type type of given parameters (POST or GET)\n * @return {void}\n */\n addParams(params: Parameters|string, type: string): void {\n if (typeof params === 'string') {\n // TODO: add global types for broadcast (multiple uses below)\n params = window['broadcast'].getValuesFromUrl(params); // eslint-disable-line\n }\n\n const arrayParams = ['compareSegments', 'comparePeriods', 'compareDates'];\n Object.keys(params).forEach((key) => {\n const value = params[key];\n if (arrayParams.indexOf(key) !== -1\n && !value\n ) {\n return;\n }\n\n if (type.toLowerCase() === 'get') {\n this.getParams[key] = value;\n } else if (type.toLowerCase() === 'post') {\n this.postParams[key] = value;\n }\n });\n }\n\n withTokenInUrl(): void {\n this.withToken = true;\n }\n\n /**\n * Sets the base URL to use in the AJAX request.\n */\n setUrl(url: string): void {\n this.addParams(broadcast.getValuesFromUrl(url), 'GET');\n }\n\n /**\n * Gets this helper instance ready to send a bulk request. Each argument to this\n * function is a single request to use.\n */\n setBulkRequests(...urls: string[]): void {\n const urlsProcessed = urls.map((u) => $.param(u));\n\n this.addParams({\n module: 'API',\n method: 'API.getBulkRequest',\n urls: urlsProcessed,\n format: 'json',\n }, 'post');\n }\n\n /**\n * Set a timeout (in milliseconds) for the request. This will override any global timeout.\n *\n * @param timeout Timeout in milliseconds\n */\n setTimeout(timeout: number): void {\n this.timeout = timeout;\n }\n\n /**\n * Sets the callback called after the request finishes\n *\n * @param callback Callback function\n */\n setCallback(callback: AnyFunction): void {\n this.callback = callback;\n }\n\n /**\n * Set that the callback passed to setCallback() should be used if an application error (i.e. an\n * Exception in PHP) is returned.\n */\n useCallbackInCaseOfError(): void {\n this.useRegularCallbackInCaseOfError = true;\n }\n\n /**\n * Set callback to redirect on success handler\n * &update=1(+x) will be appended to the current url\n *\n * @param [params] to modify in redirect url\n * @return {void}\n */\n redirectOnSuccess(params: Parameters): void {\n this.setCallback(() => {\n piwikHelper.redirect(params);\n });\n }\n\n /**\n * Sets the callback called in case of an error within the request\n */\n setErrorCallback(callback: AnyFunction): void {\n this.errorCallback = callback;\n }\n\n /**\n * Sets the complete callback which is called after an error or success callback.\n */\n setCompleteCallback(callback: AnyFunction): void {\n this.completeCallback = callback;\n }\n\n /**\n * Sets the response format for the request\n *\n * @param format response format (e.g. json, html, ...)\n */\n setFormat(format: string): void {\n this.format = format;\n }\n\n /**\n * Set the div element to show while request is loading\n *\n * @param [element] selector for the loading element\n */\n setLoadingElement(element: string|HTMLElement|JQuery): void {\n this.loadingElement = element || '#ajaxLoadingDiv';\n }\n\n /**\n * Set the div element to show on error\n *\n * @param element selector for the error element\n */\n setErrorElement(element: HTMLElement|JQuery|string): void {\n if (!element) {\n return;\n }\n this.errorElement = element;\n }\n\n /**\n * Detect whether are allowed to use the given default parameter or not\n */\n private useGETDefaultParameter(parameter: string): boolean {\n if (parameter && this.defaultParams) {\n for (let i = 0; i < this.defaultParams.length; i += 1) {\n if (this.defaultParams[i] === parameter) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n /**\n * Removes a default parameter that is usually send automatically along the request.\n *\n * @param parameter A name such as \"period\", \"date\", \"segment\".\n */\n removeDefaultParameter(parameter: string): void {\n if (parameter && this.defaultParams) {\n for (let i = 0; i < this.defaultParams.length; i += 1) {\n if (this.defaultParams[i] === parameter) {\n this.defaultParams.splice(i, 1);\n }\n }\n }\n }\n\n /**\n * Send the request\n */\n send(): void {\n if ($(this.errorElement).length) {\n $(this.errorElement).hide();\n }\n\n if (this.loadingElement) {\n $(this.loadingElement).fadeIn();\n }\n\n this.requestHandle = this.buildAjaxCall();\n globalAjaxQueue.push(this.requestHandle);\n }\n\n /**\n * Aborts the current request if it is (still) running\n */\n abort(): void {\n if (this.requestHandle && typeof this.requestHandle.abort === 'function') {\n this.requestHandle.abort();\n this.requestHandle = null;\n }\n }\n\n /**\n * Builds and sends the ajax requests\n */\n private buildAjaxCall(): JQuery.jqXHR {\n const self = this;\n const parameters = this.mixinDefaultGetParams(this.getParams);\n\n let url = this.getUrl;\n if (url[url.length - 1] !== '?') {\n url += '&';\n }\n\n // we took care of encoding &segment properly already, so we don't use $.param for it ($.param\n // URL encodes the values)\n if (parameters.segment) {\n url = `${url}segment=${parameters.segment}&`;\n delete parameters.segment;\n }\n if (parameters.date) {\n url = `${url}date=${decodeURIComponent(parameters.date.toString())}&`;\n delete parameters.date;\n }\n url += $.param(parameters);\n const ajaxCall = {\n type: 'POST',\n async: true,\n url,\n dataType: this.format || 'json',\n complete: this.completeCallback,\n error: function errorCallback() {\n globalAjaxQueue.active -= 1;\n\n if (self.errorCallback) {\n self.errorCallback.apply(this, arguments); // eslint-disable-line\n }\n },\n success: (response, status, request) => {\n if (this.loadingElement) {\n $(this.loadingElement).hide();\n }\n\n if (response && response.result === 'error' && !this.useRegularCallbackInCaseOfError) {\n let placeAt = null;\n let type = 'toast';\n if ($(this.errorElement).length && response.message) {\n $(this.errorElement).show();\n placeAt = this.errorElement;\n type = null;\n }\n\n if (response.message) {\n const UI = window['require']('piwik/UI'); // eslint-disable-line\n const notification = new UI.Notification();\n notification.show(response.message, {\n placeat: placeAt,\n context: 'error',\n type,\n id: 'ajaxHelper',\n });\n notification.scrollToNotification();\n }\n } else if (this.callback) {\n this.callback(response, status, request);\n }\n\n globalAjaxQueue.active -= 1;\n const { piwik } = window;\n if (piwik\n && piwik.ajaxRequestFinished\n ) {\n piwik.ajaxRequestFinished();\n }\n },\n data: this.mixinDefaultPostParams(this.postParams),\n timeout: this.timeout !== null ? this.timeout : undefined,\n };\n\n return $.ajax(ajaxCall);\n }\n\n private isRequestToApiMethod() {\n return (this.getParams && this.getParams.module === 'API' && this.getParams.method)\n || (this.postParams && this.postParams.module === 'API' && this.postParams.method);\n }\n\n isWidgetizedRequest(): boolean {\n return (broadcast.getValueFromUrl('module') === 'Widgetize');\n }\n\n private getDefaultPostParams() {\n if (this.withToken || this.isRequestToApiMethod() || piwik.shouldPropagateTokenAuth) {\n return {\n token_auth: piwik.token_auth,\n // When viewing a widgetized report there won't be any session that can be used, so don't\n // force session usage\n force_api_session: broadcast.isWidgetizeRequestWithoutSession() ? 0 : 1,\n };\n }\n\n return {};\n }\n\n /**\n * Mixin the default parameters to send as POST\n *\n * @param params parameter object\n */\n private mixinDefaultPostParams(params): Parameters {\n const defaultParams = this.getDefaultPostParams();\n\n const mergedParams = {\n ...defaultParams,\n ...params,\n };\n\n return mergedParams;\n }\n\n /**\n * Mixin the default parameters to send as GET\n *\n * @param params parameter object\n */\n private mixinDefaultGetParams(originalParams): Parameters {\n const segment = PiwikUrl.getSearchParam('segment');\n\n const defaultParams = {\n idSite: piwik.idSite || broadcast.getValueFromUrl('idSite'),\n period: piwik.period || broadcast.getValueFromUrl('period'),\n segment,\n };\n\n const params = originalParams;\n\n // never append token_auth to url\n if (params.token_auth) {\n params.token_auth = null;\n delete params.token_auth;\n }\n\n Object.keys(defaultParams).forEach((key) => {\n if (this.useGETDefaultParameter(key)\n && !params[key]\n && !this.postParams[key]\n && defaultParams[key]\n ) {\n params[key] = defaultParams[key];\n }\n });\n\n // handle default date & period if not already set\n if (this.useGETDefaultParameter('date') && !params.date && !this.postParams.date) {\n params.date = piwik.currentDateString;\n }\n\n return params;\n }\n}\n","import AjaxHelper from './AjaxHelper';\n\ndeclare global {\n interface Window {\n ajaxHelper: AjaxHelper;\n }\n}\n\nwindow.ajaxHelper = AjaxHelper;\n\nfunction ajaxQueue() {\n return globalAjaxQueue;\n}\n\nangular.module('piwikApp.service').service('globalAjaxQueue', ajaxQueue);\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 */\nimport PiwikUrl from './PiwikUrl';\n\nfunction piwikUrl() {\n const model = {\n getSearchParam: PiwikUrl.getSearchParam.bind(PiwikUrl),\n };\n\n return model;\n}\n\npiwikUrl.$inject = [];\n\nangular.module('piwikApp.service').service('piwikUrl', piwikUrl);\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/AjaxHelper/AjaxHelper.adapter.ts b/plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.adapter.ts
new file mode 100644
index 0000000000..c960a42130
--- /dev/null
+++ b/plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.adapter.ts
@@ -0,0 +1,15 @@
+import AjaxHelper from './AjaxHelper';
+
+declare global {
+ interface Window {
+ ajaxHelper: AjaxHelper;
+ }
+}
+
+window.ajaxHelper = AjaxHelper;
+
+function ajaxQueue() {
+ return globalAjaxQueue;
+}
+
+angular.module('piwikApp.service').service('globalAjaxQueue', ajaxQueue);
diff --git a/plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.ts b/plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.ts
new file mode 100644
index 0000000000..788f3a8f45
--- /dev/null
+++ b/plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.ts
@@ -0,0 +1,498 @@
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+import PiwikUrl from '../PiwikUrl/PiwikUrl';
+
+window.globalAjaxQueue = [] as GlobalAjaxQueue;
+window.globalAjaxQueue.active = 0;
+
+window.globalAjaxQueue.clean = function globalAjaxQueueClean() {
+ for (let i = this.length; i >= 0; i -= 1) {
+ if (!this[i] || this[i].readyState === 4) {
+ this.splice(i, 1);
+ }
+ }
+};
+
+window.globalAjaxQueue.push = function globalAjaxQueuePush(...args: (XMLHttpRequest|null)[]) {
+ this.active += args.length;
+
+ // cleanup ajax queue
+ this.clean();
+
+ // call original array push
+ return Array.prototype.push.call(this, ...args);
+};
+
+window.globalAjaxQueue.abort = function globalAjaxQueueAbort() {
+ // abort all queued requests if possible
+ this.forEach((x) => x && x.abort && x.abort());
+
+ // remove all elements from array
+ this.splice(0, this.length);
+
+ this.active = 0;
+};
+
+type ParameterValue = string | number | null | undefined | ParameterValue[];
+type Parameters = {[name: string]: ParameterValue | Parameters};
+type AnyFunction = (...params:any[]) => any; // eslint-disable-line
+
+/**
+ * error callback to use by default
+ */
+function defaultErrorCallback(deferred: XMLHttpRequest, status: string): void {
+ // do not display error message if request was aborted
+ if (status === 'abort') {
+ return;
+ }
+
+ const loadingError = $('#loadingError');
+ if (Piwik_Popover.isOpen() && deferred && deferred.status === 500) {
+ if (deferred && deferred.status === 500) {
+ $(document.body).html(piwikHelper.escape(deferred.responseText));
+ }
+ } else {
+ loadingError.show();
+ }
+}
+
+/**
+ * Global ajax helper to handle requests within piwik
+ */
+export default class AjaxHelper {
+ /**
+ * Format of response
+ */
+ format = 'json';
+
+ /**
+ * A timeout for the request which will override any global timeout
+ */
+ timeout = null;
+
+ /**
+ * Callback function to be executed on success
+ */
+ callback: AnyFunction = null;
+
+ /**
+ * Use this.callback if an error is returned
+ */
+ useRegularCallbackInCaseOfError = false;
+
+ /**
+ * Callback function to be executed on error
+ */
+ errorCallback: AnyFunction;
+
+ withToken = false;
+
+ /**
+ * Callback function to be executed on complete (after error or success)
+ */
+ completeCallback: AnyFunction;
+
+ /**
+ * Params to be passed as GET params
+ * @see ajaxHelper.mixinDefaultGetParams
+ */
+ getParams: Parameters = {};
+
+ /**
+ * Base URL used in the AJAX request. Can be set by setUrl.
+ *
+ * It is set to '?' rather than 'index.php?' to increase chances that it works
+ * including for users who have an automatic 301 redirection from index.php? to ?
+ * POST values are missing when there is such 301 redirection. So by by-passing
+ * this 301 redirection, we avoid this issue.
+ *
+ * @see ajaxHelper.setUrl
+ */
+ getUrl = '?';
+
+ /**
+ * Params to be passed as GET params
+ * @see ajaxHelper.mixinDefaultPostParams
+ */
+ postParams: Parameters = {};
+
+ /**
+ * Element to be displayed while loading
+ */
+ loadingElement: HTMLElement|null|JQuery|JQLite|string = null;
+
+ /**
+ * Element to be displayed on error
+ */
+ errorElement: HTMLElement|JQuery|JQLite|string = '#ajaxError';
+
+ /**
+ * Handle for current request
+ */
+ requestHandle: XMLHttpRequest|JQuery.jqXHR|null = null;
+
+ defaultParams = ['idSite', 'period', 'date', 'segment'];
+
+ constructor() {
+ this.errorCallback = defaultErrorCallback;
+ }
+
+ /**
+ * Adds params to the request.
+ * If params are given more then once, the latest given value is used for the request
+ *
+ * @param params
+ * @param type type of given parameters (POST or GET)
+ * @return {void}
+ */
+ addParams(params: Parameters|string, type: string): void {
+ if (typeof params === 'string') {
+ // TODO: add global types for broadcast (multiple uses below)
+ params = window['broadcast'].getValuesFromUrl(params); // eslint-disable-line
+ }
+
+ const arrayParams = ['compareSegments', 'comparePeriods', 'compareDates'];
+ Object.keys(params).forEach((key) => {
+ const value = params[key];
+ if (arrayParams.indexOf(key) !== -1
+ && !value
+ ) {
+ return;
+ }
+
+ if (type.toLowerCase() === 'get') {
+ this.getParams[key] = value;
+ } else if (type.toLowerCase() === 'post') {
+ this.postParams[key] = value;
+ }
+ });
+ }
+
+ withTokenInUrl(): void {
+ this.withToken = true;
+ }
+
+ /**
+ * Sets the base URL to use in the AJAX request.
+ */
+ setUrl(url: string): void {
+ this.addParams(broadcast.getValuesFromUrl(url), 'GET');
+ }
+
+ /**
+ * Gets this helper instance ready to send a bulk request. Each argument to this
+ * function is a single request to use.
+ */
+ setBulkRequests(...urls: string[]): void {
+ const urlsProcessed = urls.map((u) => $.param(u));
+
+ this.addParams({
+ module: 'API',
+ method: 'API.getBulkRequest',
+ urls: urlsProcessed,
+ format: 'json',
+ }, 'post');
+ }
+
+ /**
+ * Set a timeout (in milliseconds) for the request. This will override any global timeout.
+ *
+ * @param timeout Timeout in milliseconds
+ */
+ setTimeout(timeout: number): void {
+ this.timeout = timeout;
+ }
+
+ /**
+ * Sets the callback called after the request finishes
+ *
+ * @param callback Callback function
+ */
+ setCallback(callback: AnyFunction): void {
+ this.callback = callback;
+ }
+
+ /**
+ * Set that the callback passed to setCallback() should be used if an application error (i.e. an
+ * Exception in PHP) is returned.
+ */
+ useCallbackInCaseOfError(): void {
+ this.useRegularCallbackInCaseOfError = true;
+ }
+
+ /**
+ * Set callback to redirect on success handler
+ * &update=1(+x) will be appended to the current url
+ *
+ * @param [params] to modify in redirect url
+ * @return {void}
+ */
+ redirectOnSuccess(params: Parameters): void {
+ this.setCallback(() => {
+ piwikHelper.redirect(params);
+ });
+ }
+
+ /**
+ * Sets the callback called in case of an error within the request
+ */
+ setErrorCallback(callback: AnyFunction): void {
+ this.errorCallback = callback;
+ }
+
+ /**
+ * Sets the complete callback which is called after an error or success callback.
+ */
+ setCompleteCallback(callback: AnyFunction): void {
+ this.completeCallback = callback;
+ }
+
+ /**
+ * Sets the response format for the request
+ *
+ * @param format response format (e.g. json, html, ...)
+ */
+ setFormat(format: string): void {
+ this.format = format;
+ }
+
+ /**
+ * Set the div element to show while request is loading
+ *
+ * @param [element] selector for the loading element
+ */
+ setLoadingElement(element: string|HTMLElement|JQuery): void {
+ this.loadingElement = element || '#ajaxLoadingDiv';
+ }
+
+ /**
+ * Set the div element to show on error
+ *
+ * @param element selector for the error element
+ */
+ setErrorElement(element: HTMLElement|JQuery|string): void {
+ if (!element) {
+ return;
+ }
+ this.errorElement = element;
+ }
+
+ /**
+ * Detect whether are allowed to use the given default parameter or not
+ */
+ private useGETDefaultParameter(parameter: string): boolean {
+ if (parameter && this.defaultParams) {
+ for (let i = 0; i < this.defaultParams.length; i += 1) {
+ if (this.defaultParams[i] === parameter) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Removes a default parameter that is usually send automatically along the request.
+ *
+ * @param parameter A name such as "period", "date", "segment".
+ */
+ removeDefaultParameter(parameter: string): void {
+ if (parameter && this.defaultParams) {
+ for (let i = 0; i < this.defaultParams.length; i += 1) {
+ if (this.defaultParams[i] === parameter) {
+ this.defaultParams.splice(i, 1);
+ }
+ }
+ }
+ }
+
+ /**
+ * Send the request
+ */
+ send(): void {
+ if ($(this.errorElement).length) {
+ $(this.errorElement).hide();
+ }
+
+ if (this.loadingElement) {
+ $(this.loadingElement).fadeIn();
+ }
+
+ this.requestHandle = this.buildAjaxCall();
+ globalAjaxQueue.push(this.requestHandle);
+ }
+
+ /**
+ * Aborts the current request if it is (still) running
+ */
+ abort(): void {
+ if (this.requestHandle && typeof this.requestHandle.abort === 'function') {
+ this.requestHandle.abort();
+ this.requestHandle = null;
+ }
+ }
+
+ /**
+ * Builds and sends the ajax requests
+ */
+ private buildAjaxCall(): JQuery.jqXHR {
+ const self = this;
+ const parameters = this.mixinDefaultGetParams(this.getParams);
+
+ let url = this.getUrl;
+ if (url[url.length - 1] !== '?') {
+ url += '&';
+ }
+
+ // we took care of encoding &segment properly already, so we don't use $.param for it ($.param
+ // URL encodes the values)
+ if (parameters.segment) {
+ url = `${url}segment=${parameters.segment}&`;
+ delete parameters.segment;
+ }
+ if (parameters.date) {
+ url = `${url}date=${decodeURIComponent(parameters.date.toString())}&`;
+ delete parameters.date;
+ }
+ url += $.param(parameters);
+ const ajaxCall = {
+ type: 'POST',
+ async: true,
+ url,
+ dataType: this.format || 'json',
+ complete: this.completeCallback,
+ error: function errorCallback() {
+ globalAjaxQueue.active -= 1;
+
+ if (self.errorCallback) {
+ self.errorCallback.apply(this, arguments); // eslint-disable-line
+ }
+ },
+ success: (response, status, request) => {
+ if (this.loadingElement) {
+ $(this.loadingElement).hide();
+ }
+
+ if (response && response.result === 'error' && !this.useRegularCallbackInCaseOfError) {
+ let placeAt = null;
+ let type = 'toast';
+ if ($(this.errorElement).length && response.message) {
+ $(this.errorElement).show();
+ placeAt = this.errorElement;
+ type = null;
+ }
+
+ if (response.message) {
+ const UI = window['require']('piwik/UI'); // eslint-disable-line
+ const notification = new UI.Notification();
+ notification.show(response.message, {
+ placeat: placeAt,
+ context: 'error',
+ type,
+ id: 'ajaxHelper',
+ });
+ notification.scrollToNotification();
+ }
+ } else if (this.callback) {
+ this.callback(response, status, request);
+ }
+
+ globalAjaxQueue.active -= 1;
+ const { piwik } = window;
+ if (piwik
+ && piwik.ajaxRequestFinished
+ ) {
+ piwik.ajaxRequestFinished();
+ }
+ },
+ data: this.mixinDefaultPostParams(this.postParams),
+ timeout: this.timeout !== null ? this.timeout : undefined,
+ };
+
+ return $.ajax(ajaxCall);
+ }
+
+ private isRequestToApiMethod() {
+ return (this.getParams && this.getParams.module === 'API' && this.getParams.method)
+ || (this.postParams && this.postParams.module === 'API' && this.postParams.method);
+ }
+
+ isWidgetizedRequest(): boolean {
+ return (broadcast.getValueFromUrl('module') === 'Widgetize');
+ }
+
+ private getDefaultPostParams() {
+ if (this.withToken || this.isRequestToApiMethod() || piwik.shouldPropagateTokenAuth) {
+ return {
+ token_auth: piwik.token_auth,
+ // When viewing a widgetized report there won't be any session that can be used, so don't
+ // force session usage
+ force_api_session: broadcast.isWidgetizeRequestWithoutSession() ? 0 : 1,
+ };
+ }
+
+ return {};
+ }
+
+ /**
+ * Mixin the default parameters to send as POST
+ *
+ * @param params parameter object
+ */
+ private mixinDefaultPostParams(params): Parameters {
+ const defaultParams = this.getDefaultPostParams();
+
+ const mergedParams = {
+ ...defaultParams,
+ ...params,
+ };
+
+ return mergedParams;
+ }
+
+ /**
+ * Mixin the default parameters to send as GET
+ *
+ * @param params parameter object
+ */
+ private mixinDefaultGetParams(originalParams): Parameters {
+ const segment = PiwikUrl.getSearchParam('segment');
+
+ const defaultParams = {
+ idSite: piwik.idSite || broadcast.getValueFromUrl('idSite'),
+ period: piwik.period || broadcast.getValueFromUrl('period'),
+ segment,
+ };
+
+ const params = originalParams;
+
+ // never append token_auth to url
+ if (params.token_auth) {
+ params.token_auth = null;
+ delete params.token_auth;
+ }
+
+ Object.keys(defaultParams).forEach((key) => {
+ if (this.useGETDefaultParameter(key)
+ && !params[key]
+ && !this.postParams[key]
+ && defaultParams[key]
+ ) {
+ params[key] = defaultParams[key];
+ }
+ });
+
+ // handle default date & period if not already set
+ if (this.useGETDefaultParameter('date') && !params.date && !this.postParams.date) {
+ params.date = piwik.currentDateString;
+ }
+
+ return params;
+ }
+}
diff --git a/plugins/CoreHome/vue/src/PiwikUrl/PiwikUrl.adapter.ts b/plugins/CoreHome/vue/src/PiwikUrl/PiwikUrl.adapter.ts
new file mode 100644
index 0000000000..abf76cbcb5
--- /dev/null
+++ b/plugins/CoreHome/vue/src/PiwikUrl/PiwikUrl.adapter.ts
@@ -0,0 +1,19 @@
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+import PiwikUrl from './PiwikUrl';
+
+function piwikUrl() {
+ const model = {
+ getSearchParam: PiwikUrl.getSearchParam.bind(PiwikUrl),
+ };
+
+ return model;
+}
+
+piwikUrl.$inject = [];
+
+angular.module('piwikApp.service').service('piwikUrl', piwikUrl);
diff --git a/plugins/CoreHome/vue/src/PiwikUrl/PiwikUrl.ts b/plugins/CoreHome/vue/src/PiwikUrl/PiwikUrl.ts
new file mode 100644
index 0000000000..23606fa076
--- /dev/null
+++ b/plugins/CoreHome/vue/src/PiwikUrl/PiwikUrl.ts
@@ -0,0 +1,32 @@
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+/**
+ * Similar to angulars $location but works around some limitation. Use it if you need to access
+ * search params
+ */
+const PiwikUrl = {
+ getSearchParam(paramName: string): string {
+ const hash = window.location.href.split('#');
+
+ const regex = new RegExp(`${paramName}(\\[]|=)`);
+ if (hash && hash[1] && regex.test(decodeURIComponent(hash[1]))) {
+ const valueFromHash = broadcast.getValueFromHash(paramName, window.location.href);
+
+ // for date, period and idsite fall back to parameter from url, if non in hash was provided
+ if (valueFromHash
+ || (paramName !== 'date' && paramName !== 'period' && paramName !== 'idSite')
+ ) {
+ return valueFromHash;
+ }
+ }
+
+ return broadcast.getValueFromUrl(paramName, window.location.search);
+ },
+};
+
+export default PiwikUrl;
diff --git a/plugins/CoreHome/vue/src/index.ts b/plugins/CoreHome/vue/src/index.ts
index 6e6e61e0ad..5d795d3abe 100644
--- a/plugins/CoreHome/vue/src/index.ts
+++ b/plugins/CoreHome/vue/src/index.ts
@@ -11,9 +11,13 @@ import './Periods/Month';
import './Periods/Year';
import './Periods/Range';
import './Periods/Periods.adapter';
+import './AjaxHelper/AjaxHelper.adapter';
+import './PiwikUrl/PiwikUrl.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';
+export { default as AjaxHelper } from './AjaxHelper/AjaxHelper';
+export { default as PiwikUrl } from './PiwikUrl/PiwikUrl';
diff --git a/plugins/CoreVue/Commands/Build.php b/plugins/CoreVue/Commands/Build.php
index 6d36b08ed6..68a411866f 100644
--- a/plugins/CoreVue/Commands/Build.php
+++ b/plugins/CoreVue/Commands/Build.php
@@ -27,6 +27,7 @@ class Build extends ConsoleCommand
$this->addArgument('plugins', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, 'Plugins whose vue modules to build. Defaults to all plugins.', []);
$this->addOption('watch', null, InputOption::VALUE_NONE, 'If supplied, will watch for changes and automatically rebuild.');
$this->addOption('clear-webpack-cache', null, InputOption::VALUE_NONE);
+ $this->addOption('print-build-command', null, InputOption::VALUE_NONE);
}
public function isEnabled()
@@ -43,6 +44,7 @@ class Build extends ConsoleCommand
$this->clearWebpackCache();
}
+ $printBuildCommand = $input->getOption('print-build-command');
$watch = $input->getOption('watch');
$plugins = $input->getArgument('plugins');
@@ -55,34 +57,45 @@ class Build extends ConsoleCommand
// remove webpack cache since it can result in strange builds if present
Filesystem::unlinkRecursive(PIWIK_INCLUDE_PATH . '/node_modules/.cache', true);
- $failed = $this->build($output, $plugins, $watch);
+ $failed = $this->build($output, $plugins, $printBuildCommand, $watch);
return $failed;
}
- private function build(OutputInterface $output, $plugins, $watch = false)
+ private function build(OutputInterface $output, $plugins, $printBuildCommand, $watch = false)
{
$failed = 0;
foreach ($plugins as $plugin) {
if ($watch) {
- $this->watch($plugin);
+ $this->watch($plugin, $printBuildCommand, $output);
} else {
- $failed += (int) $this->buildFiles($output, $plugin);
+ $failed += (int) $this->buildFiles($output, $plugin, $printBuildCommand);
}
}
return $failed;
}
- private function watch($plugin)
+ private function watch($plugin, $printBuildCommand, OutputInterface $output)
{
- $command = self::getVueCliServiceBin() . ' build --mode=development --target lib --name ' . $plugin . " ./plugins/$plugin/vue/src/index.ts --dest ./plugins/$plugin/vue/dist --watch &";
+ $command = "FORCE_COLOR=1 " . self::getVueCliServiceBin() . ' build --mode=development --target lib --name '
+ . $plugin . " ./plugins/$plugin/vue/src/index.ts --dest ./plugins/$plugin/vue/dist --watch &";
+ if ($printBuildCommand) {
+ $output->writeln("<comment>$command</comment>");
+ return;
+ }
passthru($command);
}
- private function buildFiles(OutputInterface $output, $plugin)
+ private function buildFiles(OutputInterface $output, $plugin, $printBuildCommand)
{
- $command = self::getVueCliServiceBin() . ' build --target lib --name ' . $plugin . " ./plugins/$plugin/vue/src/index.ts --dest ./plugins/$plugin/vue/dist";
+ $command = "FORCE_COLOR=1 " . self::getVueCliServiceBin() . ' build --target lib --name ' . $plugin
+ . " ./plugins/$plugin/vue/src/index.ts --dest ./plugins/$plugin/vue/dist";
+
+ if ($printBuildCommand) {
+ $output->writeln("<comment>$command</comment>");
+ return 0;
+ }
$output->writeln("<comment>Building $plugin...</comment>");
if ($output->getVerbosity() >= OutputInterface::VERBOSITY_VERBOSE) {
diff --git a/plugins/CoreVue/types/index.d.ts b/plugins/CoreVue/types/index.d.ts
index 733b7ab13f..3291b42ad8 100644
--- a/plugins/CoreVue/types/index.d.ts
+++ b/plugins/CoreVue/types/index.d.ts
@@ -1,8 +1,68 @@
interface PiwikGlobal {
timezoneOffset: number;
addCustomPeriod: <T>(name: string, periodClass: T) => void;
+ shouldPropagateTokenAuth: boolean;
+ token_auth: string;
+ idSite: string|number;
+ period: string;
+ currentDateString: string;
}
let piwik: PiwikGlobal;
function _pk_translate(translationStringId: string, values: string[]): string;
+
+/**
+ * global ajax queue
+ *
+ * @type {Array} array holding XhrRequests with automatic cleanup
+ */
+interface GlobalAjaxQueue extends Array<XMLHttpRequest|null> {
+ active:number;
+
+ /**
+ * Removes all finished requests from the queue.
+ *
+ * @return {void}
+ */
+ clean();
+
+ /**
+ * Extend Array.push with automatic cleanup for finished requests
+ *
+ * @return {Object}
+ */
+ push();
+
+ /**
+ * Extend with abort function to abort all queued requests
+ *
+ * @return {void}
+ */
+ abort();
+}
+
+interface Window {
+ globalAjaxQueue: GlobalAjaxQueue;
+}
+
+interface PiwikPopoverGlobal {
+ isOpen();
+}
+
+let Piwik_Popover: PiwikPopoverGlobal;
+
+interface PiwikHelperGlobal {
+ escape(text: string): string;
+ redirect(params: any);
+}
+
+let piwikHelper: PiwikHelperGlobal;
+
+interface BroadcastGlobal {
+ getValueFromUrl(paramName: string, url?: string): string;
+ getValueFromHash(paramName: string, url?: string): string;
+ isWidgetizeRequestWithoutSession(): boolean;
+}
+
+let broadcast: BroadcastGlobal;
diff --git a/plugins/Morpheus/javascripts/ajaxHelper.js b/plugins/Morpheus/javascripts/ajaxHelper.js
deleted file mode 100644
index c2b19586a1..0000000000
--- a/plugins/Morpheus/javascripts/ajaxHelper.js
+++ /dev/null
@@ -1,565 +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
- */
-
-/**
- * global ajax queue
- *
- * @type {Array} array holding XhrRequests with automatic cleanup
- */
-var globalAjaxQueue = [];
-globalAjaxQueue.active = 0;
-
-/**
- * Removes all finished requests from the queue.
- *
- * @return {void}
- */
-globalAjaxQueue.clean = function () {
- for (var i = this.length; i--;) {
- if (!this[i] || this[i].readyState == 4) {
- this.splice(i, 1);
- }
- }
-};
-
-/**
- * Extend Array.push with automatic cleanup for finished requests
- *
- * @return {Object}
- */
-globalAjaxQueue.push = function () {
- this.active += arguments.length;
-
- // cleanup ajax queue
- this.clean();
-
- // call original array push
- return Array.prototype.push.apply(this, arguments);
-};
-
-/**
- * Extend with abort function to abort all queued requests
- *
- * @return {void}
- */
-globalAjaxQueue.abort = function () {
- // abort all queued requests
- for (var i = this.length; i--;) {
- this[i] && this[i].abort && this[i].abort(); // abort if possible
- }
- // remove all elements from array
- this.splice(0, this.length);
-
- this.active = 0;
-};
-
-/**
- * Global ajax helper to handle requests within piwik
- *
- * @type {Object}
- * @constructor
- */
-function ajaxHelper() {
-
- /**
- * Format of response
- * @type {String}
- */
- this.format = 'json';
-
- /**
- * A timeout for the request which will override any global timeout
- * @type {Boolean}
- */
- this.timeout = null;
-
- /**
- * Callback function to be executed on success
- */
- this.callback = function () {};
-
- /**
- * Use this.callback if an error is returned
- * @type {Boolean}
- */
- this.useRegularCallbackInCaseOfError = false;
-
- /**
- * Callback function to be executed on error
- */
- this.errorCallback;
-
- this.withToken = false;
-
- /**
- * Callback function to be executed on complete (after error or success)
- */
- this.completeCallback = function () {};
-
- /**
- * Params to be passed as GET params
- * @type {Object}
- * @see ajaxHelper._mixinDefaultGetParams
- */
- this.getParams = {};
-
- /**
- * Base URL used in the AJAX request. Can be set by setUrl.
- *
- * It is set to '?' rather than 'index.php?' to increase chances that it works
- * including for users who have an automatic 301 redirection from index.php? to ?
- * POST values are missing when there is such 301 redirection. So by by-passing
- * this 301 redirection, we avoid this issue.
- *
- * @type {String}
- * @see ajaxHelper.setUrl
- */
- this.getUrl = '?';
-
- /**
- * Params to be passed as GET params
- * @type {Object}
- * @see ajaxHelper._mixinDefaultPostParams
- */
- this.postParams = {};
-
- /**
- * Element to be displayed while loading
- * @type {String}
- */
- this.loadingElement = null;
-
- /**
- * Element to be displayed on error
- * @type {String}
- */
- this.errorElement = '#ajaxError';
-
- /**
- * Handle for current request
- * @type {XMLHttpRequest}
- */
- this.requestHandle = null;
-
- this.defaultParams = ['idSite', 'period', 'date', 'segment'];
-
- /**
- * Adds params to the request.
- * If params are given more then once, the latest given value is used for the request
- *
- * @param {object} params
- * @param {string} type type of given parameters (POST or GET)
- * @return {void}
- */
- this.addParams = function (params, type) {
- if (typeof params == 'string') {
- params = broadcast.getValuesFromUrl(params);
- }
-
- var arrayParams = ['compareSegments', 'comparePeriods', 'compareDates'];
-
- for (var key in params) {
- if (arrayParams.indexOf(key) !== -1
- && !params[key]
- ) {
- continue;
- }
-
- if(type.toLowerCase() == 'get') {
- this.getParams[key] = params[key];
- } else if(type.toLowerCase() == 'post') {
- this.postParams[key] = params[key];
- }
- }
- };
-
- this.withTokenInUrl = function () {
- this.withToken = true;
- };
-
- /**
- * Sets the base URL to use in the AJAX request.
- *
- * @param {string} url
- */
- this.setUrl = function (url) {
- this.addParams(broadcast.getValuesFromUrl(url), 'GET');
- };
-
- /**
- * Gets this helper instance ready to send a bulk request. Each argument to this
- * function is a single request to use.
- */
- this.setBulkRequests = function () {
- var urls = [];
- for (var i = 0; i != arguments.length; ++i) {
- urls.push($.param(arguments[i]));
- }
-
- this.addParams({
- module: 'API',
- method: 'API.getBulkRequest',
- urls: urls,
- format: 'json'
- }, 'post');
- };
-
- /**
- * Set a timeout (in milliseconds) for the request. This will override any global timeout.
- *
- * @param {int} timeout Timeout in milliseconds
- * @return {void}
- */
- this.setTimeout = function (timeout) {
- this.timeout = timeout;
- };
-
- /**
- * Sets the callback called after the request finishes
- *
- * @param {function} callback Callback function
- * @return {void}
- */
- this.setCallback = function (callback) {
- this.callback = callback;
- };
-
- /**
- * Set that the callback passed to setCallback() should be used if an application error (i.e. an
- * Exception in PHP) is returned.
- */
- this.useCallbackInCaseOfError = function () {
- this.useRegularCallbackInCaseOfError = true;
- };
-
- /**
- * Set callback to redirect on success handler
- * &update=1(+x) will be appended to the current url
- *
- * @param {object} [params] to modify in redirect url
- * @return {void}
- */
- this.redirectOnSuccess = function (params) {
- this.setCallback(function() {
- piwikHelper.redirect(params);
- });
- };
-
- /**
- * Sets the callback called in case of an error within the request
- *
- * @param {function} callback Callback function
- * @return {void}
- */
- this.setErrorCallback = function (callback) {
- this.errorCallback = callback;
- };
-
- /**
- * Sets the complete callback which is called after an error or success callback.
- *
- * @param {function} callback Callback function
- * @return {void}
- */
- this.setCompleteCallback = function (callback) {
- this.completeCallback = callback;
- };
-
- /**
- * error callback to use by default
- *
- * @param deferred
- * @param status
- */
- this.defaultErrorCallback = function(deferred, status)
- {
- // do not display error message if request was aborted
- if(status == 'abort') {
- return;
- }
-
- var loadingError = $('#loadingError');
- if (Piwik_Popover.isOpen() && deferred && deferred.status === 500) {
- if (deferred && deferred.status === 500) {
- $(document.body).html(piwikHelper.escape(deferred.responseText));
- }
- } else {
- loadingError.show();
- }
- }
-
- this.errorCallback = this.defaultErrorCallback;
-
- /**
- * Sets the response format for the request
- *
- * @param {string} format response format (e.g. json, html, ...)
- * @return {void}
- */
- this.setFormat = function (format) {
- this.format = format;
- };
-
- /**
- * Set the div element to show while request is loading
- *
- * @param {String} [element] selector for the loading element
- */
- this.setLoadingElement = function (element) {
- if (!element) {
- element = '#ajaxLoadingDiv';
- }
- this.loadingElement = element;
- };
-
- /**
- * Set the div element to show on error
- *
- * @param {String} element selector for the error element
- */
- this.setErrorElement = function (element) {
- if (!element) {
- return;
- }
- this.errorElement = element;
- };
-
- /**
- * Detect whether are allowed to use the given default parameter or not
- * @param string parameter
- * @returns {boolean}
- * @private
- */
- this._useGETDefaultParameter = function (parameter) {
- if (parameter && this.defaultParams) {
- var i;
- for (i = 0; i < this.defaultParams.length; i++) {
- if (this.defaultParams[i] === parameter) {
- return true;
- }
- }
- }
-
- return false;
- }
-
- /**
- * Removes a default parameter that is usually send automatically along the request.
- *
- * @param {String} parameter A name such as "period", "date", "segment".
- */
- this.removeDefaultParameter = function (parameter) {
- if (parameter && this.defaultParams) {
-
- var i;
- for (i = 0; i < this.defaultParams.length; i++) {
- if (this.defaultParams[i] === parameter) {
- this.defaultParams.splice(i, 1);
- }
- }
- }
- }
-
- /**
- * Send the request
- * @return {void}
- */
- this.send = function () {
- if ($(this.errorElement).length) {
- $(this.errorElement).hide();
- }
-
- if (this.loadingElement) {
- $(this.loadingElement).fadeIn();
- }
-
- this.requestHandle = this._buildAjaxCall();
- globalAjaxQueue.push(this.requestHandle);
- };
-
- /**
- * Aborts the current request if it is (still) running
- * @return {void}
- */
- this.abort = function () {
- if (this.requestHandle && typeof this.requestHandle.abort == 'function') {
- this.requestHandle.abort();
- this.requestHandle = null;
- }
- };
-
- /**
- * Builds and sends the ajax requests
- * @return {XMLHttpRequest}
- * @private
- */
- this._buildAjaxCall = function () {
- var that = this;
-
- var parameters = this._mixinDefaultGetParams(this.getParams);
-
- var url = this.getUrl;
- if (url[url.length - 1] != '?') {
- url += '&';
- }
-
- // we took care of encoding &segment properly already, so we don't use $.param for it ($.param URL encodes the values)
- if(parameters['segment']) {
- url += 'segment=' + parameters['segment'] + '&';
- delete parameters['segment'];
- }
- if(parameters['date']) {
- url += 'date=' + decodeURIComponent(parameters['date']) + '&';
- delete parameters['date'];
- }
- url += $.param(parameters);
- var ajaxCall = {
- type: 'POST',
- async: true,
- url: url,
- dataType: this.format || 'json',
- complete: this.completeCallback,
- error: function () {
- --globalAjaxQueue.active;
-
- if (that.errorCallback) {
- that.errorCallback.apply(this, arguments);
- }
- },
- success: function (response, status, request) {
- if (that.loadingElement) {
- $(that.loadingElement).hide();
- }
-
- if (response && response.result == 'error' && !that.useRegularCallbackInCaseOfError) {
-
- var placeAt = null;
- var type = 'toast';
- if ($(that.errorElement).length && response.message) {
- $(that.errorElement).show();
- placeAt = that.errorElement;
- type = null;
- }
-
- if (response.message) {
-
- var UI = require('piwik/UI');
- var notification = new UI.Notification();
- notification.show(response.message, {
- placeat: placeAt,
- context: 'error',
- type: type,
- id: 'ajaxHelper'
- });
- notification.scrollToNotification();
- }
-
- } else {
- that.callback(response, status, request);
- }
-
- --globalAjaxQueue.active;
- var piwik = window.piwik;
- if (piwik
- && piwik.ajaxRequestFinished
- ) {
- piwik.ajaxRequestFinished();
- }
- },
- data: this._mixinDefaultPostParams(this.postParams)
- };
-
- if (this.timeout !== null) {
- ajaxCall.timeout = this.timeout;
- }
-
- return $.ajax(ajaxCall);
- };
-
- this._isRequestToApiMethod = function () {
- return (this.getParams && this.getParams['module'] === 'API' && this.getParams['method']) ||
- (this.postParams && this.postParams['module'] === 'API' && this.postParams['method']);
- };
-
- this._isWidgetizedRequest = function () {
- return (broadcast.getValueFromUrl('module') == 'Widgetize');
- };
-
- this._getDefaultPostParams = function () {
- if (this.withToken || this._isRequestToApiMethod() || piwik.shouldPropagateTokenAuth) {
- return {
- token_auth: piwik.token_auth,
- // When viewing a widgetized report there won't be any session that can be used, so don't force session usage
- force_api_session: broadcast.isWidgetizeRequestWithoutSession() ? 0 : 1
- };
- }
-
- return {};
- };
-
- /**
- * Mixin the default parameters to send as POST
- *
- * @param {object} params parameter object
- * @return {object}
- * @private
- */
- this._mixinDefaultPostParams = function (params) {
-
- var defaultParams = this._getDefaultPostParams();
-
- for (var index in defaultParams) {
-
- if (!params[index]) {
-
- params[index] = defaultParams[index];
- }
- }
-
- return params;
- };
-
- /**
- * Mixin the default parameters to send as GET
- *
- * @param {object} params parameter object
- * @return {object}
- * @private
- */
- this._mixinDefaultGetParams = function (params) {
- var piwikUrl = piwikHelper.getAngularDependency('piwikUrl');
-
- var segment = piwikUrl.getSearchParam('segment');
-
- var defaultParams = {
- idSite: piwik.idSite || broadcast.getValueFromUrl('idSite'),
- period: piwik.period || broadcast.getValueFromUrl('period'),
- segment: segment
- };
-
- // never append token_auth to url
- if (params.token_auth) {
- params.token_auth = null;
- delete params.token_auth;
- }
-
- for (var key in defaultParams) {
- if (this._useGETDefaultParameter(key) && !params[key] && !this.postParams[key] && defaultParams[key]) {
- params[key] = defaultParams[key];
- }
- }
-
- // handle default date & period if not already set
- if (this._useGETDefaultParameter('date') && !params.date && !this.postParams.date) {
- params.date = piwik.currentDateString;
- }
-
- return params;
- };
-
- return this;
-}