Welcome to mirror list, hosted at ThFree Co, Russian Federation.

rowactions.js « javascripts « Actions « plugins - github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 71b2be68854384d93879b2310c6ecc23bf94e78d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
$(function () {

    function isActionsModule(params)
    {
        return params.module == 'Actions';
    }

    function isPageUrlReport(params) {
        var action = params.action;

        return isActionsModule(params) &&
            (action == 'getPageUrls' || action == 'getEntryPageUrls' || action == 'getExitPageUrls' || action == 'getPageUrlsFollowingSiteSearch');
    };

    function isPageTitleReport(params) {
        var action = params.action;

        return isActionsModule(params) && (action == 'getPageTitles' || action == 'getPageTitlesFollowingSiteSearch');
    };

    function getLinkForTransitionAndOverlayPopover(tr)
    {
        tr = getRealRowIfComparisonRow(tr);

        var link = tr.find('> td:first > a').attr('href');
        // replace all &, that are not part of a named character reference with a tailing semicolon, with a &
        // otherwise named character references without a tailing , (like &reg) would be replaced
        link = link.replace(/&([a-z]+[^a-z;])/, '&$1');
        link = $('<textarea>').html(link).val(); // remove html entities
        return link;
    }

    if (window.DataTable_RowActions_Transitions) {
        DataTable_RowActions_Transitions.registerReport({
            isAvailableOnReport: function (dataTableParams) {
                return isPageUrlReport(dataTableParams);
            },
            isAvailableOnRow: function (dataTableParams, tr) {
                tr = getRealRowIfComparisonRow(tr);
                return isPageUrlReport(dataTableParams) && tr.find('> td:first span.label').parent().is('a')
            },
            trigger: function (tr, e, subTableLabel, originalRow) {
                var overrideParams = $.extend({}, $(originalRow || tr).data('param-override'));
                if (typeof overrideParams !== 'object') {
                    overrideParams = {};
                }

                tr = getRealRowIfComparisonRow(tr);

                var link = getLinkForTransitionAndOverlayPopover(tr);
                var popoverUrl = 'url:' + link;

                Object.keys(overrideParams).forEach(function (paramName) {
                    if (!overrideParams[paramName]) {
                        return;
                    }

                    popoverUrl += ':' + encodeURIComponent(paramName) + ':' + encodeURIComponent(overrideParams[paramName]);
                });

                this.openPopover(popoverUrl);
            }
        });

        DataTable_RowActions_Transitions.registerReport({
            isAvailableOnReport: function (dataTableParams) {
                return isPageTitleReport(dataTableParams);
            },
            isAvailableOnRow: function (dataTableParams, tr) {
                return isPageTitleReport(dataTableParams);
            },
            trigger: function (tr, e, subTableLabel) {
                DataTable_RowAction.prototype.trigger.apply(this, [tr, e, subTableLabel]);
            }
        });
    }

    if (window.DataTable_RowActions_Overlay) {
        DataTable_RowActions_Overlay.registerReport({
            isAvailableOnReport: function (dataTableParams) {
                return isPageUrlReport(dataTableParams);
            },
            onClick: function (actionA, tr, e) {
                return {
                    link: getLinkForTransitionAndOverlayPopover(tr),
                    segment: null
                }
            }
        });
    }

    function getRealRowIfComparisonRow(tr) {
        if (tr.is('.comparisonRow')) {
            var prevUntil = tr.prevUntil('.parentComparisonRow').prev();
            return prevUntil.length ? prevUntil : tr.prev();
        }
        return tr;
    }
});