1
0
قرینه از https://github.com/matomo-org/matomo.git synced 2025-08-22 15:07:44 +00:00
Files
matomo/plugins/Live/javascripts/SegmentedVisitorLog.js
dizzy f679725746 [Vue] remove angularjs from the Live plugin (#19418)
* Remove use of angularjs from SitesManager plugin and add VueEntryContainer for more convenient embedding of vue-entry use from within other Vue components (primarily for supporting twig Template... events in Vue).

* remove use of angularjs from Live plugin

* built vue files

* forgot to export

* built vue files

* fix ui test issues

* move inline script to vue directive + fix a couple vue warnings

* remove use of unneeded html_attr escape

* remove use of unneeded twig html_attr escape

* use html filter explicitly

* use href so command+click works

* get rid of two vue warnings

* use anonymous function for jquery event so this can be used properly

* destroy/compile vue components when refreshing live widget

* built vue files

* try to fix live refresh issue

* improve css, so whitespaces are always hidden between images

Co-authored-by: sgiehl <stefan@matomo.org>
Co-authored-by: sgiehl <sgiehl@users.noreply.github.com>
2022-08-25 14:46:53 +02:00

157 خطوط
4.9 KiB
JavaScript

var SegmentedVisitorLog = function() {
function getDataTableFromApiMethod(apiMethod)
{
var div = $(require('piwik/UI').DataTable.getDataTableByReport(apiMethod));
if (div.length && div.data('uiControlObject')) {
return div.data('uiControlObject');
}
}
function getLabelFromTr ($tr, apiMethod) {
var label;
if (apiMethod && 0 === apiMethod.indexOf('Actions.')) {
// for now only use this for Actions... I know a hack :( Otherwise in Search Engines
// it would show "http://www.searchenginename.org" instead of "SearchEngineName"
label = $tr.attr('data-url-label');
}
if (!label) {
label = $tr.find('.label .value').text();
}
if (label) {
label = $.trim(label);
}
return label;
}
function getDimensionFromApiMethod(apiMethod)
{
if (!apiMethod) {
return;
}
var dataTable = getDataTableFromApiMethod(apiMethod);
var metadata = getMetadataFromDataTable(dataTable);
if (metadata && metadata.dimension) {
return metadata.dimension;
}
}
function getMetadataFromDataTable(dataTable)
{
if (dataTable) {
return dataTable.getReportMetadata();
}
}
function findTitleOfRowHavingRawSegmentValue(apiMethod, rawSegmentValue)
{
var $tr = $('[data-report="' + apiMethod + '"] tr[data-segment-filter="' + rawSegmentValue + '"]').first();
return getLabelFromTr($tr, apiMethod);
}
function setPopoverTitle(apiMethod, segment, index) {
var dataTable = getDataTableFromApiMethod(apiMethod);
if (!dataTable) {
if (index < 15) {
// this is needed when the popover is opened before the dataTable is there which can often
// happen when opening the popover directly via URL (broadcast.popoverHandler)
setTimeout(function () {
setPopoverTitle(apiMethod, segment, index + 1);
}, 150);
}
return;
}
var segmentName = getDimensionFromApiMethod(apiMethod);
var segmentValue = findTitleOfRowHavingRawSegmentValue(apiMethod, segment);
if (!segmentName || (segment && segment.indexOf(';') > 0)) {
segmentName = _pk_translate('General_Segment');
var segmentParts = segment.split(';');
segmentValue = segmentParts.join(' ' + _pk_translate('General_And') + ' ');
}
segmentName = piwikHelper.escape(segmentName);
segmentName = piwikHelper.htmlEntities(segmentName);
segmentValue = piwikHelper.escape(segmentValue);
segmentValue = piwikHelper.htmlEntities(segmentValue);
segmentName = segmentName.replace(/(&amp;)(#[0-9]{2,5};)/g, '&$2');
segmentValue = segmentValue.replace(/(&amp;)(#[0-9]{2,5};)/g, '&$2');
var title = _pk_translate('Live_SegmentedVisitorLogTitle', [segmentName, segmentValue]);
Piwik_Popover.setTitle(title);
}
function show(apiMethod, segment, extraParams) {
if (!piwik.visitorLogEnabled) {
console.error('Visitor Log was disabled in website settings');
return;
}
// open the popover
var box = Piwik_Popover.showLoading('Segmented Visits Log');
box.addClass('segmentedVisitorLogPopover');
var callback = function (html) {
Piwik_Popover.setContent(html);
// remove title returned from the server
var title = box.find('.enrichedHeadline').closest('h2');
// if the enriched headline has been already parsed, there might be additional content,
// so we prefer using the original title, which is placed in div with class "title"
// @see plugins/CoreHome/vue/src/EnrichedHeadline/EnrichedHeadline.vue
if (title.find('.title')) {
var defaultTitle = title.find('.title').text();
} else {
var defaultTitle = title.text();
}
if (title.length) {
title.remove();
}
Piwik_Popover.setTitle(defaultTitle);
setPopoverTitle(apiMethod, segment, 0);
};
// prepare loading the popover contents
var requestParams = {
module: 'Live',
action: 'indexVisitorLog',
segment: encodeURIComponent(segment),
disableLink: 1,
small: 1,
enableAddNewSegment: 1,
};
$.extend(requestParams, extraParams);
var ajaxRequest = new ajaxHelper();
ajaxRequest.addParams(requestParams, 'get');
ajaxRequest.withTokenInUrl();
ajaxRequest.setCallback(callback);
ajaxRequest.setFormat('html');
ajaxRequest.send();
}
return {
show: show
}
}();