Skip to content
Extraits de code Groupes Projets
Valider 8324df36 rédigé par Matthieu Aubry's avatar Matthieu Aubry
Parcourir les fichiers

Merge pull request #9278 from piwik/extendable_rowactions

Make transtion and overlay row actions extendable by other plugins
parents 926af9c7 2ebe6246
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -105,6 +105,7 @@ class Actions extends \Piwik\Plugin
public function getJsFiles(&$jsFiles)
{
$jsFiles[] = "plugins/Actions/javascripts/actionsDataTable.js";
$jsFiles[] = "plugins/Actions/javascripts/rowactions.js";
}
public function isSiteSearchEnabled($idSites, $idSite)
......
$(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)
{
var link = tr.find('> td:first > a').attr('href');
link = $('<textarea>').html(link).val(); // remove html entities
return link;
}
DataTable_RowActions_Transitions.registerReport({
isAvailableOnReport: function (dataTableParams) {
return isPageUrlReport(dataTableParams);
},
isAvailableOnRow: function (dataTableParams, tr) {
return isPageUrlReport(dataTableParams) && tr.find('> td:first span.label').parent().is('a')
},
trigger: function (tr, e, subTableLabel) {
var link = getLinkForTransitionAndOverlayPopover(tr);
this.openPopover('url:' + link);
}
});
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]);
}
});
DataTable_RowActions_Overlay.registerReport({
isAvailableOnReport: function (dataTableParams) {
return isPageUrlReport(dataTableParams);
},
onClick: function (actionA, tr, e) {
return {
link: getLinkForTransitionAndOverlayPopover(tr),
segment: null
}
}
});
});
\ No newline at end of file
......@@ -15,39 +15,47 @@ function DataTable_RowActions_Overlay(dataTable) {
DataTable_RowActions_Overlay.prototype = new DataTable_RowAction;
DataTable_RowActions_Overlay.registeredReports = [];
DataTable_RowActions_Overlay.registerReport = function (handler) {
DataTable_RowActions_Overlay.registeredReports.push(handler);
}
DataTable_RowActions_Overlay.prototype.onClick = function (actionA, tr, e) {
if (!actionA.data('overlay-manipulated')) {
actionA.data('overlay-manipulated', 1);
var segment, link;
if (DataTable_RowActions_Transitions.isActionCustomDimensionReport(this.dataTable.param)) {
link = this.getLabelFromTr(tr);
if (link && link.substr(0, 1) === '@') {
link = link.substr(1);
var i = 0;
for (i; i < DataTable_RowActions_Overlay.registeredReports.length; i++) {
var report = DataTable_RowActions_Overlay.registeredReports[i];
if (report
&& report.onClick
&& report.isAvailableOnReport
&& report.isAvailableOnReport(this.dataTable.param)) {
var result = report.onClick.apply(this, arguments);
if (!result || !result.link) {
return;
}
link = result.link;
if (result.segment) {
segment = result.segment;
}
break;
}
link = 'http://' + unescape(link);
var subtable = tr.closest('table');
if (subtable.is('.subDataTable')) {
var prev = subtable.closest('tr').prev();
segment = prev.attr('data-segment-filter');
}
} else {
link = tr.find('> td:first > a').attr('href');
link = $('<textarea>').html(link).val(); // remove html entities
}
if (link) {
var href = Overlay_Helper.getOverlayLink(this.dataTable.param.idSite, 'month', 'today', segment, link);
var href = Overlay_Helper.getOverlayLink(this.dataTable.param.idSite, 'month', 'today', segment, link);
actionA.attr({
target: '_blank',
href: href
});
actionA.attr({
target: '_blank',
href: href
});
}
}
return true;
......@@ -77,11 +85,17 @@ DataTable_RowActions_Registry.register({
return false;
}
if (DataTable_RowActions_Transitions.isActionCustomDimensionReport(dataTableParams)) {
return true;
var i = 0;
for (i; i < DataTable_RowActions_Overlay.registeredReports.length; i++) {
var report = DataTable_RowActions_Overlay.registeredReports[i];
if (report
&& report.isAvailableOnReport
&& report.isAvailableOnReport(dataTableParams)) {
return true;
}
}
return DataTable_RowActions_Transitions.isPageUrlReport(dataTableParams.module, dataTableParams.action);
return false;
},
isAvailableOnRow: function (dataTableParams, tr) {
......
......@@ -30,44 +30,25 @@ DataTable_RowActions_Transitions.isPageTitleReport = function (module, action) {
return module == 'Actions' && (action == 'getPageTitles' || action == 'getPageTitlesFollowingSiteSearch');
};
DataTable_RowActions_Transitions.isActionCustomDimensionReport = function (params) {
return params.module == 'CustomDimensions' && params.action == 'getCustomDimension' && params.scopeOfDimension && params.scopeOfDimension === 'action';
};
DataTable_RowActions_Transitions.registeredReports = [];
DataTable_RowActions_Transitions.registerReport = function (handler) {
DataTable_RowActions_Transitions.registeredReports.push(handler);
}
DataTable_RowActions_Transitions.prototype.trigger = function (tr, e, subTableLabel) {
var link = tr.find('> td:first > a').attr('href');
link = $('<textarea>').html(link).val(); // remove html entities
var module = this.dataTable.param.module;
var action = this.dataTable.param.action;
if (DataTable_RowActions_Transitions.isPageUrlReport(module, action)) {
this.openPopover('url:' + link);
} else if (DataTable_RowActions_Transitions.isPageTitleReport(module, action)) {
DataTable_RowAction.prototype.trigger.apply(this, [tr, e, subTableLabel]);
} else if (DataTable_RowActions_Transitions.isActionCustomDimensionReport(this.dataTable.param)) {
var label = this.getLabelFromTr(tr);
if (label && label.substr(0, 1) === '@') {
label = label.substr(1);
}
var subtable = tr.closest('table');
if (subtable.is('.subDataTable')) {
var prev = subtable.closest('tr').prev();
var segment = prev.attr('data-segment-filter');
if (segment) {
label = unescape(label);
if (this.transitions === null) {
this.transitions = new Piwik_Transitions('url', label, this, segment);
} else {
this.transitions.reset('url', label, segment);
}
this.transitions.showPopover();
}
var i = 0;
for (i; i < DataTable_RowActions_Transitions.registeredReports.length; i++) {
var report = DataTable_RowActions_Transitions.registeredReports[i];
if (report
&& report.trigger
&& report.isAvailableOnReport
&& report.isAvailableOnReport(this.dataTable.param)) {
report.trigger.apply(this, arguments);
return;
}
} else {
alert('Transitions can\'t be used on this report.');
}
alert('Transitions can\'t be used on this report.');
};
DataTable_RowActions_Transitions.prototype.performAction = function (label, tr, e) {
......@@ -118,11 +99,17 @@ DataTable_RowActions_Registry.register({
},
isAvailableOnReport: function (dataTableParams) {
return (
DataTable_RowActions_Transitions.isPageUrlReport(dataTableParams.module, dataTableParams.action) ||
DataTable_RowActions_Transitions.isPageTitleReport(dataTableParams.module, dataTableParams.action) ||
DataTable_RowActions_Transitions.isActionCustomDimensionReport(dataTableParams)
);
var i = 0;
for (i; i < DataTable_RowActions_Transitions.registeredReports.length; i++) {
var report = DataTable_RowActions_Transitions.registeredReports[i];
if (report
&& report.isAvailableOnReport
&& report.isAvailableOnReport(dataTableParams)) {
return true;
}
}
return false;
},
isAvailableOnRow: function (dataTableParams, tr) {
......@@ -130,16 +117,18 @@ DataTable_RowActions_Registry.register({
// not available on groups (i.e. folders)
return false;
}
if (DataTable_RowActions_Transitions.isPageUrlReport(dataTableParams.module, dataTableParams.action)
&& !tr.find('> td:first span.label').parent().is('a')) {
// not on page url without link (i.e. "Page URL not defined")
return false;
}
if (DataTable_RowActions_Transitions.isActionCustomDimensionReport(dataTableParams)
&& !tr.parents('table').first().hasClass('subDataTable')) {
// only show it in subtables of custom dimensions
return false;
var i = 0;
for (i; i < DataTable_RowActions_Transitions.registeredReports.length; i++) {
var report = DataTable_RowActions_Transitions.registeredReports[i];
if (report
&& report.isAvailableOnRow
&& report.isAvailableOnReport
&& report.isAvailableOnReport(dataTableParams)) {
return report.isAvailableOnRow(dataTableParams, tr);
}
}
return true;
}
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter