2023-01-23 11:03:31 +01:00

155 lines
5.5 KiB
JavaScript

/*!
* 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').controller('TransitionSwitcherController', TransitionSwitcherController);
TransitionSwitcherController.$inject = ['piwikApi', '$filter', '$rootScope'];
function TransitionSwitcherController(piwikApi, $filter, $rootScope) {
var translate = $filter('translate');
var self = this;
this.actionType = 'Actions.getPageUrls';
this.actionNameOptions = [];
this.actionTypeOptions = [
{key: 'Actions.getPageUrls', value: translate('Actions_PageUrls')},
{key: 'Actions.getPageTitles', value: translate('Actions_WidgetPageTitles')}
];
this.isLoading = false;
this.transitions = null;
this.actionName = null;
this.isEnabled = true;
var noDataKey = '_____ignore_____';
this.detectActionName = function (reports)
{
var othersLabel = translate('General_Others');
var label, report;
for (var i = 0; i < reports.length; i++) {
if (!reports[i]) {
continue;
}
report = reports[i];
if (report.label === othersLabel) {
continue;
}
var key = null;
if (self.isUrlReport()) {
key = report.url
} else {
key = report.label;
}
if (key) {
label = report.label + ' (' + translate('Transitions_NumPageviews', report.nb_hits) + ')';
self.actionNameOptions.push({key: key, value: label, url: report.url});
if (!self.actionName) {
self.actionName = key
}
}
}
}
this.isUrlReport = function()
{
return this.actionType === 'Actions.getPageUrls';
}
this.fetch = function (type) {
this.isLoading = true;
this.actionNameOptions = [];
this.actionName = null;
piwikApi.fetch({
method: type,
flat: 1, filter_limit: 100,
filter_sort_order: 'desc',
filter_sort_column: 'nb_hits',
showColumns: 'label,nb_hits,url'
}).then(function (report) {
self.isLoading = false;
self.actionNameOptions = [];
self.actionName = null;
if (report && report.length) {
self.isEnabled = true;
self.detectActionName(report);
self.onActionNameChange(self.actionName);
}
if (null === self.actionName || self.actionNameOptions.length === 0) {
self.isEnabled = false;
self.actionName = noDataKey;
self.actionNameOptions.push({key: noDataKey, value: translate('CoreHome_ThereIsNoDataForThisReport')});
}
}, function () {
self.isLoading = false;
self.isEnabled = false;
});
}
this.onActionTypeChange = function (actionName) {
this.fetch(actionName);
};
this.onActionNameChange = function (actionName) {
if (actionName === null || actionName === noDataKey) {
return;
}
var type = 'url';
if (!this.isUrlReport()) {
type = 'title';
}
if (!this.transitions) {
this.transitions = new Piwik_Transitions(type, actionName, null, '');
} else {
this.transitions.reset(type, actionName, '');
}
this.transitions.showPopover(true);
};
$rootScope.$on('Transitions.switchTransitionsUrl', function (event, params) {
if (params && params.url) {
if (self.isUrlReport()) {
params.url = params.url.replace('https://', '').replace('http://', '');
}
var found = false, option, optionUrl;
for (var i = 0; i < self.actionNameOptions.length; i++) {
option = self.actionNameOptions[i];
optionUrl = option.url;
if (optionUrl && self.isUrlReport()) {
optionUrl = String(optionUrl).replace('https://', '').replace('http://', '');
} else {
optionUrl = null;
}
if (!found && (option.key === params.url || (params.url === optionUrl && optionUrl))) {
found = true;
self.actionName = option.key;
}
}
if (!found) {
// we only fetch top 100 in the report... so the entry the user clicked on, might not be in the top 100
var options = angular.copy(self.actionNameOptions); // somehow needed to force angular to render it
options.push({key: params.url, value: params.url});
self.actionNameOptions = options;
self.actionName = params.url;
}
self.onActionNameChange(self.actionName);
}
});
this.fetch(this.actionType);
}
})();