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:
Diffstat (limited to 'plugins/Transitions/templates/transitions.js')
-rw-r--r--plugins/Transitions/templates/transitions.js2380
1 files changed, 1190 insertions, 1190 deletions
diff --git a/plugins/Transitions/templates/transitions.js b/plugins/Transitions/templates/transitions.js
index 3f2d63db99..dc54e80d54 100644
--- a/plugins/Transitions/templates/transitions.js
+++ b/plugins/Transitions/templates/transitions.js
@@ -11,106 +11,106 @@
//
function DataTable_RowActions_Transitions(dataTable) {
- this.dataTable = dataTable;
- this.transitions = null;
+ this.dataTable = dataTable;
+ this.transitions = null;
}
DataTable_RowActions_Transitions.prototype = new DataTable_RowAction;
/** Static helper method to launch transitions from anywhere */
-DataTable_RowActions_Transitions.launchForUrl = function(url) {
- broadcast.propagateNewPopoverParameter('RowAction', 'Transitions:url:' + url);
+DataTable_RowActions_Transitions.launchForUrl = function (url) {
+ broadcast.propagateNewPopoverParameter('RowAction', 'Transitions:url:' + url);
};
-DataTable_RowActions_Transitions.isPageUrlReport = function(module, action) {
- return module == 'Actions' &&
- (action == 'getPageUrls' || action == 'getEntryPageUrls' || action == 'getExitPageUrls' || action == 'getPageUrlsFollowingSiteSearch');
+DataTable_RowActions_Transitions.isPageUrlReport = function (module, action) {
+ return module == 'Actions' &&
+ (action == 'getPageUrls' || action == 'getEntryPageUrls' || action == 'getExitPageUrls' || action == 'getPageUrlsFollowingSiteSearch');
};
-DataTable_RowActions_Transitions.isPageTitleReport = function(module, action) {
- return module == 'Actions' && (action == 'getPageTitles' || action == 'getPageTitlesFollowingSiteSearch');
+DataTable_RowActions_Transitions.isPageTitleReport = function (module, action) {
+ return module == 'Actions' && (action == 'getPageTitles' || action == 'getPageTitlesFollowingSiteSearch');
}
-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 {
- alert('Transitions can\'t be used on this report.');
- }
+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 {
+ alert('Transitions can\'t be used on this report.');
+ }
};
-DataTable_RowAction.prototype.performAction = function(label, tr, e) {
- var separator = ' > '; // Piwik_API_DataTableManipulator_LabelFilter::SEPARATOR_RECURSIVE_LABEL
- var labelParts = label.split(separator);
- for (var i = 0; i < labelParts.length; i++) {
- labelParts[i] = $.trim(decodeURIComponent(labelParts[i]));
- }
- label = labelParts.join(piwik.config.action_url_category_delimiter);
- this.openPopover('title:' + label);
+DataTable_RowAction.prototype.performAction = function (label, tr, e) {
+ var separator = ' > '; // Piwik_API_DataTableManipulator_LabelFilter::SEPARATOR_RECURSIVE_LABEL
+ var labelParts = label.split(separator);
+ for (var i = 0; i < labelParts.length; i++) {
+ labelParts[i] = $.trim(decodeURIComponent(labelParts[i]));
+ }
+ label = labelParts.join(piwik.config.action_url_category_delimiter);
+ this.openPopover('title:' + label);
};
-DataTable_RowActions_Transitions.prototype.doOpenPopover = function(link) {
- var parts = link.split(':');
- if (parts.length < 2) {
- return;
- }
-
- var actionType = parts[0];
- parts.shift();
- var actionName = parts.join(':');
-
- if (this.transitions === null) {
- this.transitions = new Piwik_Transitions(actionType, actionName, this);
- } else {
- this.transitions.reset(actionType, actionName);
- }
- this.transitions.showPopover();
+DataTable_RowActions_Transitions.prototype.doOpenPopover = function (link) {
+ var parts = link.split(':');
+ if (parts.length < 2) {
+ return;
+ }
+
+ var actionType = parts[0];
+ parts.shift();
+ var actionName = parts.join(':');
+
+ if (this.transitions === null) {
+ this.transitions = new Piwik_Transitions(actionType, actionName, this);
+ } else {
+ this.transitions.reset(actionType, actionName);
+ }
+ this.transitions.showPopover();
};
DataTable_RowActions_Registry.register({
- name: 'Transitions',
-
- dataTableIcon: 'plugins/Transitions/templates/transitions_icon.png',
- dataTableIconHover: 'plugins/Transitions/templates/transitions_icon_hover.png',
-
- order: 20,
-
- dataTableIconTooltip: [
- _pk_translate('General_TransitionsRowActionTooltipTitle_js'),
- _pk_translate('General_TransitionsRowActionTooltip_js')
- ],
-
- createInstance: function(dataTable) {
- return new DataTable_RowActions_Transitions(dataTable);
- },
-
- isAvailableOnReport: function(dataTableParams) {
- return (
- DataTable_RowActions_Transitions.isPageUrlReport(dataTableParams.module, dataTableParams.action) ||
- DataTable_RowActions_Transitions.isPageTitleReport(dataTableParams.module, dataTableParams.action)
- );
- },
-
- isAvailableOnRow: function(dataTableParams, tr) {
- if (tr.attr('id')) {
- // 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;
- }
- return true;
- }
+ name: 'Transitions',
+
+ dataTableIcon: 'plugins/Transitions/templates/transitions_icon.png',
+ dataTableIconHover: 'plugins/Transitions/templates/transitions_icon_hover.png',
+
+ order: 20,
+
+ dataTableIconTooltip: [
+ _pk_translate('General_TransitionsRowActionTooltipTitle_js'),
+ _pk_translate('General_TransitionsRowActionTooltip_js')
+ ],
+
+ createInstance: function (dataTable) {
+ return new DataTable_RowActions_Transitions(dataTable);
+ },
+
+ isAvailableOnReport: function (dataTableParams) {
+ return (
+ DataTable_RowActions_Transitions.isPageUrlReport(dataTableParams.module, dataTableParams.action) ||
+ DataTable_RowActions_Transitions.isPageTitleReport(dataTableParams.module, dataTableParams.action)
+ );
+ },
+
+ isAvailableOnRow: function (dataTableParams, tr) {
+ if (tr.attr('id')) {
+ // 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;
+ }
+ return true;
+ }
});
@@ -120,587 +120,587 @@ DataTable_RowActions_Registry.register({
//
function Piwik_Transitions(actionType, actionName, rowAction) {
- this.reset(actionType, actionName);
- this.rowAction = rowAction;
+ this.reset(actionType, actionName);
+ this.rowAction = rowAction;
- this.ajax = new Piwik_Transitions_Ajax();
- this.model = new Piwik_Transitions_Model(this.ajax);
+ this.ajax = new Piwik_Transitions_Ajax();
+ this.model = new Piwik_Transitions_Model(this.ajax);
- this.leftGroups = ['previousPages', 'previousSiteSearches', 'searchEngines', 'websites', 'campaigns'];
- this.rightGroups = ['followingPages', 'followingSiteSearches', 'downloads', 'outlinks'];
+ this.leftGroups = ['previousPages', 'previousSiteSearches', 'searchEngines', 'websites', 'campaigns'];
+ this.rightGroups = ['followingPages', 'followingSiteSearches', 'downloads', 'outlinks'];
}
-Piwik_Transitions.prototype.reset = function(actionType, actionName) {
- this.actionType = actionType;
- this.actionName = actionName;
+Piwik_Transitions.prototype.reset = function (actionType, actionName) {
+ this.actionType = actionType;
+ this.actionName = actionName;
- this.popover = null;
- this.canvas = null;
- this.centerBox = null;
+ this.popover = null;
+ this.canvas = null;
+ this.centerBox = null;
- this.leftOpenGroup = 'previousPages';
- this.rightOpenGroup = 'followingPages';
+ this.leftOpenGroup = 'previousPages';
+ this.rightOpenGroup = 'followingPages';
- this.highlightedGroup = false;
- this.highlightedGroupSide = false;
- this.highlightedGroupCenterEl = false;
+ this.highlightedGroup = false;
+ this.highlightedGroupSide = false;
+ this.highlightedGroupCenterEl = false;
};
/** Open the popover */
-Piwik_Transitions.prototype.showPopover = function() {
- var self = this;
-
- this.popover = Piwik_Popover.showLoading('Transitions', self.actionName, 550);
- Piwik_Popover.addHelpButton('http://piwik.org/docs/transitions');
-
- var bothLoaded = function() {
- Piwik_Popover.setContent(Piwik_Transitions.popoverHtml);
-
- self.preparePopover();
- self.model.htmlLoaded();
-
- if (self.model.searchEnginesNbTransitions > 0 && self.model.websitesNbTransitions > 0
- + self.model.campaignsNbTransitions > 0) {
- self.canvas.narrowMode();
- }
-
- self.render();
- self.canvas.truncateVisibleBoxTexts();
- };
-
- // load the popover HTML (only done once)
- var callbackForHtml = false;
- if (typeof Piwik_Transitions.popoverHtml == 'undefined') {
- this.ajax.callTransitionsController('renderPopover', function(html) {
- Piwik_Transitions.popoverHtml = html;
- if (callbackForHtml !== false) {
- callbackForHtml();
- }
- });
- }
-
- // load the data
- self.model.loadData(self.actionType, self.actionName, function() {
- if (typeof Piwik_Transitions.popoverHtml == 'undefined') {
- // html not there yet
- callbackForHtml = bothLoaded;
- } else {
- // html already loaded
- bothLoaded();
- }
- });
+Piwik_Transitions.prototype.showPopover = function () {
+ var self = this;
+
+ this.popover = Piwik_Popover.showLoading('Transitions', self.actionName, 550);
+ Piwik_Popover.addHelpButton('http://piwik.org/docs/transitions');
+
+ var bothLoaded = function () {
+ Piwik_Popover.setContent(Piwik_Transitions.popoverHtml);
+
+ self.preparePopover();
+ self.model.htmlLoaded();
+
+ if (self.model.searchEnginesNbTransitions > 0 && self.model.websitesNbTransitions > 0
+ + self.model.campaignsNbTransitions > 0) {
+ self.canvas.narrowMode();
+ }
+
+ self.render();
+ self.canvas.truncateVisibleBoxTexts();
+ };
+
+ // load the popover HTML (only done once)
+ var callbackForHtml = false;
+ if (typeof Piwik_Transitions.popoverHtml == 'undefined') {
+ this.ajax.callTransitionsController('renderPopover', function (html) {
+ Piwik_Transitions.popoverHtml = html;
+ if (callbackForHtml !== false) {
+ callbackForHtml();
+ }
+ });
+ }
+
+ // load the data
+ self.model.loadData(self.actionType, self.actionName, function () {
+ if (typeof Piwik_Transitions.popoverHtml == 'undefined') {
+ // html not there yet
+ callbackForHtml = bothLoaded;
+ } else {
+ // html already loaded
+ bothLoaded();
+ }
+ });
};
/** Prepare the popover with the basic DOM to add data later. */
-Piwik_Transitions.prototype.preparePopover = function() {
- var self = this;
-
- var width = 900;
- var height = 550;
-
- var canvasBgLeft = self.prepareCanvas('Background_Left', width, height);
- var canvasBgRight = self.prepareCanvas('Background_Right', width, height);
- var canvasLeft = self.prepareCanvas('Left', width, height);
- var canvasRight = self.prepareCanvas('Right', width, height);
- var canvasLoops = self.prepareCanvas('Loops', width, height);
-
- self.canvas = new Piwik_Transitions_Canvas(canvasBgLeft, canvasBgRight, canvasLeft, canvasRight,
- canvasLoops, width, height);
-
- self.centerBox = self.popover.find('#Transitions_CenterBox');
-
- var title = self.actionName;
- if (self.actionType == 'url') {
- title = Piwik_Transitions_Util.shortenUrl(title, true);
- }
- title = self.centerBox.find('h2')
- .addClass('Transitions_ApplyTextAndTruncate')
- .data('text', title)
- .data('maxLines', 3);
-
- if (self.actionType == 'url') {
- title.click(function() {
- self.openExternalUrl(self.actionName);
- }).css('cursor', 'pointer');
- }
-
- title.add(self.popover.find('p.Transitions_Pageviews')).hover(function() {
- var totalNbPageviews = self.model.getTotalNbPageviews();
- if (totalNbPageviews > 0) {
- var share = Math.round(self.model.pageviews / totalNbPageviews * 1000) / 10;
-
- var text = Piwik_Transitions_Translations.ShareOfAllPageviews;
- text = text.replace(/%s/, self.model.pageviews).replace(/%s/, share + '%');
- text += '<br /><i>' + Piwik_Transitions_Translations.DateRange + ' ' + self.model.date + '</i>';
-
- var title = '<span class="tip-title">' + piwikHelper.addBreakpointsToUrl(self.actionName) +
- '</span><br />';
-
- Piwik_Tooltip.show(title + text, 'Transitions_Tooltip_Small', 300);
- }
- }, function() {
- Piwik_Tooltip.hide();
- });
+Piwik_Transitions.prototype.preparePopover = function () {
+ var self = this;
+
+ var width = 900;
+ var height = 550;
+
+ var canvasBgLeft = self.prepareCanvas('Background_Left', width, height);
+ var canvasBgRight = self.prepareCanvas('Background_Right', width, height);
+ var canvasLeft = self.prepareCanvas('Left', width, height);
+ var canvasRight = self.prepareCanvas('Right', width, height);
+ var canvasLoops = self.prepareCanvas('Loops', width, height);
+
+ self.canvas = new Piwik_Transitions_Canvas(canvasBgLeft, canvasBgRight, canvasLeft, canvasRight,
+ canvasLoops, width, height);
+
+ self.centerBox = self.popover.find('#Transitions_CenterBox');
+
+ var title = self.actionName;
+ if (self.actionType == 'url') {
+ title = Piwik_Transitions_Util.shortenUrl(title, true);
+ }
+ title = self.centerBox.find('h2')
+ .addClass('Transitions_ApplyTextAndTruncate')
+ .data('text', title)
+ .data('maxLines', 3);
+
+ if (self.actionType == 'url') {
+ title.click(function () {
+ self.openExternalUrl(self.actionName);
+ }).css('cursor', 'pointer');
+ }
+
+ title.add(self.popover.find('p.Transitions_Pageviews')).hover(function () {
+ var totalNbPageviews = self.model.getTotalNbPageviews();
+ if (totalNbPageviews > 0) {
+ var share = Math.round(self.model.pageviews / totalNbPageviews * 1000) / 10;
+
+ var text = Piwik_Transitions_Translations.ShareOfAllPageviews;
+ text = text.replace(/%s/, self.model.pageviews).replace(/%s/, share + '%');
+ text += '<br /><i>' + Piwik_Transitions_Translations.DateRange + ' ' + self.model.date + '</i>';
+
+ var title = '<span class="tip-title">' + piwikHelper.addBreakpointsToUrl(self.actionName) +
+ '</span><br />';
+
+ Piwik_Tooltip.show(title + text, 'Transitions_Tooltip_Small', 300);
+ }
+ }, function () {
+ Piwik_Tooltip.hide();
+ });
};
-Piwik_Transitions.prototype.prepareCanvas = function(canvasId, width, height) {
- canvasId = 'Transitions_Canvas_' + canvasId;
- var div = $('#' + canvasId).width(width).height(height);
- var canvas;
-
- if (typeof Piwik_Transitions.canvasCache == 'undefined'
- || typeof window.G_vmlCanvasManager != "undefined") {
- // no recycling for excanvas because they are disposed properly anyway and
- // recycling doesn't work this way in IE8
- Piwik_Transitions.canvasCache = {};
- }
-
- if (typeof Piwik_Transitions.canvasCache[canvasId] == 'undefined') {
- Piwik_Transitions.canvasCache[canvasId] = document.createElement('canvas');
- canvas = Piwik_Transitions.canvasCache[canvasId];
- canvas.width = width;
- canvas.height = height;
- } else {
- canvas = Piwik_Transitions.canvasCache[canvasId];
- canvas.getContext('2d').clearRect(0, 0, width, height);
- }
-
- div.append(canvas);
- return canvas;
+Piwik_Transitions.prototype.prepareCanvas = function (canvasId, width, height) {
+ canvasId = 'Transitions_Canvas_' + canvasId;
+ var div = $('#' + canvasId).width(width).height(height);
+ var canvas;
+
+ if (typeof Piwik_Transitions.canvasCache == 'undefined'
+ || typeof window.G_vmlCanvasManager != "undefined") {
+ // no recycling for excanvas because they are disposed properly anyway and
+ // recycling doesn't work this way in IE8
+ Piwik_Transitions.canvasCache = {};
+ }
+
+ if (typeof Piwik_Transitions.canvasCache[canvasId] == 'undefined') {
+ Piwik_Transitions.canvasCache[canvasId] = document.createElement('canvas');
+ canvas = Piwik_Transitions.canvasCache[canvasId];
+ canvas.width = width;
+ canvas.height = height;
+ } else {
+ canvas = Piwik_Transitions.canvasCache[canvasId];
+ canvas.getContext('2d').clearRect(0, 0, width, height);
+ }
+
+ div.append(canvas);
+ return canvas;
};
/** Render the popover content */
-Piwik_Transitions.prototype.render = function() {
- this.renderCenterBox();
+Piwik_Transitions.prototype.render = function () {
+ this.renderCenterBox();
- this.renderLeftSide();
- this.renderRightSide();
+ this.renderLeftSide();
+ this.renderRightSide();
- this.renderLoops();
+ this.renderLoops();
};
/** Render left side: referrer groups & direct entries */
-Piwik_Transitions.prototype.renderLeftSide = function(onlyBg) {
- this.renderGroups(this.leftGroups, this.leftOpenGroup, 'left', onlyBg);
- this.renderEntries(onlyBg);
+Piwik_Transitions.prototype.renderLeftSide = function (onlyBg) {
+ this.renderGroups(this.leftGroups, this.leftOpenGroup, 'left', onlyBg);
+ this.renderEntries(onlyBg);
- this.reRenderIfNeededToCenter('left', onlyBg);
+ this.reRenderIfNeededToCenter('left', onlyBg);
};
/** Render right side: following pages & exits */
-Piwik_Transitions.prototype.renderRightSide = function(onlyBg) {
- this.renderGroups(this.rightGroups, this.rightOpenGroup, 'right', onlyBg);
- this.renderExits(onlyBg);
+Piwik_Transitions.prototype.renderRightSide = function (onlyBg) {
+ this.renderGroups(this.rightGroups, this.rightOpenGroup, 'right', onlyBg);
+ this.renderExits(onlyBg);
- this.reRenderIfNeededToCenter('right', onlyBg);
+ this.reRenderIfNeededToCenter('right', onlyBg);
};
/** Helper method to render open and closed groups for both sides */
-Piwik_Transitions.prototype.renderGroups = function(groups, openGroup, side, onlyBg) {
- for (var i = 0; i < groups.length; i++) {
- var groupName = groups[i];
- if (groupName == openGroup) {
- if (i != 0) {
- var spacing = this.canvas.isNarrowMode() ? 7 : 13;
- this.canvas.addBoxSpacing(spacing, side);
- }
- this.renderOpenGroup(groupName, side, onlyBg);
- } else {
- this.renderClosedGroup(groupName, side, onlyBg);
- }
- }
-
- this.canvas.addBoxSpacing(13, side);
+Piwik_Transitions.prototype.renderGroups = function (groups, openGroup, side, onlyBg) {
+ for (var i = 0; i < groups.length; i++) {
+ var groupName = groups[i];
+ if (groupName == openGroup) {
+ if (i != 0) {
+ var spacing = this.canvas.isNarrowMode() ? 7 : 13;
+ this.canvas.addBoxSpacing(spacing, side);
+ }
+ this.renderOpenGroup(groupName, side, onlyBg);
+ } else {
+ this.renderClosedGroup(groupName, side, onlyBg);
+ }
+ }
+
+ this.canvas.addBoxSpacing(13, side);
};
/**
* If one side doesn't have much information, it doesn't look good to start from y=0.
* In this case, add some spacing on top and redraw.
*/
-Piwik_Transitions.prototype.reRenderIfNeededToCenter = function(side, onlyBg) {
- var height = (side == 'left' ? this.canvas.leftBoxPositionY : this.canvas.rightBoxPositionY) - 20;
- if (height < 460 && !this.reRendering) {
- var yOffset = (460 - height) / 2;
- this.canvas.clearSide(side, onlyBg);
- this.canvas.addBoxSpacing(yOffset, side);
- this.reRendering = true;
- side == 'left' ? this.renderLeftSide(onlyBg) : this.renderRightSide(onlyBg);
- this.reRendering = false;
- }
+Piwik_Transitions.prototype.reRenderIfNeededToCenter = function (side, onlyBg) {
+ var height = (side == 'left' ? this.canvas.leftBoxPositionY : this.canvas.rightBoxPositionY) - 20;
+ if (height < 460 && !this.reRendering) {
+ var yOffset = (460 - height) / 2;
+ this.canvas.clearSide(side, onlyBg);
+ this.canvas.addBoxSpacing(yOffset, side);
+ this.reRendering = true;
+ side == 'left' ? this.renderLeftSide(onlyBg) : this.renderRightSide(onlyBg);
+ this.reRendering = false;
+ }
};
/** Render the center box with the main metrics */
-Piwik_Transitions.prototype.renderCenterBox = function() {
- var box = this.centerBox;
-
- Piwik_Transitions_Util.replacePlaceholderInHtml(
- box.find('.Transitions_Pageviews'), this.model.pageviews);
-
- var self = this;
- var showMetric = function(cssClass, modelProperty, highlightCurveOnSide, groupCanBeExpanded) {
- var el = box.find('.Transitions_' + cssClass);
- Piwik_Transitions_Util.replacePlaceholderInHtml(el, self.model[modelProperty]);
-
- if (self.model[modelProperty] == 0) {
- el.addClass('Transitions_Value0');
- } else {
- self.addTooltipShowingPercentageOfAllPageviews(el, modelProperty);
- var groupName = cssClass.charAt(0).toLowerCase() + cssClass.substr(1);
- el.hover(function() {
- self.highlightGroup(groupName, highlightCurveOnSide);
- }, function() {
- self.unHighlightGroup(groupName, highlightCurveOnSide);
- });
- if (groupCanBeExpanded) {
- el.click(function() {
- self.openGroup(highlightCurveOnSide, groupName);
- }).css('cursor', 'pointer');
- }
- }
- };
-
- showMetric('DirectEntries', 'directEntries', 'left', false);
- showMetric('PreviousSiteSearches', 'previousSiteSearchesNbTransitions', 'left', true);
- showMetric('PreviousPages', 'previousPagesNbTransitions', 'left', true);
- showMetric('SearchEngines', 'searchEnginesNbTransitions', 'left', true);
- showMetric('Websites', 'websitesNbTransitions', 'left', true);
- showMetric('Campaigns', 'campaignsNbTransitions', 'left', true);
-
- showMetric('FollowingPages', 'followingPagesNbTransitions', 'right', true);
- showMetric('FollowingSiteSearches', 'followingSiteSearchesNbTransitions', 'right', true);
- showMetric('Outlinks', 'outlinksNbTransitions', 'right', true);
- showMetric('Downloads', 'downloadsNbTransitions', 'right', true);
- showMetric('Exits', 'exits', 'right', false);
-
- box.find('.Transitions_CenterBoxMetrics').show();
+Piwik_Transitions.prototype.renderCenterBox = function () {
+ var box = this.centerBox;
+
+ Piwik_Transitions_Util.replacePlaceholderInHtml(
+ box.find('.Transitions_Pageviews'), this.model.pageviews);
+
+ var self = this;
+ var showMetric = function (cssClass, modelProperty, highlightCurveOnSide, groupCanBeExpanded) {
+ var el = box.find('.Transitions_' + cssClass);
+ Piwik_Transitions_Util.replacePlaceholderInHtml(el, self.model[modelProperty]);
+
+ if (self.model[modelProperty] == 0) {
+ el.addClass('Transitions_Value0');
+ } else {
+ self.addTooltipShowingPercentageOfAllPageviews(el, modelProperty);
+ var groupName = cssClass.charAt(0).toLowerCase() + cssClass.substr(1);
+ el.hover(function () {
+ self.highlightGroup(groupName, highlightCurveOnSide);
+ }, function () {
+ self.unHighlightGroup(groupName, highlightCurveOnSide);
+ });
+ if (groupCanBeExpanded) {
+ el.click(function () {
+ self.openGroup(highlightCurveOnSide, groupName);
+ }).css('cursor', 'pointer');
+ }
+ }
+ };
+
+ showMetric('DirectEntries', 'directEntries', 'left', false);
+ showMetric('PreviousSiteSearches', 'previousSiteSearchesNbTransitions', 'left', true);
+ showMetric('PreviousPages', 'previousPagesNbTransitions', 'left', true);
+ showMetric('SearchEngines', 'searchEnginesNbTransitions', 'left', true);
+ showMetric('Websites', 'websitesNbTransitions', 'left', true);
+ showMetric('Campaigns', 'campaignsNbTransitions', 'left', true);
+
+ showMetric('FollowingPages', 'followingPagesNbTransitions', 'right', true);
+ showMetric('FollowingSiteSearches', 'followingSiteSearchesNbTransitions', 'right', true);
+ showMetric('Outlinks', 'outlinksNbTransitions', 'right', true);
+ showMetric('Downloads', 'downloadsNbTransitions', 'right', true);
+ showMetric('Exits', 'exits', 'right', false);
+
+ box.find('.Transitions_CenterBoxMetrics').show();
};
-Piwik_Transitions.prototype.addTooltipShowingPercentageOfAllPageviews = function(element, metric) {
- var self = this;
- element.hover(function() {
- var tip = Piwik_Transitions_Translations.XOfAllPageviews;
- var percentage = self.model.getPercentage(metric, true);
- tip = tip.replace(/%s/, '<b>' + percentage + '</b>');
- Piwik_Tooltip.show(tip, 'Transitions_Tooltip_Small');
- }, function() {
- Piwik_Tooltip.hide();
- });
+Piwik_Transitions.prototype.addTooltipShowingPercentageOfAllPageviews = function (element, metric) {
+ var self = this;
+ element.hover(function () {
+ var tip = Piwik_Transitions_Translations.XOfAllPageviews;
+ var percentage = self.model.getPercentage(metric, true);
+ tip = tip.replace(/%s/, '<b>' + percentage + '</b>');
+ Piwik_Tooltip.show(tip, 'Transitions_Tooltip_Small');
+ }, function () {
+ Piwik_Tooltip.hide();
+ });
};
/** Render the loops (i.e. page reloads) */
-Piwik_Transitions.prototype.renderLoops = function() {
- if (this.model.loops == 0) {
- return;
- }
+Piwik_Transitions.prototype.renderLoops = function () {
+ if (this.model.loops == 0) {
+ return;
+ }
- var loops = this.popover.find('#Transitions_Loops').show();
- Piwik_Transitions_Util.replacePlaceholderInHtml(loops, this.model.loops);
+ var loops = this.popover.find('#Transitions_Loops').show();
+ Piwik_Transitions_Util.replacePlaceholderInHtml(loops, this.model.loops);
- this.addTooltipShowingPercentageOfAllPageviews(loops, 'loops');
+ this.addTooltipShowingPercentageOfAllPageviews(loops, 'loops');
- this.canvas.renderLoops(this.model.getPercentage('loops'));
+ this.canvas.renderLoops(this.model.getPercentage('loops'));
};
-Piwik_Transitions.prototype.renderEntries = function(onlyBg) {
- if (this.model.directEntries > 0) {
- var self = this;
- var gradient = this.canvas.createHorizontalGradient('#FFFFFF', '#BACFE8', 'left');
- if (this.highlightedGroup == 'directEntries') {
- gradient = this.canvas.createHorizontalGradient('#FFFFFF', '#FAD293', 'left');
- }
- this.canvas.renderBox({
- side: 'left',
- onlyBg: onlyBg,
- share: this.model.getPercentage('directEntries'),
- gradient: gradient,
- boxText: Piwik_Transitions_Translations.directEntries,
- boxTextNumLines: 1,
- boxTextCssClass: 'SingleLine',
- smallBox: true,
- onMouseOver: function() {
- self.highlightGroup('directEntries', 'left');
- },
- onMouseOut: function() {
- self.unHighlightGroup('directEntries', 'left');
- }
- });
- this.canvas.addBoxSpacing(20, 'left');
- }
+Piwik_Transitions.prototype.renderEntries = function (onlyBg) {
+ if (this.model.directEntries > 0) {
+ var self = this;
+ var gradient = this.canvas.createHorizontalGradient('#FFFFFF', '#BACFE8', 'left');
+ if (this.highlightedGroup == 'directEntries') {
+ gradient = this.canvas.createHorizontalGradient('#FFFFFF', '#FAD293', 'left');
+ }
+ this.canvas.renderBox({
+ side: 'left',
+ onlyBg: onlyBg,
+ share: this.model.getPercentage('directEntries'),
+ gradient: gradient,
+ boxText: Piwik_Transitions_Translations.directEntries,
+ boxTextNumLines: 1,
+ boxTextCssClass: 'SingleLine',
+ smallBox: true,
+ onMouseOver: function () {
+ self.highlightGroup('directEntries', 'left');
+ },
+ onMouseOut: function () {
+ self.unHighlightGroup('directEntries', 'left');
+ }
+ });
+ this.canvas.addBoxSpacing(20, 'left');
+ }
};
-Piwik_Transitions.prototype.renderExits = function(onlyBg) {
- if (this.model.exits > 0) {
- var self = this;
- var gradient = this.canvas.createHorizontalGradient('#FFFFFF', '#BACFE8', 'right');
- if (this.highlightedGroup == 'exits') {
- gradient = this.canvas.createHorizontalGradient('#FFFFFF', '#FAD293', 'right');
- }
- this.canvas.renderBox({
- side: 'right',
- onlyBg: onlyBg,
- share: this.model.getPercentage('exits'),
- gradient: gradient,
- boxText: Piwik_Transitions_Translations.exits,
- boxTextNumLines: 1,
- boxTextCssClass: 'SingleLine',
- smallBox: true,
- onMouseOver: function() {
- self.highlightGroup('exits', 'right');
- },
- onMouseOut: function() {
- self.unHighlightGroup('exits', 'right');
- }
- });
- this.canvas.addBoxSpacing(20, 'right');
- }
+Piwik_Transitions.prototype.renderExits = function (onlyBg) {
+ if (this.model.exits > 0) {
+ var self = this;
+ var gradient = this.canvas.createHorizontalGradient('#FFFFFF', '#BACFE8', 'right');
+ if (this.highlightedGroup == 'exits') {
+ gradient = this.canvas.createHorizontalGradient('#FFFFFF', '#FAD293', 'right');
+ }
+ this.canvas.renderBox({
+ side: 'right',
+ onlyBg: onlyBg,
+ share: this.model.getPercentage('exits'),
+ gradient: gradient,
+ boxText: Piwik_Transitions_Translations.exits,
+ boxTextNumLines: 1,
+ boxTextCssClass: 'SingleLine',
+ smallBox: true,
+ onMouseOver: function () {
+ self.highlightGroup('exits', 'right');
+ },
+ onMouseOut: function () {
+ self.unHighlightGroup('exits', 'right');
+ }
+ });
+ this.canvas.addBoxSpacing(20, 'right');
+ }
};
/** Render the open group with the detailed data */
-Piwik_Transitions.prototype.renderOpenGroup = function(groupName, side, onlyBg) {
- var self = this;
-
- // get data from the model
- var nbTransitionsVarName = groupName + 'NbTransitions';
- var nbTransitions = self.model[nbTransitionsVarName];
- if (nbTransitions == 0) {
- return;
- }
-
- var totalShare = this.model.getPercentage(nbTransitionsVarName);
- var details = self.model.getDetailsForGroup(groupName);
-
- // prepare gradients
- var gradientItems = this.canvas.createHorizontalGradient('#E3DFD1', '#E8E4D5', side);
- var gradientOthers = this.canvas.createHorizontalGradient('#F5F3EB', '#E8E4D5', side);
- var gradientBackground = this.canvas.createHorizontalGradient('#FFFFFF', '#BACFE8', side);
- if (groupName == this.highlightedGroup) {
- gradientBackground = this.canvas.createHorizontalGradient('#FFFFFF', '#FAD293', side);
- }
-
- // remember current offsets to reset them later for drawing the background
- var boxPositionBefore, curvePositionBefore;
- if (side == 'left') {
- boxPositionBefore = this.canvas.leftBoxPositionY;
- curvePositionBefore = this.canvas.leftCurvePositionY;
- } else {
- boxPositionBefore = this.canvas.rightBoxPositionY;
- curvePositionBefore = this.canvas.rightCurvePositionY;
- }
-
- // headline of the open group
- var titleX, titleClass;
- if (side == 'left') {
- titleX = this.canvas.leftBoxBeginX + 10;
- titleClass = 'BoxTextLeft';
- } else {
- titleX = this.canvas.rightBoxBeginX - 1;
- titleClass = 'BoxTextRight';
- }
- if (!onlyBg) {
- var groupTitle = self.model.getGroupTitle(groupName);
- var titleEl = this.canvas.renderText(groupTitle, titleX, boxPositionBefore + 11,
- [titleClass, 'TitleOfOpenGroup']);
- titleEl.hover(function() {
- self.highlightGroup(groupName, side);
- }, function() {
- self.unHighlightGroup(groupName, side);
- });
- }
- this.canvas.addBoxSpacing(34, side);
-
- // draw detail boxes
- for (var i = 0; i < details.length; i++) {
- var data = details[i];
- var label = (typeof data.url != 'undefined' ? data.url : data.label);
- label = (typeof label != 'undefined' && label !== null ? label : '');
- var isOthers = (label == 'Others');
- var onClick = false;
- if (!isOthers && (groupName == 'previousPages' || groupName == 'followingPages')) {
- onClick = (function(url) {
- return function() {
- self.reloadPopover(url);
- };
- })(label);
- } else if (!isOthers && (groupName == 'outlinks' || groupName == 'websites' || groupName == 'downloads')) {
- onClick = (function(url) {
- return function() {
- self.openExternalUrl(url);
- };
- })(label);
- }
-
- var tooltip = Piwik_Transitions_Translations.XOfY;
- tooltip = '<b>' + tooltip.replace(/%s/, data.referrals + '</b>').replace(/%s/, nbTransitions);
- tooltip = this.model.getShareInGroupTooltip(tooltip, groupName);
-
- var fullLabel = label;
- var shortened = false;
- if ((this.actionType == 'url' && (groupName == 'previousPages' || groupName == 'followingPages'))
- || groupName == 'downloads') {
- // remove http + www + domain for internal URLs
- label = Piwik_Transitions_Util.shortenUrl(label, true);
- shortened = true;
- } else if (groupName == 'outlinks' || groupName == 'websites') {
- // remove http + www for external URLs
- label = Piwik_Transitions_Util.shortenUrl(label);
- shortened = true;
- }
-
- this.canvas.renderBox({
- side: side,
- onlyBg: onlyBg,
- share: data.percentage / 100 * totalShare,
- gradient: isOthers ? gradientOthers : gradientItems,
- boxText: label,
- boxTextTooltip: isOthers || !shortened ? false : fullLabel,
- boxTextNumLines: 3,
- curveText: data.percentage + '%',
- curveTextTooltip: tooltip,
- onClick: onClick
- });
- }
-
- // draw background
- var boxPositionAfter, curvePositionAfter;
- if (side == 'left') {
- boxPositionAfter = this.canvas.leftBoxPositionY;
- curvePositionAfter = this.canvas.leftCurvePositionY;
- this.canvas.leftBoxPositionY = boxPositionBefore;
- this.canvas.leftCurvePositionY = curvePositionBefore;
- } else {
- boxPositionAfter = this.canvas.rightBoxPositionY;
- curvePositionAfter = this.canvas.rightCurvePositionY;
- this.canvas.rightBoxPositionY = boxPositionBefore;
- this.canvas.rightCurvePositionY = curvePositionBefore;
- }
-
- this.canvas.renderBox({
- side: side,
- boxHeight: boxPositionAfter - boxPositionBefore - this.canvas.boxSpacing - 2,
- curveHeight: curvePositionAfter - curvePositionBefore - this.canvas.curveSpacing,
- gradient: gradientBackground,
- bgCanvas: true
- });
-
- var spacing = this.canvas.isNarrowMode() ? 8 : 15;
- this.canvas.addBoxSpacing(spacing, side);
+Piwik_Transitions.prototype.renderOpenGroup = function (groupName, side, onlyBg) {
+ var self = this;
+
+ // get data from the model
+ var nbTransitionsVarName = groupName + 'NbTransitions';
+ var nbTransitions = self.model[nbTransitionsVarName];
+ if (nbTransitions == 0) {
+ return;
+ }
+
+ var totalShare = this.model.getPercentage(nbTransitionsVarName);
+ var details = self.model.getDetailsForGroup(groupName);
+
+ // prepare gradients
+ var gradientItems = this.canvas.createHorizontalGradient('#E3DFD1', '#E8E4D5', side);
+ var gradientOthers = this.canvas.createHorizontalGradient('#F5F3EB', '#E8E4D5', side);
+ var gradientBackground = this.canvas.createHorizontalGradient('#FFFFFF', '#BACFE8', side);
+ if (groupName == this.highlightedGroup) {
+ gradientBackground = this.canvas.createHorizontalGradient('#FFFFFF', '#FAD293', side);
+ }
+
+ // remember current offsets to reset them later for drawing the background
+ var boxPositionBefore, curvePositionBefore;
+ if (side == 'left') {
+ boxPositionBefore = this.canvas.leftBoxPositionY;
+ curvePositionBefore = this.canvas.leftCurvePositionY;
+ } else {
+ boxPositionBefore = this.canvas.rightBoxPositionY;
+ curvePositionBefore = this.canvas.rightCurvePositionY;
+ }
+
+ // headline of the open group
+ var titleX, titleClass;
+ if (side == 'left') {
+ titleX = this.canvas.leftBoxBeginX + 10;
+ titleClass = 'BoxTextLeft';
+ } else {
+ titleX = this.canvas.rightBoxBeginX - 1;
+ titleClass = 'BoxTextRight';
+ }
+ if (!onlyBg) {
+ var groupTitle = self.model.getGroupTitle(groupName);
+ var titleEl = this.canvas.renderText(groupTitle, titleX, boxPositionBefore + 11,
+ [titleClass, 'TitleOfOpenGroup']);
+ titleEl.hover(function () {
+ self.highlightGroup(groupName, side);
+ }, function () {
+ self.unHighlightGroup(groupName, side);
+ });
+ }
+ this.canvas.addBoxSpacing(34, side);
+
+ // draw detail boxes
+ for (var i = 0; i < details.length; i++) {
+ var data = details[i];
+ var label = (typeof data.url != 'undefined' ? data.url : data.label);
+ label = (typeof label != 'undefined' && label !== null ? label : '');
+ var isOthers = (label == 'Others');
+ var onClick = false;
+ if (!isOthers && (groupName == 'previousPages' || groupName == 'followingPages')) {
+ onClick = (function (url) {
+ return function () {
+ self.reloadPopover(url);
+ };
+ })(label);
+ } else if (!isOthers && (groupName == 'outlinks' || groupName == 'websites' || groupName == 'downloads')) {
+ onClick = (function (url) {
+ return function () {
+ self.openExternalUrl(url);
+ };
+ })(label);
+ }
+
+ var tooltip = Piwik_Transitions_Translations.XOfY;
+ tooltip = '<b>' + tooltip.replace(/%s/, data.referrals + '</b>').replace(/%s/, nbTransitions);
+ tooltip = this.model.getShareInGroupTooltip(tooltip, groupName);
+
+ var fullLabel = label;
+ var shortened = false;
+ if ((this.actionType == 'url' && (groupName == 'previousPages' || groupName == 'followingPages'))
+ || groupName == 'downloads') {
+ // remove http + www + domain for internal URLs
+ label = Piwik_Transitions_Util.shortenUrl(label, true);
+ shortened = true;
+ } else if (groupName == 'outlinks' || groupName == 'websites') {
+ // remove http + www for external URLs
+ label = Piwik_Transitions_Util.shortenUrl(label);
+ shortened = true;
+ }
+
+ this.canvas.renderBox({
+ side: side,
+ onlyBg: onlyBg,
+ share: data.percentage / 100 * totalShare,
+ gradient: isOthers ? gradientOthers : gradientItems,
+ boxText: label,
+ boxTextTooltip: isOthers || !shortened ? false : fullLabel,
+ boxTextNumLines: 3,
+ curveText: data.percentage + '%',
+ curveTextTooltip: tooltip,
+ onClick: onClick
+ });
+ }
+
+ // draw background
+ var boxPositionAfter, curvePositionAfter;
+ if (side == 'left') {
+ boxPositionAfter = this.canvas.leftBoxPositionY;
+ curvePositionAfter = this.canvas.leftCurvePositionY;
+ this.canvas.leftBoxPositionY = boxPositionBefore;
+ this.canvas.leftCurvePositionY = curvePositionBefore;
+ } else {
+ boxPositionAfter = this.canvas.rightBoxPositionY;
+ curvePositionAfter = this.canvas.rightCurvePositionY;
+ this.canvas.rightBoxPositionY = boxPositionBefore;
+ this.canvas.rightCurvePositionY = curvePositionBefore;
+ }
+
+ this.canvas.renderBox({
+ side: side,
+ boxHeight: boxPositionAfter - boxPositionBefore - this.canvas.boxSpacing - 2,
+ curveHeight: curvePositionAfter - curvePositionBefore - this.canvas.curveSpacing,
+ gradient: gradientBackground,
+ bgCanvas: true
+ });
+
+ var spacing = this.canvas.isNarrowMode() ? 8 : 15;
+ this.canvas.addBoxSpacing(spacing, side);
};
/** Render a closed group without detailed data, only one box for the sum */
-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);
- }
-
- var nbTransitionsVarName = groupName + 'NbTransitions';
-
- if (self.model[nbTransitionsVarName] == 0) {
- return;
- }
-
- self.canvas.renderBox({
- side: side,
- onlyBg: onlyBg,
- share: self.model.getPercentage(nbTransitionsVarName),
- gradient: gradient,
- boxText: self.model.getGroupTitle(groupName),
- boxTextNumLines: 1,
- boxTextCssClass: 'SingleLine',
- boxIcon: 'themes/default/images/plus_blue.png',
- smallBox: true,
- onClick: function() {
- self.unHighlightGroup(groupName, side);
- self.openGroup(side, groupName);
- },
- onMouseOver: function() {
- self.highlightGroup(groupName, side);
- },
- onMouseOut: function() {
- self.unHighlightGroup(groupName, side);
- }
- });
+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);
+ }
+
+ var nbTransitionsVarName = groupName + 'NbTransitions';
+
+ if (self.model[nbTransitionsVarName] == 0) {
+ return;
+ }
+
+ self.canvas.renderBox({
+ side: side,
+ onlyBg: onlyBg,
+ share: self.model.getPercentage(nbTransitionsVarName),
+ gradient: gradient,
+ boxText: self.model.getGroupTitle(groupName),
+ boxTextNumLines: 1,
+ boxTextCssClass: 'SingleLine',
+ boxIcon: 'themes/default/images/plus_blue.png',
+ smallBox: true,
+ onClick: function () {
+ self.unHighlightGroup(groupName, side);
+ self.openGroup(side, groupName);
+ },
+ onMouseOver: function () {
+ self.highlightGroup(groupName, side);
+ },
+ onMouseOut: function () {
+ self.unHighlightGroup(groupName, side);
+ }
+ });
};
/** Reload the entire popover for a different URL */
-Piwik_Transitions.prototype.reloadPopover = function(url) {
- if (this.rowAction) {
- this.rowAction.openPopover(this.actionType + ':' + url);
- } else {
- this.reset(this.actionType, url);
- this.showPopover();
- }
+Piwik_Transitions.prototype.reloadPopover = function (url) {
+ if (this.rowAction) {
+ this.rowAction.openPopover(this.actionType + ':' + url);
+ } else {
+ this.reset(this.actionType, url);
+ this.showPopover();
+ }
};
/** Redraw the left or right sides with a different group opened */
-Piwik_Transitions.prototype.openGroup = function(side, groupName) {
+Piwik_Transitions.prototype.openGroup = function (side, groupName) {
- this.canvas.clearSide(side);
+ this.canvas.clearSide(side);
- if (side == 'left') {
- this.leftOpenGroup = groupName;
- this.renderLeftSide();
- } else {
- this.rightOpenGroup = groupName;
- this.renderRightSide();
- }
+ if (side == 'left') {
+ this.leftOpenGroup = groupName;
+ this.renderLeftSide();
+ } else {
+ this.rightOpenGroup = groupName;
+ this.renderRightSide();
+ }
- this.renderLoops();
+ this.renderLoops();
- this.canvas.truncateVisibleBoxTexts();
+ this.canvas.truncateVisibleBoxTexts();
};
/** Highlight a group: change curve color and highlight metric in the center box */
-Piwik_Transitions.prototype.highlightGroup = function(groupName, side) {
- if (this.highlightedGroup == groupName) {
- return;
- }
- if (this.highlightedGroup !== false) {
- this.unHighlightGroup(this.highlightedGroup, this.highlightedGroupSide);
- }
-
- this.highlightedGroup = groupName;
- this.highlightedGroupSide = side;
-
- var cssClass = 'Transitions_' + groupName.charAt(0).toUpperCase() + groupName.substr(1);
- this.highlightedGroupCenterEl = this.canvas.container.find('.' + cssClass);
- this.highlightedGroupCenterEl.addClass('Transitions_Highlighted');
-
- this.canvas.clearSide(side, true);
- if (side == 'left') {
- this.renderLeftSide(true);
- } else {
- this.renderRightSide(true);
- }
- this.renderLoops();
+Piwik_Transitions.prototype.highlightGroup = function (groupName, side) {
+ if (this.highlightedGroup == groupName) {
+ return;
+ }
+ if (this.highlightedGroup !== false) {
+ this.unHighlightGroup(this.highlightedGroup, this.highlightedGroupSide);
+ }
+
+ this.highlightedGroup = groupName;
+ this.highlightedGroupSide = side;
+
+ var cssClass = 'Transitions_' + groupName.charAt(0).toUpperCase() + groupName.substr(1);
+ this.highlightedGroupCenterEl = this.canvas.container.find('.' + cssClass);
+ this.highlightedGroupCenterEl.addClass('Transitions_Highlighted');
+
+ this.canvas.clearSide(side, true);
+ if (side == 'left') {
+ this.renderLeftSide(true);
+ } else {
+ this.renderRightSide(true);
+ }
+ this.renderLoops();
};
/** Remove highlight after using highlightGroup() */
-Piwik_Transitions.prototype.unHighlightGroup = function(groupName, side) {
- if (this.highlightedGroup === false) {
- return;
- }
-
- this.highlightedGroupCenterEl.removeClass('Transitions_Highlighted');
-
- this.highlightedGroup = false;
- this.highlightedGroupSide = false;
- this.highlightedGroupCenterEl = false;
-
- this.canvas.clearSide(side, true);
- if (side == 'left') {
- this.renderLeftSide(true);
- } else {
- this.renderRightSide(true);
- }
- this.renderLoops();
+Piwik_Transitions.prototype.unHighlightGroup = function (groupName, side) {
+ if (this.highlightedGroup === false) {
+ return;
+ }
+
+ this.highlightedGroupCenterEl.removeClass('Transitions_Highlighted');
+
+ this.highlightedGroup = false;
+ this.highlightedGroupSide = false;
+ this.highlightedGroupCenterEl = false;
+
+ this.canvas.clearSide(side, true);
+ if (side == 'left') {
+ this.renderLeftSide(true);
+ } else {
+ this.renderRightSide(true);
+ }
+ this.renderLoops();
};
/** Open a link in a new tab */
-Piwik_Transitions.prototype.openExternalUrl = function(url) {
- url = piwik.piwik_url + '?module=Proxy&action=redirect&url=' + encodeURIComponent(url);
- window.open(url, '_newtab');
+Piwik_Transitions.prototype.openExternalUrl = function (url) {
+ url = piwik.piwik_url + '?module=Proxy&action=redirect&url=' + encodeURIComponent(url);
+ window.open(url, '_newtab');
};
@@ -710,151 +710,151 @@ Piwik_Transitions.prototype.openExternalUrl = function(url) {
function Piwik_Transitions_Canvas(canvasBgLeft, canvasBgRight, canvasLeft, canvasRight, canvasLoops, width, height) {
- if (typeof window.G_vmlCanvasManager != "undefined") {
- window.G_vmlCanvasManager.initElement(canvasBgLeft);
- window.G_vmlCanvasManager.initElement(canvasBgRight);
- window.G_vmlCanvasManager.initElement(canvasLeft);
- window.G_vmlCanvasManager.initElement(canvasRight);
- window.G_vmlCanvasManager.initElement(canvasLoops);
- }
-
- if (!canvasBgLeft.getContext) {
- alert('Your browser is not supported.');
- return;
- }
-
- /** DOM element that contains the canvas */
- this.container = $(canvasBgLeft).parent().parent();
-
- /** Drawing context of the canvases */
- this.contextBgLeft = canvasBgLeft.getContext('2d');
- this.contextBgRight = canvasBgRight.getContext('2d');
- this.contextLeft = canvasLeft.getContext('2d');
- this.contextRight = canvasRight.getContext('2d');
- this.contextLoops = canvasLoops.getContext('2d');
-
- /** Width of the entire canvas */
- this.width = width;
- /** Height of the entire canvas */
- this.height = height;
-
- /** Current Y positions */
- this.leftBoxPositionY = this.originalBoxPositionY = 0;
- this.leftCurvePositionY = this.originalCurvePositionY = 110;
- this.rightBoxPositionY = this.originalBoxPositionY;
- this.rightCurvePositionY = this.originalCurvePositionY;
-
- /** Width of the rectangular box */
- this.boxWidth = 175;
- /** Height of the rectangular box */
- this.boxHeight = 53;
- /** Height of a smaller rectangular box */
- this.smallBoxHeight = 30;
- /** Width of the curve that connects the boxes to the center */
- this.curveWidth = 170;
- /** Line-height of the text */
- this.lineHeight = 14;
- /** Spacing between rectangular boxes */
- this.boxSpacing = 7;
- /** Spacing between the curves where they connect to the center */
- this.curveSpacing = 1.5;
-
- /** The total net height (without curve spacing) of the curves as they connect to the center */
- this.totalHeightOfConnections = 205;
-
- /** X positions of the left box - begin means left, end means right */
- this.leftBoxBeginX = 0;
- this.leftCurveBeginX = this.leftBoxBeginX + this.boxWidth;
- this.leftCurveEndX = this.leftCurveBeginX + this.curveWidth;
-
- /** X positions of the right box - begin means left, end means right */
- this.rightBoxEndX = this.width;
- this.rightBoxBeginX = this.rightCurveEndX = this.rightBoxEndX - this.boxWidth;
- this.rightCurveBeginX = this.rightCurveEndX - this.curveWidth;
+ if (typeof window.G_vmlCanvasManager != "undefined") {
+ window.G_vmlCanvasManager.initElement(canvasBgLeft);
+ window.G_vmlCanvasManager.initElement(canvasBgRight);
+ window.G_vmlCanvasManager.initElement(canvasLeft);
+ window.G_vmlCanvasManager.initElement(canvasRight);
+ window.G_vmlCanvasManager.initElement(canvasLoops);
+ }
+
+ if (!canvasBgLeft.getContext) {
+ alert('Your browser is not supported.');
+ return;
+ }
+
+ /** DOM element that contains the canvas */
+ this.container = $(canvasBgLeft).parent().parent();
+
+ /** Drawing context of the canvases */
+ this.contextBgLeft = canvasBgLeft.getContext('2d');
+ this.contextBgRight = canvasBgRight.getContext('2d');
+ this.contextLeft = canvasLeft.getContext('2d');
+ this.contextRight = canvasRight.getContext('2d');
+ this.contextLoops = canvasLoops.getContext('2d');
+
+ /** Width of the entire canvas */
+ this.width = width;
+ /** Height of the entire canvas */
+ this.height = height;
+
+ /** Current Y positions */
+ this.leftBoxPositionY = this.originalBoxPositionY = 0;
+ this.leftCurvePositionY = this.originalCurvePositionY = 110;
+ this.rightBoxPositionY = this.originalBoxPositionY;
+ this.rightCurvePositionY = this.originalCurvePositionY;
+
+ /** Width of the rectangular box */
+ this.boxWidth = 175;
+ /** Height of the rectangular box */
+ this.boxHeight = 53;
+ /** Height of a smaller rectangular box */
+ this.smallBoxHeight = 30;
+ /** Width of the curve that connects the boxes to the center */
+ this.curveWidth = 170;
+ /** Line-height of the text */
+ this.lineHeight = 14;
+ /** Spacing between rectangular boxes */
+ this.boxSpacing = 7;
+ /** Spacing between the curves where they connect to the center */
+ this.curveSpacing = 1.5;
+
+ /** The total net height (without curve spacing) of the curves as they connect to the center */
+ this.totalHeightOfConnections = 205;
+
+ /** X positions of the left box - begin means left, end means right */
+ this.leftBoxBeginX = 0;
+ this.leftCurveBeginX = this.leftBoxBeginX + this.boxWidth;
+ this.leftCurveEndX = this.leftCurveBeginX + this.curveWidth;
+
+ /** X positions of the right box - begin means left, end means right */
+ this.rightBoxEndX = this.width;
+ this.rightBoxBeginX = this.rightCurveEndX = this.rightBoxEndX - this.boxWidth;
+ this.rightCurveBeginX = this.rightCurveEndX - this.curveWidth;
}
/**
* Activate narrow mode: draw groups a bit more compact in order to save space
* for more than 3 referrer groups.
*/
-Piwik_Transitions_Canvas.prototype.narrowMode = function() {
- this.smallBoxHeight = 26;
- this.boxSpacing = 4;
- this.narrowMode = true;
+Piwik_Transitions_Canvas.prototype.narrowMode = function () {
+ this.smallBoxHeight = 26;
+ this.boxSpacing = 4;
+ this.narrowMode = true;
};
-Piwik_Transitions_Canvas.prototype.isNarrowMode = function() {
- return typeof this.narrowMode != 'undefined';
+Piwik_Transitions_Canvas.prototype.isNarrowMode = function () {
+ return typeof this.narrowMode != 'undefined';
};
/**
* Helper to create horizontal gradients
* @param position left|right
*/
-Piwik_Transitions_Canvas.prototype.createHorizontalGradient = function(lightColor, darkColor, position) {
- var fromX, toX, fromColor, toColor;
-
- if (position == 'left') {
- // gradient is used to fill a box on the left
- fromX = this.leftBoxBeginX + 50;
- toX = this.leftCurveEndX - 20;
- fromColor = lightColor;
- toColor = darkColor;
- } else {
- // gradient is used to fill a box on the right
- fromX = this.rightCurveBeginX + 20;
- toX = this.rightBoxEndX - 50;
- fromColor = darkColor;
- toColor = lightColor;
- }
-
- var gradient = this.contextBgLeft.createLinearGradient(fromX, 0, toX, 0);
- gradient.addColorStop(0, fromColor);
- gradient.addColorStop(1, toColor);
-
- return gradient;
+Piwik_Transitions_Canvas.prototype.createHorizontalGradient = function (lightColor, darkColor, position) {
+ var fromX, toX, fromColor, toColor;
+
+ if (position == 'left') {
+ // gradient is used to fill a box on the left
+ fromX = this.leftBoxBeginX + 50;
+ toX = this.leftCurveEndX - 20;
+ fromColor = lightColor;
+ toColor = darkColor;
+ } else {
+ // gradient is used to fill a box on the right
+ fromX = this.rightCurveBeginX + 20;
+ toX = this.rightBoxEndX - 50;
+ fromColor = darkColor;
+ toColor = lightColor;
+ }
+
+ var gradient = this.contextBgLeft.createLinearGradient(fromX, 0, toX, 0);
+ gradient.addColorStop(0, fromColor);
+ gradient.addColorStop(1, toColor);
+
+ return gradient;
};
/** Render text using a div inside the container */
-Piwik_Transitions_Canvas.prototype.renderText = function(text, x, y, cssClass, onClick, icon, maxLines) {
- var div = this.addDomElement('div', 'Text');
- div.css({
- left: x + 'px',
- top: y + 'px'
- });
- if (icon) {
- div.addClass('Transitions_HasBackground');
- div.css({backgroundImage: 'url(' + icon + ')'});
- }
- if (cssClass) {
- if (typeof cssClass == 'object') {
- for (var i = 0; i < cssClass.length; i++) {
- div.addClass('Transitions_' + cssClass[i]);
- }
- } else {
- div.addClass('Transitions_' + cssClass);
- }
- }
- if (onClick) {
- div.css('cursor', 'pointer').hover(function() {
- $(this).addClass('Transitions_Hover');
- },function() {
- $(this).removeClass('Transitions_Hover');
- }).click(onClick);
- }
- if (maxLines) {
- div.addClass('Transitions_ApplyTextAndTruncate').data('text', text);
- } else {
- div.html(text);
- }
- return div;
+Piwik_Transitions_Canvas.prototype.renderText = function (text, x, y, cssClass, onClick, icon, maxLines) {
+ var div = this.addDomElement('div', 'Text');
+ div.css({
+ left: x + 'px',
+ top: y + 'px'
+ });
+ if (icon) {
+ div.addClass('Transitions_HasBackground');
+ div.css({backgroundImage: 'url(' + icon + ')'});
+ }
+ if (cssClass) {
+ if (typeof cssClass == 'object') {
+ for (var i = 0; i < cssClass.length; i++) {
+ div.addClass('Transitions_' + cssClass[i]);
+ }
+ } else {
+ div.addClass('Transitions_' + cssClass);
+ }
+ }
+ if (onClick) {
+ div.css('cursor', 'pointer').hover(function () {
+ $(this).addClass('Transitions_Hover');
+ },function () {
+ $(this).removeClass('Transitions_Hover');
+ }).click(onClick);
+ }
+ if (maxLines) {
+ div.addClass('Transitions_ApplyTextAndTruncate').data('text', text);
+ } else {
+ div.html(text);
+ }
+ return div;
};
/** Add a DOM element inside the container (as a sibling of the canvas) */
-Piwik_Transitions_Canvas.prototype.addDomElement = function(tagName, cssClass) {
- var el = $(document.createElement('div')).addClass('Transitions_' + cssClass);
- this.container.append(el);
- return el;
+Piwik_Transitions_Canvas.prototype.addDomElement = function (tagName, cssClass) {
+ var el = $(document.createElement('div')).addClass('Transitions_' + cssClass);
+ this.container.append(el);
+ return el;
};
/**
@@ -862,36 +862,36 @@ Piwik_Transitions_Canvas.prototype.addDomElement = function(tagName, cssClass) {
* This method looks for the class Transitions_ApplyTextAndTruncate.
* It then looks up data-text and truncates it until it fits.
*/
-Piwik_Transitions_Canvas.prototype.truncateVisibleBoxTexts = function() {
- this.container.find('.Transitions_ApplyTextAndTruncate').each(function() {
- var container = $(this).html('<span>');
- var span = container.find('span');
-
- var text = container.data('text');
- span.html(piwikHelper.addBreakpointsToUrl(text));
-
- var divHeight = container.innerHeight();
- if (container.data('maxLines')) {
- divHeight = container.data('maxLines') * (parseInt(container.css('lineHeight'), 10) + .2);
- }
-
- var leftPart = false;
- var rightPart = false;
-
- while (divHeight < span.outerHeight()) {
- if (leftPart === false) {
- var middle = Math.round(text.length / 2);
- leftPart = text.substring(0, middle);
- rightPart = text.substring(middle, text.length);
- }
- leftPart = leftPart.substring(0, leftPart.length - 2);
- rightPart = rightPart.substring(2, rightPart.length);
- text = leftPart + '...' + rightPart;
- span.html(piwikHelper.addBreakpointsToUrl(text));
- }
-
- span.removeClass('Transitions_Truncate');
- });
+Piwik_Transitions_Canvas.prototype.truncateVisibleBoxTexts = function () {
+ this.container.find('.Transitions_ApplyTextAndTruncate').each(function () {
+ var container = $(this).html('<span>');
+ var span = container.find('span');
+
+ var text = container.data('text');
+ span.html(piwikHelper.addBreakpointsToUrl(text));
+
+ var divHeight = container.innerHeight();
+ if (container.data('maxLines')) {
+ divHeight = container.data('maxLines') * (parseInt(container.css('lineHeight'), 10) + .2);
+ }
+
+ var leftPart = false;
+ var rightPart = false;
+
+ while (divHeight < span.outerHeight()) {
+ if (leftPart === false) {
+ var middle = Math.round(text.length / 2);
+ leftPart = text.substring(0, middle);
+ rightPart = text.substring(middle, text.length);
+ }
+ leftPart = leftPart.substring(0, leftPart.length - 2);
+ rightPart = rightPart.substring(2, rightPart.length);
+ text = leftPart + '...' + rightPart;
+ span.html(piwikHelper.addBreakpointsToUrl(text));
+ }
+
+ span.removeClass('Transitions_Truncate');
+ });
};
/**
@@ -920,268 +920,268 @@ Piwik_Transitions_Canvas.prototype.truncateVisibleBoxTexts = function() {
* boxHeight: fix box height in px
* bgCanvas: true to draw on background canvas
*/
-Piwik_Transitions_Canvas.prototype.renderBox = function(params) {
- var curveHeight = params.curveHeight ? params.curveHeight :
- Math.round(this.totalHeightOfConnections * params.share);
- curveHeight = Math.max(curveHeight, 1);
-
- var boxHeight = this.boxHeight;
- if (params.smallBox) {
- boxHeight = this.smallBoxHeight;
- }
- if (params.boxHeight) {
- boxHeight = params.boxHeight;
- }
-
- var context;
- if (params.bgCanvas) {
- context = params.side == 'left' ? this.contextBgLeft : this.contextBgRight;
- } else {
- context = params.side == 'left' ? this.contextLeft : this.contextRight;
- }
-
- // background
- context.fillStyle = params.gradient;
- context.beginPath();
- if (params.side == 'left') {
- this.renderLeftBoxBg(context, boxHeight, curveHeight);
- } else {
- this.renderRightBoxBg(context, boxHeight, curveHeight);
- }
- if (typeof context.endPath == 'function') {
- context.endPath();
- }
-
- // text inside the box
- if (params.boxText && !params.onlyBg) {
- var onClick = typeof params.onClick == 'function' ? params.onClick : false;
- var boxTextLeft, boxTextTop, el;
- if (params.side == 'left') {
- boxTextLeft = this.leftBoxBeginX + 10;
- boxTextTop = this.leftBoxPositionY + boxHeight / 2 - params.boxTextNumLines * this.lineHeight / 2;
- el = this.renderText(params.boxText, boxTextLeft, boxTextTop, 'BoxTextLeft', onClick, params.boxIcon,
- params.boxTextNumLines);
- } else {
- boxTextLeft = this.rightBoxBeginX;
- boxTextTop = this.rightBoxPositionY + boxHeight / 2 - params.boxTextNumLines * this.lineHeight / 2;
- el = this.renderText(params.boxText, boxTextLeft, boxTextTop, 'BoxTextRight', onClick, params.boxIcon,
- params.boxTextNumLines);
- }
- if (params.boxTextCssClass) {
- el.addClass('Transitions_' + params.boxTextCssClass);
- }
- // tooltip
- if (params.boxTextTooltip) {
- el.hover(function() {
- var tip = piwikHelper.addBreakpointsToUrl(params.boxTextTooltip);
- Piwik_Tooltip.show(tip, 'Transitions_Tooltip_Small', 300);
- }, function() {
- Piwik_Tooltip.hide();
- });
- if (onClick) {
- el.click(function() {
- Piwik_Tooltip.hide();
- });
- }
- }
- if (typeof params.onMouseOver == 'function') {
- el.mouseenter(params.onMouseOver);
- }
- if (typeof params.onMouseOut == 'function') {
- el.mouseleave(params.onMouseOut);
- }
- }
-
- // text at the beginning of the curve
- if (params.curveText && !params.onlyBg) {
- var curveTextLeft, curveTextTop;
- if (params.side == 'left') {
- curveTextLeft = this.leftBoxBeginX + this.boxWidth + 3;
- curveTextTop = this.leftBoxPositionY + boxHeight / 2 - this.lineHeight / 2;
- } else {
- curveTextLeft = this.rightBoxBeginX - 37;
- curveTextTop = this.rightBoxPositionY + boxHeight / 2 - this.lineHeight / 2;
- }
- var textDiv = this.renderText(params.curveText, curveTextLeft, curveTextTop,
- params.side == 'left' ? 'CurveTextLeft' : 'CurveTextRight');
- // tooltip
- if (params.curveTextTooltip) {
- textDiv.hover(function() {
- Piwik_Tooltip.show(params.curveTextTooltip, 'Transitions_Tooltip_Small');
- }, function() {
- Piwik_Tooltip.hide();
- });
- }
- }
-
- if (params.side == 'left') {
- this.leftBoxPositionY += boxHeight + this.boxSpacing;
- this.leftCurvePositionY += curveHeight + this.curveSpacing;
- } else {
- this.rightBoxPositionY += boxHeight + this.boxSpacing;
- this.rightCurvePositionY += curveHeight + this.curveSpacing;
- }
+Piwik_Transitions_Canvas.prototype.renderBox = function (params) {
+ var curveHeight = params.curveHeight ? params.curveHeight :
+ Math.round(this.totalHeightOfConnections * params.share);
+ curveHeight = Math.max(curveHeight, 1);
+
+ var boxHeight = this.boxHeight;
+ if (params.smallBox) {
+ boxHeight = this.smallBoxHeight;
+ }
+ if (params.boxHeight) {
+ boxHeight = params.boxHeight;
+ }
+
+ var context;
+ if (params.bgCanvas) {
+ context = params.side == 'left' ? this.contextBgLeft : this.contextBgRight;
+ } else {
+ context = params.side == 'left' ? this.contextLeft : this.contextRight;
+ }
+
+ // background
+ context.fillStyle = params.gradient;
+ context.beginPath();
+ if (params.side == 'left') {
+ this.renderLeftBoxBg(context, boxHeight, curveHeight);
+ } else {
+ this.renderRightBoxBg(context, boxHeight, curveHeight);
+ }
+ if (typeof context.endPath == 'function') {
+ context.endPath();
+ }
+
+ // text inside the box
+ if (params.boxText && !params.onlyBg) {
+ var onClick = typeof params.onClick == 'function' ? params.onClick : false;
+ var boxTextLeft, boxTextTop, el;
+ if (params.side == 'left') {
+ boxTextLeft = this.leftBoxBeginX + 10;
+ boxTextTop = this.leftBoxPositionY + boxHeight / 2 - params.boxTextNumLines * this.lineHeight / 2;
+ el = this.renderText(params.boxText, boxTextLeft, boxTextTop, 'BoxTextLeft', onClick, params.boxIcon,
+ params.boxTextNumLines);
+ } else {
+ boxTextLeft = this.rightBoxBeginX;
+ boxTextTop = this.rightBoxPositionY + boxHeight / 2 - params.boxTextNumLines * this.lineHeight / 2;
+ el = this.renderText(params.boxText, boxTextLeft, boxTextTop, 'BoxTextRight', onClick, params.boxIcon,
+ params.boxTextNumLines);
+ }
+ if (params.boxTextCssClass) {
+ el.addClass('Transitions_' + params.boxTextCssClass);
+ }
+ // tooltip
+ if (params.boxTextTooltip) {
+ el.hover(function () {
+ var tip = piwikHelper.addBreakpointsToUrl(params.boxTextTooltip);
+ Piwik_Tooltip.show(tip, 'Transitions_Tooltip_Small', 300);
+ }, function () {
+ Piwik_Tooltip.hide();
+ });
+ if (onClick) {
+ el.click(function () {
+ Piwik_Tooltip.hide();
+ });
+ }
+ }
+ if (typeof params.onMouseOver == 'function') {
+ el.mouseenter(params.onMouseOver);
+ }
+ if (typeof params.onMouseOut == 'function') {
+ el.mouseleave(params.onMouseOut);
+ }
+ }
+
+ // text at the beginning of the curve
+ if (params.curveText && !params.onlyBg) {
+ var curveTextLeft, curveTextTop;
+ if (params.side == 'left') {
+ curveTextLeft = this.leftBoxBeginX + this.boxWidth + 3;
+ curveTextTop = this.leftBoxPositionY + boxHeight / 2 - this.lineHeight / 2;
+ } else {
+ curveTextLeft = this.rightBoxBeginX - 37;
+ curveTextTop = this.rightBoxPositionY + boxHeight / 2 - this.lineHeight / 2;
+ }
+ var textDiv = this.renderText(params.curveText, curveTextLeft, curveTextTop,
+ params.side == 'left' ? 'CurveTextLeft' : 'CurveTextRight');
+ // tooltip
+ if (params.curveTextTooltip) {
+ textDiv.hover(function () {
+ Piwik_Tooltip.show(params.curveTextTooltip, 'Transitions_Tooltip_Small');
+ }, function () {
+ Piwik_Tooltip.hide();
+ });
+ }
+ }
+
+ if (params.side == 'left') {
+ this.leftBoxPositionY += boxHeight + this.boxSpacing;
+ this.leftCurvePositionY += curveHeight + this.curveSpacing;
+ } else {
+ this.rightBoxPositionY += boxHeight + this.boxSpacing;
+ this.rightCurvePositionY += curveHeight + this.curveSpacing;
+ }
};
-Piwik_Transitions_Canvas.prototype.renderLeftBoxBg = function(context, boxHeight, curveHeight) {
- // derive coordinates for ths curve
- var leftUpper = {x: this.leftCurveBeginX, y: this.leftBoxPositionY};
- var leftLower = {x: this.leftCurveBeginX, y: this.leftBoxPositionY + boxHeight};
- var rightUpper = {x: this.leftCurveEndX, y: this.leftCurvePositionY};
- var rightLower = {x: this.leftCurveEndX, y: this.leftCurvePositionY + curveHeight};
-
- // derive control points for bezier curve
- var center = (this.leftCurveBeginX + this.leftCurveEndX) / 2;
- var cp1Upper = {x: center, y: leftUpper.y};
- var cp2Upper = {x: center, y: rightUpper.y};
- var cp1Lower = {x: center, y: rightLower.y};
- var cp2Lower = {x: center, y: leftLower.y};
-
- // the flow
- context.moveTo(leftUpper.x, leftUpper.y);
- context.bezierCurveTo(cp1Upper.x, cp1Upper.y, cp2Upper.x, cp2Upper.y, rightUpper.x, rightUpper.y);
- context.lineTo(rightLower.x, rightLower.y);
- context.bezierCurveTo(cp1Lower.x, cp1Lower.y, cp2Lower.x, cp2Lower.y, leftLower.x, leftLower.y);
-
- // the box
- context.lineTo(leftLower.x - this.boxWidth + 2, leftLower.y);
- context.lineTo(leftLower.x - this.boxWidth, leftUpper.y);
- context.lineTo(leftUpper.x, leftUpper.y);
- context.fill();
+Piwik_Transitions_Canvas.prototype.renderLeftBoxBg = function (context, boxHeight, curveHeight) {
+ // derive coordinates for ths curve
+ var leftUpper = {x: this.leftCurveBeginX, y: this.leftBoxPositionY};
+ var leftLower = {x: this.leftCurveBeginX, y: this.leftBoxPositionY + boxHeight};
+ var rightUpper = {x: this.leftCurveEndX, y: this.leftCurvePositionY};
+ var rightLower = {x: this.leftCurveEndX, y: this.leftCurvePositionY + curveHeight};
+
+ // derive control points for bezier curve
+ var center = (this.leftCurveBeginX + this.leftCurveEndX) / 2;
+ var cp1Upper = {x: center, y: leftUpper.y};
+ var cp2Upper = {x: center, y: rightUpper.y};
+ var cp1Lower = {x: center, y: rightLower.y};
+ var cp2Lower = {x: center, y: leftLower.y};
+
+ // the flow
+ context.moveTo(leftUpper.x, leftUpper.y);
+ context.bezierCurveTo(cp1Upper.x, cp1Upper.y, cp2Upper.x, cp2Upper.y, rightUpper.x, rightUpper.y);
+ context.lineTo(rightLower.x, rightLower.y);
+ context.bezierCurveTo(cp1Lower.x, cp1Lower.y, cp2Lower.x, cp2Lower.y, leftLower.x, leftLower.y);
+
+ // the box
+ context.lineTo(leftLower.x - this.boxWidth + 2, leftLower.y);
+ context.lineTo(leftLower.x - this.boxWidth, leftUpper.y);
+ context.lineTo(leftUpper.x, leftUpper.y);
+ context.fill();
};
-Piwik_Transitions_Canvas.prototype.renderRightBoxBg = function(context, boxHeight, curveHeight) {
- // derive coordinates for curve
- var leftUpper = {x: this.rightCurveBeginX, y: this.rightCurvePositionY};
- var leftLower = {x: this.rightCurveBeginX, y: this.rightCurvePositionY + curveHeight};
- var rightUpper = {x: this.rightCurveEndX, y: this.rightBoxPositionY};
- var rightLower = {x: this.rightCurveEndX, y: this.rightBoxPositionY + boxHeight};
-
- // derive control points for bezier curve
- var center = (this.rightCurveBeginX + this.rightCurveEndX) / 2;
- var cp1Upper = {x: center, y: leftUpper.y};
- var cp2Upper = {x: center, y: rightUpper.y};
- var cp1Lower = {x: center, y: rightLower.y};
- var cp2Lower = {x: center, y: leftLower.y};
-
- // the flow part 1
- context.moveTo(leftUpper.x, leftUpper.y);
- context.bezierCurveTo(cp1Upper.x, cp1Upper.y, cp2Upper.x, cp2Upper.y, rightUpper.x, rightUpper.y);
-
- // the box
- context.lineTo(rightUpper.x + this.boxWidth, rightUpper.y);
- context.lineTo(rightLower.x + this.boxWidth - 2, rightLower.y);
- context.lineTo(rightLower.x, rightLower.y);
-
- // the flow part 2
- context.bezierCurveTo(cp1Lower.x, cp1Lower.y, cp2Lower.x, cp2Lower.y, leftLower.x, leftLower.y);
- context.lineTo(leftUpper.x, leftUpper.y);
- context.fill();
+Piwik_Transitions_Canvas.prototype.renderRightBoxBg = function (context, boxHeight, curveHeight) {
+ // derive coordinates for curve
+ var leftUpper = {x: this.rightCurveBeginX, y: this.rightCurvePositionY};
+ var leftLower = {x: this.rightCurveBeginX, y: this.rightCurvePositionY + curveHeight};
+ var rightUpper = {x: this.rightCurveEndX, y: this.rightBoxPositionY};
+ var rightLower = {x: this.rightCurveEndX, y: this.rightBoxPositionY + boxHeight};
+
+ // derive control points for bezier curve
+ var center = (this.rightCurveBeginX + this.rightCurveEndX) / 2;
+ var cp1Upper = {x: center, y: leftUpper.y};
+ var cp2Upper = {x: center, y: rightUpper.y};
+ var cp1Lower = {x: center, y: rightLower.y};
+ var cp2Lower = {x: center, y: leftLower.y};
+
+ // the flow part 1
+ context.moveTo(leftUpper.x, leftUpper.y);
+ context.bezierCurveTo(cp1Upper.x, cp1Upper.y, cp2Upper.x, cp2Upper.y, rightUpper.x, rightUpper.y);
+
+ // the box
+ context.lineTo(rightUpper.x + this.boxWidth, rightUpper.y);
+ context.lineTo(rightLower.x + this.boxWidth - 2, rightLower.y);
+ context.lineTo(rightLower.x, rightLower.y);
+
+ // the flow part 2
+ context.bezierCurveTo(cp1Lower.x, cp1Lower.y, cp2Lower.x, cp2Lower.y, leftLower.x, leftLower.y);
+ context.lineTo(leftUpper.x, leftUpper.y);
+ context.fill();
};
/** Add spacing after the current box */
-Piwik_Transitions_Canvas.prototype.addBoxSpacing = function(spacing, side) {
- if (side == 'left') {
- this.leftBoxPositionY += spacing;
- } else {
- this.rightBoxPositionY += spacing;
- }
+Piwik_Transitions_Canvas.prototype.addBoxSpacing = function (spacing, side) {
+ if (side == 'left') {
+ this.leftBoxPositionY += spacing;
+ } else {
+ this.rightBoxPositionY += spacing;
+ }
};
-Piwik_Transitions_Canvas.prototype.renderLoops = function(share) {
- var curveHeight = Math.round(this.totalHeightOfConnections * share);
- curveHeight = Math.max(curveHeight, 1);
+Piwik_Transitions_Canvas.prototype.renderLoops = function (share) {
+ var curveHeight = Math.round(this.totalHeightOfConnections * share);
+ curveHeight = Math.max(curveHeight, 1);
- // create gradient
- var gradient = this.contextLoops.createLinearGradient(this.leftCurveEndX - 50, 0, this.rightCurveBeginX + 50, 0);
- var light = '#F5F3EB';
- var dark = '#E8E4D5';
- gradient.addColorStop(0, dark);
- gradient.addColorStop(.5, light);
- gradient.addColorStop(1, dark);
+ // create gradient
+ var gradient = this.contextLoops.createLinearGradient(this.leftCurveEndX - 50, 0, this.rightCurveBeginX + 50, 0);
+ var light = '#F5F3EB';
+ var dark = '#E8E4D5';
+ gradient.addColorStop(0, dark);
+ gradient.addColorStop(.5, light);
+ gradient.addColorStop(1, dark);
- this.contextLoops.fillStyle = gradient;
+ this.contextLoops.fillStyle = gradient;
- this.contextLoops.beginPath();
+ this.contextLoops.beginPath();
- // curve from the upper left connection to the center box to the lower left connection to the text box
- var point1 = {x: this.leftCurveEndX, y: this.leftCurvePositionY};
- var point2 = {x: this.leftCurveEndX, y: 470};
+ // curve from the upper left connection to the center box to the lower left connection to the text box
+ var point1 = {x: this.leftCurveEndX, y: this.leftCurvePositionY};
+ var point2 = {x: this.leftCurveEndX, y: 470};
- var cpLeftX = (this.leftCurveBeginX + this.leftCurveEndX) / 2 + 30;
- var cp1 = {x: cpLeftX, y: point1.y};
- var cp2 = {x: cpLeftX, y: point2.y};
+ var cpLeftX = (this.leftCurveBeginX + this.leftCurveEndX) / 2 + 30;
+ var cp1 = {x: cpLeftX, y: point1.y};
+ var cp2 = {x: cpLeftX, y: point2.y};
- this.contextLoops.moveTo(point1.x, point1.y);
- this.contextLoops.bezierCurveTo(cp1.x, cp1.y, cp2.x, cp2.y, point2.x, point2.y);
+ this.contextLoops.moveTo(point1.x, point1.y);
+ this.contextLoops.bezierCurveTo(cp1.x, cp1.y, cp2.x, cp2.y, point2.x, point2.y);
- // lower line of text box
- var point3 = {x: this.rightCurveBeginX, y: point2.y};
- this.contextLoops.lineTo(point3.x, point3.y);
+ // lower line of text box
+ var point3 = {x: this.rightCurveBeginX, y: point2.y};
+ this.contextLoops.lineTo(point3.x, point3.y);
- // curve to upper right connection to the center box
- var point4 = {x: this.rightCurveBeginX, y: this.rightCurvePositionY};
- var cpRightX = (this.rightCurveBeginX + this.rightCurveEndX) / 2 - 30;
- var cp3 = {x: cpRightX, y: point3.y};
- var cp4 = {x: cpRightX, y: point4.y};
- this.contextLoops.bezierCurveTo(cp3.x, cp3.y, cp4.x, cp4.y, point4.x, point4.y);
+ // curve to upper right connection to the center box
+ var point4 = {x: this.rightCurveBeginX, y: this.rightCurvePositionY};
+ var cpRightX = (this.rightCurveBeginX + this.rightCurveEndX) / 2 - 30;
+ var cp3 = {x: cpRightX, y: point3.y};
+ var cp4 = {x: cpRightX, y: point4.y};
+ this.contextLoops.bezierCurveTo(cp3.x, cp3.y, cp4.x, cp4.y, point4.x, point4.y);
- // line to lower right connection to the center box
- var point5 = {x: point4.x, y: point4.y + curveHeight};
- this.contextLoops.lineTo(point5.x, point5.y);
+ // line to lower right connection to the center box
+ var point5 = {x: point4.x, y: point4.y + curveHeight};
+ this.contextLoops.lineTo(point5.x, point5.y);
- // curve to upper right connection to the text box
- var point6 = {x: point5.x, y: point2.y - 25};
- cpRightX -= 30;
- var cp5 = {x: cpRightX, y: point5.y};
- var cp6 = {x: cpRightX, y: point6.y};
- this.contextLoops.bezierCurveTo(cp5.x, cp5.y, cp6.x, cp6.y, point6.x, point6.y);
+ // curve to upper right connection to the text box
+ var point6 = {x: point5.x, y: point2.y - 25};
+ cpRightX -= 30;
+ var cp5 = {x: cpRightX, y: point5.y};
+ var cp6 = {x: cpRightX, y: point6.y};
+ this.contextLoops.bezierCurveTo(cp5.x, cp5.y, cp6.x, cp6.y, point6.x, point6.y);
- // upper line of the text box
- var point7 = {x: point1.x, y: point6.y};
- this.contextLoops.lineTo(point7.x, point7.y);
+ // upper line of the text box
+ var point7 = {x: point1.x, y: point6.y};
+ this.contextLoops.lineTo(point7.x, point7.y);
- // line to lower left connection to the center box
- var point8 = {x: point1.x, y: point1.y + curveHeight};
- cpLeftX += 30;
- var cp7 = {x: cpLeftX, y: point7.y};
- var cp8 = {x: cpLeftX, y: point8.y};
- this.contextLoops.bezierCurveTo(cp7.x, cp7.y, cp8.x, cp8.y, point8.x, point8.y);
+ // line to lower left connection to the center box
+ var point8 = {x: point1.x, y: point1.y + curveHeight};
+ cpLeftX += 30;
+ var cp7 = {x: cpLeftX, y: point7.y};
+ var cp8 = {x: cpLeftX, y: point8.y};
+ this.contextLoops.bezierCurveTo(cp7.x, cp7.y, cp8.x, cp8.y, point8.x, point8.y);
- this.contextLoops.fill();
+ this.contextLoops.fill();
- if (typeof this.contextLoops.endPath == 'function') {
- this.contextLoops.endPath();
- }
+ if (typeof this.contextLoops.endPath == 'function') {
+ this.contextLoops.endPath();
+ }
};
/** Clear one side for redrawing */
-Piwik_Transitions_Canvas.prototype.clearSide = function(side, onlyBg) {
- if (side == 'left') {
- this.contextBgLeft.clearRect(0, 0, this.width, this.height);
- this.contextLeft.clearRect(0, 0, this.width, this.height);
- } else {
- this.contextBgRight.clearRect(0, 0, this.width, this.height);
- this.contextRight.clearRect(0, 0, this.width, this.height);
- }
- this.contextLoops.clearRect(0, 0, this.width, this.height);
-
- if (side == 'left') {
- if (!onlyBg) {
- this.container.find('.Transitions_BoxTextLeft').remove();
- this.container.find('.Transitions_CurveTextLeft').remove();
- }
- this.leftBoxPositionY = this.originalBoxPositionY;
- this.leftCurvePositionY = this.originalCurvePositionY;
- } else {
- if (!onlyBg) {
- this.container.find('.Transitions_BoxTextRight').remove();
- this.container.find('.Transitions_CurveTextRight').remove();
- }
- this.rightBoxPositionY = this.originalBoxPositionY;
- this.rightCurvePositionY = this.originalCurvePositionY;
- }
+Piwik_Transitions_Canvas.prototype.clearSide = function (side, onlyBg) {
+ if (side == 'left') {
+ this.contextBgLeft.clearRect(0, 0, this.width, this.height);
+ this.contextLeft.clearRect(0, 0, this.width, this.height);
+ } else {
+ this.contextBgRight.clearRect(0, 0, this.width, this.height);
+ this.contextRight.clearRect(0, 0, this.width, this.height);
+ }
+ this.contextLoops.clearRect(0, 0, this.width, this.height);
+
+ if (side == 'left') {
+ if (!onlyBg) {
+ this.container.find('.Transitions_BoxTextLeft').remove();
+ this.container.find('.Transitions_CurveTextLeft').remove();
+ }
+ this.leftBoxPositionY = this.originalBoxPositionY;
+ this.leftCurvePositionY = this.originalCurvePositionY;
+ } else {
+ if (!onlyBg) {
+ this.container.find('.Transitions_BoxTextRight').remove();
+ this.container.find('.Transitions_CurveTextRight').remove();
+ }
+ this.rightBoxPositionY = this.originalBoxPositionY;
+ this.rightCurvePositionY = this.originalCurvePositionY;
+ }
};
@@ -1190,185 +1190,185 @@ Piwik_Transitions_Canvas.prototype.clearSide = function(side, onlyBg) {
// --------------------------------------
function Piwik_Transitions_Model(ajax) {
- this.ajax = ajax;
+ this.ajax = ajax;
- this.groupTitles = {};
+ this.groupTitles = {};
}
-Piwik_Transitions_Model.prototype.htmlLoaded = function() {
- this.groupTitles.previousPages = Piwik_Transitions_Translations.fromPreviousPages;
- this.groupTitles.previousSiteSearches = Piwik_Transitions_Translations.fromPreviousSiteSearches;
- this.groupTitles.followingPages = Piwik_Transitions_Translations.toFollowingPages;
- this.groupTitles.followingSiteSearches = Piwik_Transitions_Translations.toFollowingSiteSearches;
- this.groupTitles.outlinks = Piwik_Transitions_Translations.outlinks;
- this.groupTitles.downloads = Piwik_Transitions_Translations.downloads;
-
- this.shareInGroupTexts = {
- previousPages: Piwik_Transitions_Translations.fromPreviousPagesInline,
- previousSiteSearches: Piwik_Transitions_Translations.fromPreviousSiteSearchesInline,
- followingPages: Piwik_Transitions_Translations.toFollowingPagesInline,
- followingSiteSearches: Piwik_Transitions_Translations.toFollowingSiteSearchesInline,
- searchEngines: Piwik_Transitions_Translations.fromSearchEnginesInline,
- websites: Piwik_Transitions_Translations.fromWebsitesInline,
- campaigns: Piwik_Transitions_Translations.fromCampaignsInline,
- outlinks: Piwik_Transitions_Translations.outlinksInline,
- downloads: Piwik_Transitions_Translations.downloadsInline
- };
+Piwik_Transitions_Model.prototype.htmlLoaded = function () {
+ this.groupTitles.previousPages = Piwik_Transitions_Translations.fromPreviousPages;
+ this.groupTitles.previousSiteSearches = Piwik_Transitions_Translations.fromPreviousSiteSearches;
+ this.groupTitles.followingPages = Piwik_Transitions_Translations.toFollowingPages;
+ this.groupTitles.followingSiteSearches = Piwik_Transitions_Translations.toFollowingSiteSearches;
+ this.groupTitles.outlinks = Piwik_Transitions_Translations.outlinks;
+ this.groupTitles.downloads = Piwik_Transitions_Translations.downloads;
+
+ this.shareInGroupTexts = {
+ previousPages: Piwik_Transitions_Translations.fromPreviousPagesInline,
+ previousSiteSearches: Piwik_Transitions_Translations.fromPreviousSiteSearchesInline,
+ followingPages: Piwik_Transitions_Translations.toFollowingPagesInline,
+ followingSiteSearches: Piwik_Transitions_Translations.toFollowingSiteSearchesInline,
+ searchEngines: Piwik_Transitions_Translations.fromSearchEnginesInline,
+ websites: Piwik_Transitions_Translations.fromWebsitesInline,
+ campaigns: Piwik_Transitions_Translations.fromCampaignsInline,
+ outlinks: Piwik_Transitions_Translations.outlinksInline,
+ downloads: Piwik_Transitions_Translations.downloadsInline
+ };
};
-Piwik_Transitions_Model.prototype.loadData = function(actionType, actionName, callback) {
- var self = this;
-
- this.pageviews = 0;
- this.exits = 0;
- this.loops = 0;
-
- this.directEntries = 0;
-
- this.searchEnginesNbTransitions = 0;
- this.searchEngines = [];
-
- this.websitesNbTransitions = 0;
- this.websites = [];
-
- this.campaignsNbTransitions = 0;
- this.campaigns = [];
-
- this.previousPagesNbTransitions = 0;
- this.previousPages = [];
-
- this.followingPagesNbTransitions = 0;
- this.followingPages = [];
-
- this.downloadsNbTransitions = 0;
- this.downloads = [];
-
- this.outlinksNbTransitions = 0;
- this.outlinks = [];
-
- this.previousSiteSearchesNbTransitions = 0;
- this.previousSiteSearches = [];
-
- this.followingSiteSearchesNbTransitions = 0;
- this.followingSiteSearches = [];
-
- this.date = '';
-
- this.ajax.callApi('Transitions.getTransitionsForAction', {
- actionType: actionType,
- actionName: actionName,
- expanded: 1
- },
- function(report) {
- self.date = report.date;
-
- // load page metrics
- self.pageviews = report.pageMetrics.pageviews;
- self.loops = report.pageMetrics.loops;
- self.exits = report.pageMetrics.exits;
-
- // load referrers: split direct entries and others
- for (var i = 0; i < report.referrers.length; i++) {
- var referrer = report.referrers[i];
- if (referrer.shortName == 'direct') {
- self.directEntries = referrer.visits;
- } else if (referrer.shortName == 'search') {
- self.searchEnginesNbTransitions = referrer.visits;
- self.searchEngines = referrer.details;
- self.groupTitles.searchEngines = referrer.label;
- } else if (referrer.shortName == 'website') {
- self.websitesNbTransitions = referrer.visits;
- self.websites = referrer.details;
- self.groupTitles.websites = referrer.label;
- } else if (referrer.shortName == 'campaign') {
- self.campaignsNbTransitions = referrer.visits;
- self.campaigns = referrer.details;
- self.groupTitles.campaigns = referrer.label;
- }
- }
-
- self.loadAndSumReport(report, 'previousPages');
- self.loadAndSumReport(report, 'previousSiteSearches');
- self.loadAndSumReport(report, 'followingPages');
- self.loadAndSumReport(report, 'followingSiteSearches');
- self.loadAndSumReport(report, 'downloads');
- self.loadAndSumReport(report, 'outlinks');
-
- if (typeof Piwik_Transitions_Model.totalNbPageviews == 'undefined') {
- Piwik_Transitions_Model.totalNbPageviews = false;
- self.ajax.loadTotalNbPageviews(function(nbPageviews) {
- Piwik_Transitions_Model.totalNbPageviews = nbPageviews;
- });
- }
-
- callback();
- });
+Piwik_Transitions_Model.prototype.loadData = function (actionType, actionName, callback) {
+ var self = this;
+
+ this.pageviews = 0;
+ this.exits = 0;
+ this.loops = 0;
+
+ this.directEntries = 0;
+
+ this.searchEnginesNbTransitions = 0;
+ this.searchEngines = [];
+
+ this.websitesNbTransitions = 0;
+ this.websites = [];
+
+ this.campaignsNbTransitions = 0;
+ this.campaigns = [];
+
+ this.previousPagesNbTransitions = 0;
+ this.previousPages = [];
+
+ this.followingPagesNbTransitions = 0;
+ this.followingPages = [];
+
+ this.downloadsNbTransitions = 0;
+ this.downloads = [];
+
+ this.outlinksNbTransitions = 0;
+ this.outlinks = [];
+
+ this.previousSiteSearchesNbTransitions = 0;
+ this.previousSiteSearches = [];
+
+ this.followingSiteSearchesNbTransitions = 0;
+ this.followingSiteSearches = [];
+
+ this.date = '';
+
+ this.ajax.callApi('Transitions.getTransitionsForAction', {
+ actionType: actionType,
+ actionName: actionName,
+ expanded: 1
+ },
+ function (report) {
+ self.date = report.date;
+
+ // load page metrics
+ self.pageviews = report.pageMetrics.pageviews;
+ self.loops = report.pageMetrics.loops;
+ self.exits = report.pageMetrics.exits;
+
+ // load referrers: split direct entries and others
+ for (var i = 0; i < report.referrers.length; i++) {
+ var referrer = report.referrers[i];
+ if (referrer.shortName == 'direct') {
+ self.directEntries = referrer.visits;
+ } else if (referrer.shortName == 'search') {
+ self.searchEnginesNbTransitions = referrer.visits;
+ self.searchEngines = referrer.details;
+ self.groupTitles.searchEngines = referrer.label;
+ } else if (referrer.shortName == 'website') {
+ self.websitesNbTransitions = referrer.visits;
+ self.websites = referrer.details;
+ self.groupTitles.websites = referrer.label;
+ } else if (referrer.shortName == 'campaign') {
+ self.campaignsNbTransitions = referrer.visits;
+ self.campaigns = referrer.details;
+ self.groupTitles.campaigns = referrer.label;
+ }
+ }
+
+ self.loadAndSumReport(report, 'previousPages');
+ self.loadAndSumReport(report, 'previousSiteSearches');
+ self.loadAndSumReport(report, 'followingPages');
+ self.loadAndSumReport(report, 'followingSiteSearches');
+ self.loadAndSumReport(report, 'downloads');
+ self.loadAndSumReport(report, 'outlinks');
+
+ if (typeof Piwik_Transitions_Model.totalNbPageviews == 'undefined') {
+ Piwik_Transitions_Model.totalNbPageviews = false;
+ self.ajax.loadTotalNbPageviews(function (nbPageviews) {
+ Piwik_Transitions_Model.totalNbPageviews = nbPageviews;
+ });
+ }
+
+ callback();
+ });
};
-Piwik_Transitions_Model.prototype.loadAndSumReport = function(apiData, reportName) {
- var data = this[reportName] = apiData[reportName];
- var sumVarName = reportName + 'NbTransitions';
+Piwik_Transitions_Model.prototype.loadAndSumReport = function (apiData, reportName) {
+ var data = this[reportName] = apiData[reportName];
+ var sumVarName = reportName + 'NbTransitions';
- this[sumVarName] = 0;
- for (var i = 0; i < data.length; i++) {
- this[sumVarName] += data[i].referrals;
- }
+ this[sumVarName] = 0;
+ for (var i = 0; i < data.length; i++) {
+ this[sumVarName] += data[i].referrals;
+ }
};
-Piwik_Transitions_Model.prototype.getTotalNbPageviews = function() {
- if (typeof Piwik_Transitions_Model.totalNbPageviews == 'undefined') {
- return false;
- }
- return Piwik_Transitions_Model.totalNbPageviews;
+Piwik_Transitions_Model.prototype.getTotalNbPageviews = function () {
+ if (typeof Piwik_Transitions_Model.totalNbPageviews == 'undefined') {
+ return false;
+ }
+ return Piwik_Transitions_Model.totalNbPageviews;
};
-Piwik_Transitions_Model.prototype.getGroupTitle = function(groupName) {
- if (typeof this.groupTitles[groupName] != 'undefined') {
- return this.groupTitles[groupName];
- }
- return groupName;
+Piwik_Transitions_Model.prototype.getGroupTitle = function (groupName) {
+ if (typeof this.groupTitles[groupName] != 'undefined') {
+ return this.groupTitles[groupName];
+ }
+ return groupName;
};
-Piwik_Transitions_Model.prototype.getShareInGroupTooltip = function(share, groupName) {
- var tip = this.shareInGroupTexts[groupName];
- return tip.replace(/%s/, share);
+Piwik_Transitions_Model.prototype.getShareInGroupTooltip = function (share, groupName) {
+ var tip = this.shareInGroupTexts[groupName];
+ return tip.replace(/%s/, share);
};
-Piwik_Transitions_Model.prototype.getDetailsForGroup = function(groupName) {
- return this.addPercentagesToData(this[groupName]);
+Piwik_Transitions_Model.prototype.getDetailsForGroup = function (groupName) {
+ return this.addPercentagesToData(this[groupName]);
};
-Piwik_Transitions_Model.prototype.getPercentage = function(metric, formatted) {
- var percentage = (this.pageviews == 0 ? 0 : this[metric] / this.pageviews);
+Piwik_Transitions_Model.prototype.getPercentage = function (metric, formatted) {
+ var percentage = (this.pageviews == 0 ? 0 : this[metric] / this.pageviews);
- if (formatted) {
- percentage = this.roundPercentage(percentage);
- percentage += '%';
- }
+ if (formatted) {
+ percentage = this.roundPercentage(percentage);
+ percentage += '%';
+ }
- return percentage;
+ return percentage;
};
-Piwik_Transitions_Model.prototype.addPercentagesToData = function(data) {
- var total = 0;
+Piwik_Transitions_Model.prototype.addPercentagesToData = function (data) {
+ var total = 0;
- for (var i = 0; i < data.length; i++) {
- total += parseInt(data[i].referrals, 10);
- }
+ for (var i = 0; i < data.length; i++) {
+ total += parseInt(data[i].referrals, 10);
+ }
- for (i = 0; i < data.length; i++) {
- data[i].percentage = this.roundPercentage(data[i].referrals / total);
- }
+ for (i = 0; i < data.length; i++) {
+ data[i].percentage = this.roundPercentage(data[i].referrals / total);
+ }
- return data;
+ return data;
};
-Piwik_Transitions_Model.prototype.roundPercentage = function(value) {
- if (value < .1) {
- return Math.round(value * 1000) / 10.0;
- } else {
- return Math.round(value * 100);
- }
+Piwik_Transitions_Model.prototype.roundPercentage = function (value) {
+ if (value < .1) {
+ return Math.round(value * 1000) / 10.0;
+ } else {
+ return Math.round(value * 100);
+ }
};
@@ -1379,16 +1379,16 @@ Piwik_Transitions_Model.prototype.roundPercentage = function(value) {
function Piwik_Transitions_Ajax() {
}
-Piwik_Transitions_Ajax.prototype.loadTotalNbPageviews = function(callback) {
- this.callApi('Actions.get', {
- columns: 'nb_pageviews'
- }, function(response) {
- var value = typeof response.value != 'undefined' ? response.value : false;
- callback(value);
- });
+Piwik_Transitions_Ajax.prototype.loadTotalNbPageviews = function (callback) {
+ this.callApi('Actions.get', {
+ columns: 'nb_pageviews'
+ }, function (response) {
+ var value = typeof response.value != 'undefined' ? response.value : false;
+ callback(value);
+ });
};
-Piwik_Transitions_Ajax.prototype.callTransitionsController = function(action, callback) {
+Piwik_Transitions_Ajax.prototype.callTransitionsController = function (action, callback) {
var ajaxRequest = new ajaxHelper();
ajaxRequest.addParams({
module: 'Transitions',
@@ -1399,16 +1399,16 @@ Piwik_Transitions_Ajax.prototype.callTransitionsController = function(action, ca
ajaxRequest.send(false);
};
-Piwik_Transitions_Ajax.prototype.callApi = function(method, params, callback) {
- var self = this;
+Piwik_Transitions_Ajax.prototype.callApi = function (method, params, callback) {
+ var self = this;
- params.format = 'JSON';
- params.module = 'API';
+ params.format = 'JSON';
+ params.module = 'API';
params.method = method;
var ajaxRequest = new ajaxHelper();
ajaxRequest.addParams(params, 'get');
- ajaxRequest.useCallbackInCaseOfError();
+ ajaxRequest.useCallbackInCaseOfError();
ajaxRequest.setCallback(
function (result) {
if (typeof result.result != 'undefined' && result.result == 'error') {
@@ -1463,55 +1463,55 @@ Piwik_Transitions_Ajax.prototype.callApi = function(method, params, callback) {
Piwik_Transitions_Util = {
- /**
- * Removes protocol, www and trailing slashes from a URL.
- * If removeDomain is set, the domain is removed as well.
- */
- shortenUrl: function(url, removeDomain) {
- if (url == 'Others') {
- return url;
- }
-
- var urlBackup = url;
- url = url.replace(/http(s)?:\/\/(www\.)?/, '');
-
- if (urlBackup == url) {
- return url;
- }
-
- if (removeDomain) {
- url = url.replace(/[^\/]*/, '');
- if (url == '/') {
- url = urlBackup;
- }
- }
-
- url = url.replace(/\/$/, '');
-
- return url;
- },
-
- /**
- * Replaces a %s placeholder in the HTML.
- * The special feature is that it can be called multiple times, replacing the already
- * replaced placeholder again. It creates a span that can be assigned a class using the
- * spanClass parameter. The default class is 'Transitions_Metric'.
- */
- replacePlaceholderInHtml: function(container, value, spanClass) {
- var span = container.find('span');
- if (span.size() == 0) {
- var html = container.html().replace(/%s/, '<span></span>');
- span = container.html(html).find('span');
- if (!spanClass) {
- spanClass = 'Transitions_Metric';
- }
- span.addClass(spanClass);
- }
- if ($.browser.msie && parseFloat($.browser.version) < 8) {
- // ie7 fix
- value += '&nbsp;';
- }
- span.html(value);
- }
+ /**
+ * Removes protocol, www and trailing slashes from a URL.
+ * If removeDomain is set, the domain is removed as well.
+ */
+ shortenUrl: function (url, removeDomain) {
+ if (url == 'Others') {
+ return url;
+ }
+
+ var urlBackup = url;
+ url = url.replace(/http(s)?:\/\/(www\.)?/, '');
+
+ if (urlBackup == url) {
+ return url;
+ }
+
+ if (removeDomain) {
+ url = url.replace(/[^\/]*/, '');
+ if (url == '/') {
+ url = urlBackup;
+ }
+ }
+
+ url = url.replace(/\/$/, '');
+
+ return url;
+ },
+
+ /**
+ * Replaces a %s placeholder in the HTML.
+ * The special feature is that it can be called multiple times, replacing the already
+ * replaced placeholder again. It creates a span that can be assigned a class using the
+ * spanClass parameter. The default class is 'Transitions_Metric'.
+ */
+ replacePlaceholderInHtml: function (container, value, spanClass) {
+ var span = container.find('span');
+ if (span.size() == 0) {
+ var html = container.html().replace(/%s/, '<span></span>');
+ span = container.html(html).find('span');
+ if (!spanClass) {
+ spanClass = 'Transitions_Metric';
+ }
+ span.addClass(spanClass);
+ }
+ if ($.browser.msie && parseFloat($.browser.version) < 8) {
+ // ie7 fix
+ value += '&nbsp;';
+ }
+ span.html(value);
+ }
};