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:
Diffstat (limited to 'js/piwik.js')
-rw-r--r--js/piwik.js92
1 files changed, 44 insertions, 48 deletions
diff --git a/js/piwik.js b/js/piwik.js
index 18323673a4..875e5e1076 100644
--- a/js/piwik.js
+++ b/js/piwik.js
@@ -4562,17 +4562,42 @@ if (typeof window.Matomo !== 'object') {
return event.target || event.srcElement;
}
+ function isClickNode(nodeName)
+ {
+ return nodeName === 'A' || nodeName === 'AREA';
+ }
+
/*
* Handle click event
*/
function clickHandler(enable) {
+ function getLinkTarget(event)
+ {
+ var target = getTargetElementFromEvent(event);
+ var nodeName = target.nodeName;
+ var ignorePattern = getClassesRegExp(configIgnoreClasses, 'ignore');
+
+ while (!isClickNode(nodeName) && target && target.parentNode) {
+ target = target.parentNode;
+ nodeName = target.nodeName;
+ }
+
+ if (target && isClickNode(nodeName) && !ignorePattern.test(target.className)) {
+ return target;
+ }
+ }
+
return function (event) {
event = event || windowAlias.event;
+ var target = getLinkTarget(event);
+ if (!target) {
+ return;
+ }
+
var button = getNameOfClickedButton(event);
- var target = getTargetElementFromEvent(event);
if (event.type === 'click') {
@@ -4609,50 +4634,18 @@ if (typeof window.Matomo !== 'object') {
/*
* Add click listener to a DOM element
*/
- function addClickListener(element, enable) {
+ function addClickListener(element, enable, useCapture) {
var enableType = typeof enable;
if (enableType === 'undefined') {
enable = true;
}
- addEventListener(element, 'click', clickHandler(enable), false);
+ addEventListener(element, 'click', clickHandler(enable), useCapture);
if (enable) {
- addEventListener(element, 'mouseup', clickHandler(enable), false);
- addEventListener(element, 'mousedown', clickHandler(enable), false);
- addEventListener(element, 'contextmenu', clickHandler(enable), false);
- }
- }
-
- /*
- * Add click handlers to anchor and AREA elements, except those to be ignored
- */
- function addClickListeners(enable, trackerInstance) {
- linkTrackingInstalled = true;
-
- // iterate through anchor elements with href and AREA elements
- var i,
- ignorePattern = getClassesRegExp(configIgnoreClasses, 'ignore'),
- linkElements = documentAlias.links,
- linkElement = null, trackerType = null;
-
- if (linkElements) {
- for (i = 0; i < linkElements.length; i++) {
- linkElement = linkElements[i];
- if (!ignorePattern.test(linkElement.className)) {
- trackerType = typeof linkElement.matomoTrackers;
-
- if ('undefined' === trackerType) {
- linkElement.matomoTrackers = [];
- }
-
- if (-1 === indexOfArray(linkElement.matomoTrackers, trackerInstance)) {
- // we make sure to setup link only once for each tracker
- linkElement.matomoTrackers.push(trackerInstance);
- addClickListener(linkElement, enable);
- }
- }
- }
+ addEventListener(element, 'mouseup', clickHandler(enable), useCapture);
+ addEventListener(element, 'mousedown', clickHandler(enable), useCapture);
+ addEventListener(element, 'contextmenu', clickHandler(enable), useCapture);
}
}
@@ -6032,14 +6025,14 @@ if (typeof window.Matomo !== 'object') {
* @param bool enable If false, do not use pseudo click-handler (middle click + context menu)
*/
this.addListener = function (element, enable) {
- addClickListener(element, enable);
+ addClickListener(element, enable, false);
};
/**
* Install link tracker.
*
- * If you change the DOM of your website or web application you need to make sure to call this method
- * again so Matomo can detect links that were added newly.
+ * If you change the DOM of your website or web application Matomo will automatically detect links
+ * that were added newly.
*
* The default behaviour is to use actual click events. However, some browsers
* (e.g., Firefox, Opera, and Konqueror) don't generate click events for the middle mouse button.
@@ -6063,17 +6056,20 @@ if (typeof window.Matomo !== 'object') {
* to wrong click numbers.
*/
this.enableLinkTracking = function (enable) {
+ if (linkTrackingEnabled) {
+ return;
+ }
linkTrackingEnabled = true;
var self = this;
- trackCallback(function () {
- trackCallbackOnReady(function () {
- addClickListeners(enable, self);
- });
- trackCallbackOnLoad(function () {
- addClickListeners(enable, self);
- });
+
+ trackCallbackOnReady(function () {
+ linkTrackingInstalled = true;
+
+ var element = documentAlias.body;
+ addClickListener(element, enable, true);
});
+
};
/**