155 lines
5.5 KiB
JavaScript
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);
|
|
}
|
|
})(); |