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:
-rw-r--r--lang/en.php1
-rw-r--r--plugins/CoreHome/templates/broadcast.js89
-rw-r--r--plugins/CoreHome/templates/datatable_rowactions.js38
-rw-r--r--plugins/CoreHome/templates/popover.js5
-rw-r--r--plugins/Transitions/templates/transitions.js10
5 files changed, 113 insertions, 30 deletions
diff --git a/lang/en.php b/lang/en.php
index 9fe607ed47..ccb102ac56 100644
--- a/lang/en.php
+++ b/lang/en.php
@@ -1661,6 +1661,7 @@ And thank you for using Piwik!',
'RowEvolution_PickARow' => 'Pick a row to compare',
'RowEvolution_PickAnotherRow' => 'Pick another row to compare',
'RowEvolution_MultiRowEvolutionTitle' => 'Evolution of multiple rows',
+ 'Transitions_PluginDescription' => 'Reports about previous and following actions for each page URL.',
'Transitions_IncomingTraffic' => 'Incoming traffic',
'Transitions_OutgoingTraffic' => 'Outgoing traffic',
'Transitions_XOfAllPageviews' => '%s of all pageviews',
diff --git a/plugins/CoreHome/templates/broadcast.js b/plugins/CoreHome/templates/broadcast.js
index 15212ec707..6e2c22648c 100644
--- a/plugins/CoreHome/templates/broadcast.js
+++ b/plugins/CoreHome/templates/broadcast.js
@@ -27,6 +27,16 @@ var broadcast = {
*/
_isInit: false,
+ /**
+ * Last known hash parts
+ */
+ currentHashParts: [null],
+
+ /**
+ * Callbacks for second hash change
+ */
+ secondHashHandlers: [],
+
/**
* Initializes broadcast object
* @return {void}
@@ -60,19 +70,50 @@ var broadcast = {
// Unbind any previously attached resize handlers
$(window).off('resize');
-
- // hash doesn't contain the first # character.
- if( hash ) {
- // restore ajax loaded state
- broadcast.loadAjaxContent(hash);
-
- // Hack: make sure the "Widgets & Dashboard" is deleted on reload
- $('#dashboardSettings').remove();
- $('#dashboardWidgetsArea').dashboard('destroy');
- } else {
- // start page
- $('#content').empty();
- }
+
+ // hash doesn't contain the first # character.
+ if( hash ) {
+ var hashParts = hash.split('#');
+
+ var firstHashUpdated = (hashParts.length == 1); // i.e. no second hash yet
+ var secondHashUpdated = (hashParts.length > 1 && hashParts[0] == broadcast.currentHashParts[0]);
+ if (broadcast.currentHashParts[0] === null) {
+ // new page load
+ firstHashUpdated = true;
+ secondHashUpdated = (hashParts.length > 1);
+ }
+
+ if (firstHashUpdated) {
+ Piwik_Popover.close();
+
+ if (hashParts[0] != broadcast.currentHashParts[0]) {
+ // restore ajax loaded state
+ broadcast.loadAjaxContent(hashParts[0]);
+
+ // make sure the "Widgets & Dashboard" is deleted on reload
+ $('#dashboardSettings').remove();
+ $('#dashboardWidgetsArea').dashboard('destroy');
+ }
+ }
+
+ if (secondHashUpdated && hashParts[1] == '') {
+ Piwik_Popover.close();
+ } else if (secondHashUpdated) {
+ var secondHashParts = hashParts[1].split(':');
+ var handlerName = secondHashParts[0];
+ secondHashParts.shift();
+ var param = secondHashParts.join(':');
+ if (typeof broadcast.secondHashHandlers[handlerName] != 'undefined') {
+ broadcast.secondHashHandlers[handlerName](param);
+ }
+ }
+
+ } else {
+ // start page
+ $('#content').empty();
+ }
+
+ broadcast.currentHashParts = hashParts;
},
/**
@@ -99,7 +140,7 @@ var broadcast = {
var currentHashStr = broadcast.getHash();
ajaxUrl = ajaxUrl.replace(/^\?|&#/,'');
-
+
var params_vals = ajaxUrl.split("&");
for( var i=0; i<params_vals.length; i++ )
{
@@ -230,6 +271,24 @@ var broadcast = {
return urlStr;
},
+ /**
+ * Update the part after the second hash
+ */
+ propagateNewSecondHash: function(handlerName, value)
+ {
+ var url = window.location.href;
+ var urlParts = url.split('#');
+ urlParts[2] = handlerName === false ? '' : handlerName + ':' + value;
+ window.location.href = urlParts.join('#');
+ },
+
+ /**
+ * Add a handler for the secon hash
+ */
+ addSecondHashHandler: function(handlerName, callback) {
+ this.secondHashHandlers[handlerName] = callback;
+ },
+
/**
* Loads the given url with ajax and replaces the content
*
@@ -427,7 +486,7 @@ var broadcast = {
*/
getHash: function ()
{
- return broadcast.getHashFromUrl().replace(/^#/, '');
+ return broadcast.getHashFromUrl().replace(/^#/, '').split('#')[0];
},
/**
diff --git a/plugins/CoreHome/templates/datatable_rowactions.js b/plugins/CoreHome/templates/datatable_rowactions.js
index 5bfd5448fd..33d0332656 100644
--- a/plugins/CoreHome/templates/datatable_rowactions.js
+++ b/plugins/CoreHome/templates/datatable_rowactions.js
@@ -16,6 +16,13 @@ var DataTable_RowActions_Registry = {
registry: [],
register: function(action) {
+ var createInstance = action.createInstance;
+ action.createInstance = function(dataTable) {
+ var instance = createInstance(dataTable);
+ instance.actionName = action.name;
+ return instance;
+ };
+
this.registry.push(action);
},
@@ -32,6 +39,14 @@ var DataTable_RowActions_Registry = {
}
}
return available;
+ },
+
+ getActionByName: function(name) {
+ for (var i = 0; i < this.registry.length; i++) {
+ if (this.registry[i].name == name) {
+ return this.registry[i];
+ }
+ }
}
};
@@ -85,6 +100,9 @@ function DataTable_RowAction(dataTable) {
// has to be overridden in subclasses
this.trEventName = 'piwikTriggerRowAction';
+
+ // set in registry
+ this.actionName = 'RowAction';
}
/** Initialize a row when the table is loaded */
@@ -164,18 +182,22 @@ DataTable_RowAction.prototype.getLabelFromTr = function(tr) {
/**
* Base method for opening popovers.
- * TODO: In the future, this method will remember the parameter in the url.
- * After doing general things, doOpenPopover is called.
+ * This method will remember the parameter in the url and call doOpenPopover().
*/
DataTable_RowAction.prototype.openPopover = function(parameter) {
- // maybe add popover name / param after a second hash?
- //var currentHashStr = broadcast.getHashFromUrl().replace(/^#/, '');
- //currentHashStr = broadcast.updateParamValue('foo=bar', currentHashStr);
- //$.history.load(currentHashStr);
-
- this.doOpenPopover(parameter);
+ broadcast.propagateNewSecondHash('RowAction', this.actionName + ':' + parameter);
};
+broadcast.addSecondHashHandler('RowAction', function(param) {
+ var paramParts = param.split(':');
+ var rowActionName = paramParts[0];
+ paramParts.shift();
+ param = paramParts.join(':');
+
+ var rowAction = DataTable_RowActions_Registry.getActionByName(rowActionName);
+ rowAction.createInstance().doOpenPopover(param);
+});
+
/** To be overridden */
DataTable_RowAction.prototype.performAction = function(label, tr, e) {
};
diff --git a/plugins/CoreHome/templates/popover.js b/plugins/CoreHome/templates/popover.js
index 6ab058a252..4a131a64af 100644
--- a/plugins/CoreHome/templates/popover.js
+++ b/plugins/CoreHome/templates/popover.js
@@ -29,6 +29,7 @@ var Piwik_Popover = (function() {
piwikHelper.abortQueueAjax();
$('.ui-widget-overlay').off('click.popover');
isOpen = false;
+ broadcast.propagateNewSecondHash(false);
}
});
@@ -121,7 +122,9 @@ var Piwik_Popover = (function() {
/** Close the popover */
close: function() {
- container.dialog('close');
+ if (isOpen) {
+ container.dialog('close');
+ }
}
};
diff --git a/plugins/Transitions/templates/transitions.js b/plugins/Transitions/templates/transitions.js
index 75d299297f..9e82941c88 100644
--- a/plugins/Transitions/templates/transitions.js
+++ b/plugins/Transitions/templates/transitions.js
@@ -33,7 +33,6 @@ DataTable_RowActions_Transitions.prototype.doOpenPopover = function(link) {
this.transitions.showPopover();
};
-
DataTable_RowActions_Registry.register({
name: 'Transitions',
@@ -235,7 +234,7 @@ Piwik_Transitions.prototype.renderEntries = function(onlyBg) {
var self = this;
var gradient = this.canvas.createHorizontalGradient('#CFEDCA', '#91DE83', 'left');
if (this.highlightedGroup == 'directEntries') {
- gradient = this.canvas.createHorizontalGradient('#FAE2C0', '#FAD293', 'left')
+ gradient = this.canvas.createHorizontalGradient('#FAE2C0', '#FAD293', 'left');
}
this.canvas.renderBox({
side: 'left',
@@ -262,7 +261,7 @@ Piwik_Transitions.prototype.renderExits = function(onlyBg) {
var self = this;
var gradient = this.canvas.createHorizontalGradient('#CFEDCA', '#91DE83', 'right');
if (this.highlightedGroup == 'exits') {
- gradient = this.canvas.createHorizontalGradient('#FAE2C0', '#FAD293', 'right')
+ gradient = this.canvas.createHorizontalGradient('#FAE2C0', '#FAD293', 'right');
}
this.canvas.renderBox({
side: 'right',
@@ -303,7 +302,7 @@ Piwik_Transitions.prototype.renderOpenGroup = function(groupName, side, onlyBg)
var gradientOthers = this.canvas.createHorizontalGradient('#F5F3EB', '#E8E4D5', side);
var gradientBackground = this.canvas.createHorizontalGradient('#FFFFFF', '#B0CAE8', side);
if (groupName == this.highlightedGroup) {
- gradientBackground = this.canvas.createHorizontalGradient('#FFFFFF', '#FAD293', side)
+ gradientBackground = this.canvas.createHorizontalGradient('#FFFFFF', '#FAD293', side);
}
// remember current offsets to reset them later for drawing the background
@@ -409,7 +408,7 @@ Piwik_Transitions.prototype.renderClosedGroup = function(groupName, side, onlyBg
var self = this;
var gradient = this.canvas.createHorizontalGradient('#DDE4ED', '#9BBADE', side);
if (groupName == this.highlightedGroup) {
- gradient = this.canvas.createHorizontalGradient('#FAE2C0', '#FAD293', side)
+ gradient = this.canvas.createHorizontalGradient('#FAE2C0', '#FAD293', side);
}
var nbTransitionsVarName = groupName + 'NbTransitions';
@@ -443,7 +442,6 @@ Piwik_Transitions.prototype.renderClosedGroup = function(groupName, side, onlyBg
/** Reload the entire popover for a different URL */
Piwik_Transitions.prototype.reloadPopover = function(url) {
- Piwik_Popover.close();
this.rowAction.openPopover(url);
};