| Server IP : 213.186.33.4 / Your IP : 216.73.216.193 Web Server : Apache System : Linux webm006.cluster103.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : awebpaca ( 35430) PHP Version : 8.5.0 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/awebpaca/piwik/plugins/CoreHome/angularjs/history/ |
Upload File : |
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
/**
* History service. Provides the ability to change the window hash, and makes sure broadcast.pageload
* is called on every change.
*
* This service replaces the previously used jQuery history extension.
*
* Should only be used by the broadcast object.
*
* @deprecated in 3.2.2, will be removed in Matomo 5
*/
(function (window, $, broadcast) {
angular.module('piwikApp').service('historyService', historyService);
historyService.$inject = ['$location', '$rootScope'];
function historyService($location, $rootScope) {
var service = {};
service.load = load;
service.init = init;
return service;
function init() {
if ($location.path() != '/') {
changePathToSearch();
}
$rootScope.$on('$locationChangeSuccess', function () {
loadCurrentPage();
});
loadCurrentPage();
}
// currently, the AJAX content URL is stored in $location.search(), but before it was stored in $location.path().
// this function makes sure URLs like http://piwik.net/?...#/module=Whatever&action=whatever still work.
function changePathToSearch() {
var path = $location.path();
if (!path || path == '/') {
return;
}
var searchParams = broadcast.getValuesFromUrl('?' + path.substring(1));
// NOTE: we don't need to decode the parameters since $location.path() will decode the string itself
$location.search(searchParams);
$location.path('');
}
function loadCurrentPage() {
var searchObject = $location.search(),
searchString = [];
for (var name in searchObject) {
if (!searchObject.hasOwnProperty(name) || name == '_') {
continue;
}
// if more than one query parameter of the same name is supplied, angular will return all of them as
// an array. we only want to use the last one, though.
if (searchObject[name] instanceof Array) {
searchObject[name] = searchObject[name][searchObject[name].length - 1];
}
var value = searchObject[name];
if (name != 'columns') { // the columns query parameter is not urldecoded in PHP code. TODO: this should be fixed in 3.0
value = encodeURIComponent(value);
}
searchString.push(name + '=' + value);
}
searchString = searchString.join('&');
// the location hash will have a / prefix, which broadcast.pageload doesn't want
broadcast.pageload(searchString);
}
function load(hash) {
// make sure the hash is just the query parameter values, w/o a starting #, / or ? char. broadcast.pageload & $location.path should get neither
hash = normalizeHash(hash);
var currentHash = normalizeHash(location.hash);
if (currentHash === hash) {
loadCurrentPage(); // it would not trigger a location change success event as URL is the same, call it manually
} else if (hash) {
$location.search(hash);
} else {
// NOTE: this works around a bug in angularjs. when unsetting the hash (ie, removing in the URL),
// angular will enter an infinite loop of digests. this is because $locationWatch will trigger
// $locationChangeStart if $browser.url() != $location.absUrl(), and $browser.url() will contain
// the '#' character and $location.absUrl() will not. so the watch continues to trigger the event.
$location.search('_=');
}
setTimeout(function () { $rootScope.$apply(); }, 1);
}
function normalizeHash(hash) {
var chars = ['#', '/', '?'];
for (var i = 0; i != chars.length; ++i) {
var charToRemove = chars[i];
if (hash.charAt(0) == charToRemove) {
hash = hash.substring(1);
}
}
return hash;
}
}
})(window, jQuery, broadcast);