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:
authorMatthieu Aubry <matt@piwik.org>2015-11-26 00:09:55 +0300
committerMatthieu Aubry <matt@piwik.org>2015-11-26 00:09:55 +0300
commit8324df36220fd23ea81cce8c4550047e76e7ecf1 (patch)
treed3254a60d63dea3043cedb68c4faa8874dd9001a
parent926af9c74c67afc924e60fd6619ca499d1baab58 (diff)
parent2ebe6246746356bebf75b801b6765e22b4c07919 (diff)
Merge pull request #9278 from piwik/extendable_rowactions
Make transtion and overlay row actions extendable by other plugins
-rw-r--r--plugins/Actions/Actions.php1
-rw-r--r--plugins/Actions/javascripts/rowactions.js65
-rw-r--r--plugins/Overlay/javascripts/rowaction.js66
-rw-r--r--plugins/Transitions/javascripts/transitions.js85
4 files changed, 143 insertions, 74 deletions
diff --git a/plugins/Actions/Actions.php b/plugins/Actions/Actions.php
index 557e4c77b8..dfd773bea4 100644
--- a/plugins/Actions/Actions.php
+++ b/plugins/Actions/Actions.php
@@ -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)
diff --git a/plugins/Actions/javascripts/rowactions.js b/plugins/Actions/javascripts/rowactions.js
new file mode 100644
index 0000000000..33050b90ed
--- /dev/null
+++ b/plugins/Actions/javascripts/rowactions.js
@@ -0,0 +1,65 @@
+$(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
diff --git a/plugins/Overlay/javascripts/rowaction.js b/plugins/Overlay/javascripts/rowaction.js
index 8f11c736d0..de063b990e 100644
--- a/plugins/Overlay/javascripts/rowaction.js
+++ b/plugins/Overlay/javascripts/rowaction.js
@@ -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) {
diff --git a/plugins/Transitions/javascripts/transitions.js b/plugins/Transitions/javascripts/transitions.js
index a11f6860c6..20a4e7febf 100644
--- a/plugins/Transitions/javascripts/transitions.js
+++ b/plugins/Transitions/javascripts/transitions.js
@@ -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;
}