(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("vue"));
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["CoreHome"] = factory(require("vue"));
else
root["CoreHome"] = factory(root["Vue"]);
})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__8bbf__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = "fae3");
/******/ })
/************************************************************************/
/******/ ({
/***/ "8bbf":
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE__8bbf__;
/***/ }),
/***/ "fae3":
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);
// EXPORTS
__webpack_require__.d(__webpack_exports__, "activityIndicatorAdapter", function() { return /* reexport */ activityIndicatorAdapter; });
__webpack_require__.d(__webpack_exports__, "ActivityIndicator", function() { return /* reexport */ ActivityIndicator; });
__webpack_require__.d(__webpack_exports__, "translate", function() { return /* reexport */ translate; });
__webpack_require__.d(__webpack_exports__, "alertAdapter", function() { return /* reexport */ alertAdapter; });
__webpack_require__.d(__webpack_exports__, "AjaxHelper", function() { return /* reexport */ AjaxHelper_AjaxHelper; });
__webpack_require__.d(__webpack_exports__, "PiwikUrl", function() { return /* reexport */ PiwikUrl_PiwikUrl; });
__webpack_require__.d(__webpack_exports__, "Piwik", function() { return /* reexport */ Piwik_Piwik; });
__webpack_require__.d(__webpack_exports__, "Periods", function() { return /* reexport */ Periods_Periods; });
__webpack_require__.d(__webpack_exports__, "Day", function() { return /* reexport */ Day_DayPeriod; });
__webpack_require__.d(__webpack_exports__, "Week", function() { return /* reexport */ Week_WeekPeriod; });
__webpack_require__.d(__webpack_exports__, "Month", function() { return /* reexport */ Month_MonthPeriod; });
__webpack_require__.d(__webpack_exports__, "Year", function() { return /* reexport */ Year_YearPeriod; });
__webpack_require__.d(__webpack_exports__, "Range", function() { return /* reexport */ Range_RangePeriod; });
// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js
// This file is imported into lib/wc client bundles.
if (typeof window !== 'undefined') {
var currentScript = window.document.currentScript
if (false) { var getCurrentScript; }
var src = currentScript && currentScript.src.match(/(.+\/)[^/]+\.js(\?.*)?$/)
if (src) {
__webpack_require__.p = src[1] // eslint-disable-line
}
}
// Indicate to webpack that this file can be concatenated
/* harmony default export */ var setPublicPath = (null);
// 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 = window.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 window.broadcast.getValueFromUrl(paramName, window.location.search);
}
};
/* harmony default export */ var PiwikUrl_PiwikUrl = (PiwikUrl);
// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.ts
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
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() {
_defineProperty(this, "format", 'json');
_defineProperty(this, "timeout", null);
_defineProperty(this, "callback", null);
_defineProperty(this, "useRegularCallbackInCaseOfError", false);
_defineProperty(this, "errorCallback", void 0);
_defineProperty(this, "withToken", false);
_defineProperty(this, "completeCallback", void 0);
_defineProperty(this, "getParams", {});
_defineProperty(this, "getUrl", '?');
_defineProperty(this, "postParams", {});
_defineProperty(this, "loadingElement", null);
_defineProperty(this, "errorElement", '#ajaxError');
_defineProperty(this, "requestHandle", null);
_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);
// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Periods/Periods.ts
function Periods_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
/**
* Piwik period management service for the frontend.
*
* Usage:
*
* var DayPeriod = piwikPeriods.get('day');
* var day = new DayPeriod(new Date());
*
* or
*
* var day = piwikPeriods.parse('day', '2013-04-05');
*
* Adding custom periods:
*
* To add your own period to the frontend, create a period class for it
* w/ the following methods:
*
* - **getPrettyString()**: returns a human readable display string for the period.
* - **getDateRange()**: returns an array w/ two elements, the first being the start
* Date of the period, the second being the end Date. The dates
* must be Date objects, not strings, and are inclusive.
* - **containsToday()**: returns true if the date period contains today. False if not.
* - (_static_) **parse(strDate)**: creates a new instance of this period from the
* value of the 'date' query parameter.
* - (_static_) **getDisplayText**: returns translated text for the period, eg, 'month',
* 'week', etc.
*
* Then call piwik.addCustomPeriod w/ your period class:
*
* piwik.addCustomPeriod('mycustomperiod', MyCustomPeriod);
*
* NOTE: currently only single date periods like day, week, month year can
* be extended. Other types of periods that require a special UI to
* view/edit aren't, since there is currently no way to use a
* custom UI for a custom period.
*/
class Periods {
constructor() {
Periods_defineProperty(this, "periods", {});
Periods_defineProperty(this, "periodOrder", []);
}
addCustomPeriod(name, periodClass) {
if (this.periods[name]) {
throw new Error(`The "${name}" period already exists! It cannot be overridden.`);
}
this.periods[name] = periodClass;
this.periodOrder.push(name);
}
getAllLabels() {
return Array().concat(this.periodOrder);
}
get(strPeriod) {
const periodClass = this.periods[strPeriod];
if (!periodClass) {
throw new Error(`Invalid period label: ${strPeriod}`);
}
return periodClass;
}
parse(strPeriod, strDate) {
return this.get(strPeriod).parse(strDate);
}
isRecognizedPeriod(strPeriod) {
return !!this.periods[strPeriod];
}
}
/* harmony default export */ var Periods_Periods = (new Periods());
// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Periods/utilities.ts
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
function format(date) {
return $.datepicker.formatDate('yy-mm-dd', date);
}
function getToday() {
const date = new Date(Date.now()); // undo browser timezone
date.setTime(date.getTime() + date.getTimezoneOffset() * 60 * 1000); // apply piwik site timezone (if it exists)
date.setHours(date.getHours() + (window.piwik.timezoneOffset || 0) / 3600); // get rid of hours/minutes/seconds/etc.
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
date.setMilliseconds(0);
return date;
}
function parseDate(date) {
if (date instanceof Date) {
return date;
}
const strDate = decodeURIComponent(date);
if (strDate === 'today' || strDate === 'now') {
return getToday();
}
if (strDate === 'yesterday' // note: ignoring the 'same time' part since the frontend doesn't care about the time
|| strDate === 'yesterdaySameTime') {
const yesterday = getToday();
yesterday.setDate(yesterday.getDate() - 1);
return yesterday;
}
if (strDate.match(/last[ -]?week/i)) {
const lastWeek = getToday();
lastWeek.setDate(lastWeek.getDate() - 7);
return lastWeek;
}
if (strDate.match(/last[ -]?month/i)) {
const lastMonth = getToday();
lastMonth.setDate(1);
lastMonth.setMonth(lastMonth.getMonth() - 1);
return lastMonth;
}
if (strDate.match(/last[ -]?year/i)) {
const lastYear = getToday();
lastYear.setFullYear(lastYear.getFullYear() - 1);
return lastYear;
}
try {
return $.datepicker.parseDate('yy-mm-dd', strDate);
} catch (err) {
// angular swallows this error, so manual console log here
console.error(err.message || err);
throw err;
}
}
function todayIsInRange(dateRange) {
if (dateRange.length !== 2) {
return false;
}
if (getToday() >= dateRange[0] && getToday() <= dateRange[1]) {
return true;
}
return false;
}
// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Piwik/Piwik.ts
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
let originalTitle;
const {
piwik: Piwik_piwik,
broadcast: Piwik_broadcast,
piwikHelper: Piwik_piwikHelper
} = window;
Piwik_piwik.helper = Piwik_piwikHelper;
Piwik_piwik.broadcast = Piwik_broadcast;
function isValidPeriod(periodStr, dateStr) {
try {
Periods_Periods.parse(periodStr, dateStr);
return true;
} catch (e) {
return false;
}
}
Piwik_piwik.updatePeriodParamsFromUrl = function updatePeriodParamsFromUrl() {
let date = PiwikUrl_PiwikUrl.getSearchParam('date');
const period = PiwikUrl_PiwikUrl.getSearchParam('period');
if (!isValidPeriod(period, date)) {
// invalid data in URL
return;
}
if (Piwik_piwik.period === period && Piwik_piwik.currentDateString === date) {
// this period / date is already loaded
return;
}
Piwik_piwik.period = period;
const dateRange = Periods_Periods.parse(period, date).getDateRange();
Piwik_piwik.startDateString = format(dateRange[0]);
Piwik_piwik.endDateString = format(dateRange[1]);
Piwik_piwik.updateDateInTitle(date, period); // do not set anything to previousN/lastN, as it's more useful to plugins
// to have the dates than previousN/lastN.
if (Piwik_piwik.period === 'range') {
date = `${Piwik_piwik.startDateString},${Piwik_piwik.endDateString}`;
}
Piwik_piwik.currentDateString = date;
};
Piwik_piwik.updateDateInTitle = function updateDateInTitle(date, period) {
if (!$('.top_controls #periodString').length) {
return;
} // Cache server-rendered page title
originalTitle = originalTitle || document.title;
if (originalTitle.indexOf(Piwik_piwik.siteName) === 0) {
const dateString = ` - ${Periods_Periods.parse(period, date).getPrettyString()} `;
document.title = `${Piwik_piwik.siteName}${dateString}${originalTitle.substr(Piwik_piwik.siteName.length)}`;
}
};
Piwik_piwik.hasUserCapability = function hasUserCapability(capability) {
return window.angular.isArray(Piwik_piwik.userCapabilities) && Piwik_piwik.userCapabilities.indexOf(capability) !== -1;
};
const Piwik = Piwik_piwik;
/* harmony default export */ var Piwik_Piwik = (Piwik);
// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Piwik/Piwik.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 piwikService() {
return Piwik_Piwik;
}
angular.module('piwikApp.service').service('piwik', piwikService);
function initPiwikService(piwik, $rootScope) {
$rootScope.$on('$locationChangeSuccess', piwik.updatePeriodParamsFromUrl);
}
initPiwikService.$inject = ['piwik', '$rootScope'];
angular.module('piwikApp.service').run(initPiwikService);
// EXTERNAL MODULE: external {"commonjs":"vue","commonjs2":"vue","root":"Vue"}
var external_commonjs_vue_commonjs2_vue_root_Vue_ = __webpack_require__("8bbf");
// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue?vue&type=template&id=6af4d064
const _hoisted_1 = {
class: "loadingPiwik"
};
const _hoisted_2 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("img", {
src: "plugins/Morpheus/images/loading-blue.gif",
alt: ""
}, null, -1);
function render(_ctx, _cache, $props, $setup, $data, $options) {
return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])((Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", _hoisted_1, [_hoisted_2, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.loadingMessage), 1)], 512)), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.loading]]);
}
// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue?vue&type=template&id=6af4d064
// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/translate.ts
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
function translate(translationStringId, values = []) {
return window._pk_translate(translationStringId, values); // eslint-disable-line
}
// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue?vue&type=script&lang=ts
/* harmony default export */ var ActivityIndicatorvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
props: {
loading: {
type: Boolean,
required: true,
default: false
},
loadingMessage: {
type: String,
required: false,
default: translate('General_LoadingData')
}
}
}));
// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue?vue&type=script&lang=ts
// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue
ActivityIndicatorvue_type_script_lang_ts.render = render
/* harmony default export */ var ActivityIndicator = (ActivityIndicatorvue_type_script_lang_ts);
// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.adapter.ts
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
function activityIndicatorAdapter() {
return {
restrict: 'A',
scope: {
loading: '<',
loadingMessage: '<'
},
template: '',
link: function activityIndicatorAdapterLink(scope, element) {
const app = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createApp"])({
template: '