diff options
author | Thomas Steur <tsteur@users.noreply.github.com> | 2018-12-11 09:30:42 +0300 |
---|---|---|
committer | diosmosis <diosmosis@users.noreply.github.com> | 2018-12-11 09:30:42 +0300 |
commit | a06e2d5c27e0172b6de647c6754b9eead5ed0b36 (patch) | |
tree | 907efbc6f18aa1a7a514a716b9fccb63aa512900 /plugins/Transitions | |
parent | ef5b071576e06dda758d2a0855058aef11b160fd (diff) |
Add new transitions report (#13475)3.8.0-b4
* trying to add a report through visualization
* refs #12865 added transitions report
* small tweak
* remove auto generated api
* apply review feedback
* add ui test, fix widget view
* fix ui test
* fix tests
* update screenshots
* fix various issues
* trying to fix tests
* fix tests
* Update expected screenshot tests.
* Try to fix random failure & update screenshots.
* add help text, add icon, do not fetch anything when no action name
* trying to fix tests
* tweak code
* run tests again
* Update expected screenshots.
Diffstat (limited to 'plugins/Transitions')
15 files changed, 463 insertions, 16 deletions
diff --git a/plugins/Transitions/Categories/TransitionsSubcategory.php b/plugins/Transitions/Categories/TransitionsSubcategory.php new file mode 100644 index 0000000000..d801ab1ba3 --- /dev/null +++ b/plugins/Transitions/Categories/TransitionsSubcategory.php @@ -0,0 +1,19 @@ +<?php +/** + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ +namespace Piwik\Plugins\Transitions\Categories; + +use Piwik\Category\Subcategory; + +class TransitionsSubcategory extends Subcategory +{ + protected $categoryId = 'General_Actions'; + protected $id = 'Transitions_Transitions'; + protected $order = 46; + +} diff --git a/plugins/Transitions/Transitions.php b/plugins/Transitions/Transitions.php index c1c10d8b81..fd28fb9be6 100644 --- a/plugins/Transitions/Transitions.php +++ b/plugins/Transitions/Transitions.php @@ -14,7 +14,7 @@ namespace Piwik\Plugins\Transitions; class Transitions extends \Piwik\Plugin { /** - * @see Piwik\Plugin::registerEvents + * @see \Piwik\Plugin::registerEvents */ public function registerEvents() { @@ -33,11 +33,17 @@ class Transitions extends \Piwik\Plugin public function getJsFiles(&$jsFiles) { $jsFiles[] = 'plugins/Transitions/javascripts/transitions.js'; + $jsFiles[] = 'plugins/Transitions/angularjs/transitionswitcher/transitionswitcher.controller.js'; } public function getClientSideTranslationKeys(&$translationKeys) { $translationKeys[] = 'General_TransitionsRowActionTooltipTitle'; $translationKeys[] = 'General_TransitionsRowActionTooltip'; + $translationKeys[] = 'Actions_PageUrls'; + $translationKeys[] = 'Actions_WidgetPageTitles'; + $translationKeys[] = 'Transitions_NumPageviews'; + $translationKeys[] = 'CoreHome_ThereIsNoDataForThisReport'; + $translationKeys[] = 'General_Others'; } } diff --git a/plugins/Transitions/Widgets/GetTransitions.php b/plugins/Transitions/Widgets/GetTransitions.php new file mode 100644 index 0000000000..0c1cdf3e46 --- /dev/null +++ b/plugins/Transitions/Widgets/GetTransitions.php @@ -0,0 +1,47 @@ +<?php +/** + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ +namespace Piwik\Plugins\Transitions\Widgets; + +use Piwik\Common; +use Piwik\Piwik; +use Piwik\Plugins\Transitions\Controller; +use Piwik\Widget\Widget; +use Piwik\Widget\WidgetConfig; + +class GetTransitions extends Widget +{ + public static function configure(WidgetConfig $config) + { + $config->setCategoryId('General_Actions'); + $config->setSubcategoryId('Transitions_Transitions'); + $config->setName('Transitions_Transitions'); + $config->setOrder(99); + $idSite = self::getIdSite(); + if (!$idSite || !Piwik::isUserHasViewAccess($idSite)) { + $config->disable(); + } + } + + private static function getIdSite() + { + return Common::getRequestVar('idSite', 0, 'int'); + } + + public function render() + { + Piwik::checkUserHasViewAccess(self::getIdSite()); + + $isWidgetized = Common::getRequestVar('widget', 0, 'int') === 1; + + return $this->renderTemplate('transitions', array( + 'isWidget' => $isWidgetized + )); + } + +}
\ No newline at end of file diff --git a/plugins/Transitions/angularjs/transitionswitcher/transitionswitcher.controller.js b/plugins/Transitions/angularjs/transitionswitcher/transitionswitcher.controller.js new file mode 100644 index 0000000000..4195ba495a --- /dev/null +++ b/plugins/Transitions/angularjs/transitionswitcher/transitionswitcher.controller.js @@ -0,0 +1,155 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +(function () { + angular.module('piwikApp').controller('TransitionSwitcherController', TransitionSwitcherController); + + TransitionSwitcherController.$inject = ['piwikApi', '$filter', '$rootScope']; + + function TransitionSwitcherController(piwikApi, $filter, $rootScope) { + var translate = $filter('translate'); + + var self = this; + this.actionType = 'Actions.getPageUrls'; + this.actionNameOptions = []; + this.actionTypeOptions = [ + {key: 'Actions.getPageUrls', value: translate('Actions_PageUrls')}, + {key: 'Actions.getPageTitles', value: translate('Actions_WidgetPageTitles')} + ]; + this.isLoading = false; + this.transitions = null; + this.actionName = null; + this.isEnabled = true; + var noDataKey = '_____ignore_____'; + + this.detectActionName = function (reports) + { + var othersLabel = translate('General_Others'); + + var label, report; + for (var i = 0; i < reports.length; i++) { + if (!reports[i]) { + continue; + } + + report = reports[i]; + + if (report.label === othersLabel) { + continue; + } + + var key = null; + if (self.isUrlReport()) { + key = report.url + } else { + key = report.label; + } + + if (key) { + label = report.label + ' (' + translate('Transitions_NumPageviews', report.nb_hits) + ')'; + self.actionNameOptions.push({key: key, value: label, url: report.url}); + if (!self.actionName) { + self.actionName = key + } + } + } + } + + this.isUrlReport = function() + { + return this.actionType === 'Actions.getPageUrls'; + } + + this.fetch = function (type) { + this.isLoading = true; + this.actionNameOptions = []; + this.actionName = null; + + piwikApi.fetch({ + method: type, + flat: 1, filter_limit: 100, + filter_sort_order: 'desc', + filter_sort_column: 'nb_hits', + showColumns: 'label,nb_hits,url' + }).then(function (report) { + self.isLoading = false; + self.actionNameOptions = []; + self.actionName = null; + + if (report && report.length) { + self.isEnabled = true; + self.detectActionName(report); + self.onActionNameChange(self.actionName); + } + + if (null === self.actionName || self.actionNameOptions.length === 0) { + self.isEnabled = false; + self.actionName = noDataKey; + self.actionNameOptions.push({key: noDataKey, value: translate('CoreHome_ThereIsNoDataForThisReport')}); + } + }, function () { + self.isLoading = false; + self.isEnabled = false; + }); + } + + this.onActionTypeChange = function (actionName) { + this.fetch(actionName); + }; + + this.onActionNameChange = function (actionName) { + if (actionName === null || actionName === noDataKey) { + return; + } + + var type = 'url'; + if (!this.isUrlReport()) { + type = 'title'; + } + if (!this.transitions) { + this.transitions = new Piwik_Transitions(type, actionName, null, ''); + } else { + this.transitions.reset(type, actionName, ''); + } + this.transitions.showPopover(true); + }; + + $rootScope.$on('Transitions.switchTransitionsUrl', function (event, params) { + if (params && params.url) { + if (self.isUrlReport()) { + params.url = params.url.replace('https://', '').replace('http://', ''); + } + + var found = false, option, optionUrl; + for (var i = 0; i < self.actionNameOptions.length; i++) { + option = self.actionNameOptions[i]; + optionUrl = option.url; + if (optionUrl && self.isUrlReport()) { + optionUrl = String(optionUrl).replace('https://', '').replace('http://', ''); + } else { + optionUrl = null; + } + + if (!found && (option.key === params.url || (params.url === optionUrl && optionUrl))) { + found = true; + self.actionName = option.key; + } + } + if (!found) { + // we only fetch top 100 in the report... so the entry the user clicked on, might not be in the top 100 + var options = angular.copy(self.actionNameOptions); // somehow needed to force angular to render it + options.push({key: params.url, value: params.url}); + self.actionNameOptions = options; + self.actionName = params.url; + } + self.onActionNameChange(self.actionName); + } + }); + + this.fetch(this.actionType); + } +})();
\ No newline at end of file diff --git a/plugins/Transitions/javascripts/transitions.js b/plugins/Transitions/javascripts/transitions.js index 944fb0c765..4a0b74df63 100644 --- a/plugins/Transitions/javascripts/transitions.js +++ b/plugins/Transitions/javascripts/transitions.js @@ -183,15 +183,29 @@ Piwik_Transitions.prototype.reset = function (actionType, actionName, segment) { }; /** Open the popover */ -Piwik_Transitions.prototype.showPopover = function () { +Piwik_Transitions.prototype.showPopover = function (showEmbeddedInReport) { var self = this; + this.showEmbeddedInReport = showEmbeddedInReport; - this.popover = Piwik_Popover.showLoading('Transitions', self.actionName, 550); - Piwik_Popover.addHelpButton('https://matomo.org/docs/transitions'); + $('#transitions_report .popoverContainer').hide(); - var bothLoaded = function () { - Piwik_Popover.setContent(Piwik_Transitions.popoverHtml); + if (showEmbeddedInReport) { + this.popover = $('#transitions_report'); + $('#Transitions_Error_Container').hide(); + $('#transitions_inline_loading').show(); + } else { + this.popover = Piwik_Popover.showLoading('Transitions', self.actionName, 550); + Piwik_Popover.addHelpButton('https://matomo.org/docs/transitions'); + } + var bothLoaded = function () { + if (!showEmbeddedInReport) { + Piwik_Popover.setContent(Piwik_Transitions.popoverHtml); + } else { + $('#transitions_inline_loading').hide(); + $('#transitions_report .popoverContainer').html(Piwik_Transitions.popoverHtml); + $('#transitions_report .popoverContainer').show(); + } self.preparePopover(); self.model.htmlLoaded(); @@ -566,11 +580,26 @@ Piwik_Transitions.prototype.renderOpenGroup = function (groupName, side, onlyBg) var isOthers = (label == 'Others'); var onClick = false; if (!isOthers && (groupName == 'previousPages' || groupName == 'followingPages')) { - onClick = (function (url) { - return function () { - self.reloadPopover(url.replace(/^(?!http)/, 'http://')); - }; - })(label); + + if (this.showEmbeddedInReport) { + onClick = (function (url) { + return function () { + var $rootScope = piwikHelper.getAngularDependency('$rootScope'); + if ($rootScope) { + $rootScope.$emit('Transitions.switchTransitionsUrl', { + url:url + }); + } + }; + })(label); + } else { + onClick = (function (url) { + return function () { + self.reloadPopover(url.replace(/^(?!http)/, 'http://')); + }; + })(label); + } + } else if (!isOthers && (groupName == 'outlinks' || groupName == 'websites' || groupName == 'downloads')) { onClick = label } @@ -1516,7 +1545,25 @@ Piwik_Transitions_Ajax.prototype.callApi = function (method, params, callback) { } errorMessage = sprintf(errorMessage, '<br />'); - Piwik_Popover.showError(errorTitle, errorMessage, errorBack); + var inlineErrorNode = $('#Transitions_Error_Container'); + if (inlineErrorNode.length) { + // viewing it as report, not popover + inlineErrorNode.html(''); + var theContentNode = $(document.createElement('div')).addClass('Piwik_Popover_Error'); + + var p = $(document.createElement('p')).addClass('Piwik_Popover_Error_Title'); + theContentNode.append(p.html(errorTitle)); + + if (errorMessage) { + p = $(document.createElement('p')).addClass('Piwik_Popover_Error_Message'); + theContentNode.append(p.html(errorMessage)); + } + inlineErrorNode.append(theContentNode); + inlineErrorNode.show(); + $('#transitions_report .popoverContainer').hide(); + } else { + Piwik_Popover.showError(errorTitle, errorMessage, errorBack); + } }; if (typeof Piwik_Transitions_Translations == 'undefined') { diff --git a/plugins/Transitions/lang/en.json b/plugins/Transitions/lang/en.json index 7096f46606..3fece8c57e 100644 --- a/plugins/Transitions/lang/en.json +++ b/plugins/Transitions/lang/en.json @@ -2,11 +2,16 @@ "Transitions": { "BouncesInline": "%s bounces", "DirectEntries": "Direct Entries", + "Transitions": "Transitions", "ErrorBack": "Go back to the previous action", "ExitsInline": "%s exits", "NumPageviews": "%s pageviews", "NumDownloads": "%s downloads", "NumOutlinks": "%s outlinks", + "TopX": "Top %s labels", + "FeatureDescription": "Transitions gives you a report that shows the things your visitors did directly before and after viewing a certain page. This page will explain how to access, understand, and use the powerful Transitions report.", + "AvailableInOtherReports": "Did you know? Transitions are also available as a row action in the following reports:", + "AvailableInOtherReports2": "Simply hover a row in any of these reports and click on the transition icon %s to launch it.", "FromCampaigns": "From Campaigns", "FromPreviousPages": "From Internal Pages", "FromPreviousPagesInline": "%s from internal pages", @@ -27,6 +32,7 @@ "ToFollowingSiteSearches": "Internal Searches", "ToFollowingSiteSearchesInline": "%s internal searches", "XOfAllPageviews": "%s of all views of this page", - "XOutOfYVisits": "%1$s (out of %2$s)" + "XOutOfYVisits": "%1$s (out of %2$s)", + "PageURLTransitions": "Page URL Transitions" } }
\ No newline at end of file diff --git a/plugins/Transitions/stylesheets/transitions.less b/plugins/Transitions/stylesheets/transitions.less index 3ddbe1d12d..70b8d0e643 100644 --- a/plugins/Transitions/stylesheets/transitions.less +++ b/plugins/Transitions/stylesheets/transitions.less @@ -7,7 +7,6 @@ text-align: left; margin-left: 50px; } - .Transitions_Canvas_Container { position: absolute; } @@ -200,3 +199,52 @@ body .ui-tooltip.Transitions_Tooltip_Small { font-size: 12px; height: 21px; } + +#transitions_report { + #Transitions_Container { + z-index: 980; + } + #Transitions_CenterBox { + z-index: 987; + } + .Transitions_Text, + #Transitions_Loops { + z-index: 986; + } + #Transitions_Canvas_Background_Left { + z-index: 981; + } + #Transitions_Canvas_Background_Right { + z-index: 982; + } + #Transitions_Canvas_Left { + z-index: 983; + } + #Transitions_Canvas_Right { + z-index: 984; + } + #Transitions_Canvas_Loops { + z-index: 985; + } +} + +.widget #Transitions_Container h3 { + padding: 0 !important; +} + +#transitions_report { + div[name=actionType] { + margin-left: -0.75rem; + } + div[name=actionName] { + margin-right: -0.75rem; + } +} + +#dashboardWidgetsArea { + #transitions_report { + #Transitions_Container { + overflow: scroll; + } + } +}
\ No newline at end of file diff --git a/plugins/Transitions/templates/transitions.twig b/plugins/Transitions/templates/transitions.twig new file mode 100644 index 0000000000..8bb6657361 --- /dev/null +++ b/plugins/Transitions/templates/transitions.twig @@ -0,0 +1,53 @@ +{% if not isWidget %}<div piwik-content-block + help-text="{{ 'Transitions_FeatureDescription'|translate|e('html_attr') }}" + help-url="https://matomo.org/docs/transitions/" + content-title="{{ 'Transitions_Transitions'|translate|e('html_attr') }}">{% endif %} + +<div id="transitions_report" {% if isWidget %}class="widgetBody"{% endif %} ng-controller="TransitionSwitcherController as transitionSwitcher"> + <div class="row"> + <div class="col s12 m3"> + <div piwik-field uicontrol="select" name="actionType" + ng-model="transitionSwitcher.actionType" + ng-change="transitionSwitcher.onActionTypeChange(transitionSwitcher.actionType)" + title="{{ 'Actions_ActionType'|translate|e('html_attr') }}" + full-width="true" + options='transitionSwitcher.actionTypeOptions'> + </div> + </div> + <div class="col s12 m9"> + <div piwik-field uicontrol="select" name="actionName" + ng-model="transitionSwitcher.actionName" + ng-change="transitionSwitcher.onActionNameChange(transitionSwitcher.actionName)" + title="{{ 'Transitions_TopX'|translate(100)|e('html_attr') }}" + full-width="true" + disabled="!transitionSwitcher.isEnabled" + options='transitionSwitcher.actionNameOptions'> + </div> + </div> + </div> + + <div piwik-activity-indicator loading="transitionSwitcher.isLoading"></div> + + <div class="loadingPiwik" ng-show="!transitionSwitcher.isLoading" style="display:none" id="transitions_inline_loading"> + <img src="plugins/Morpheus/images/loading-blue.gif" alt=""/> <span>{{ 'General_LoadingData'|translate }}</span> + </div> + + <div class="popoverContainer" ng-show="!transitionSwitcher.isLoading && transitionSwitcher.isEnabled"> + + </div> + + <div id="Transitions_Error_Container" ng-show="!transitionSwitcher.isLoading"> + + </div> + + <div class="alert alert-info"> + {{ 'Transitions_AvailableInOtherReports'|translate }} + {{ 'Actions_PageUrls'|translate }}, {{ 'Actions_SubmenuPageTitles'|translate }}, + {{ 'Actions_SubmenuPagesEntry'|translate }}, + {{ 'Actions_SubmenuPagesExit'|translate }}, + {{ 'General_Outlinks'|translate }}, {{ 'General_And'|translate }} {{ 'General_Downloads'|translate }}. + {{ 'Transitions_AvailableInOtherReports2'|translate('<span class="icon-transition"></span>')|raw }} + </div> +</div> + +{% if not isWidget %}</div>{% endif %}
\ No newline at end of file diff --git a/plugins/Transitions/tests/UI/Transitions_spec.js b/plugins/Transitions/tests/UI/Transitions_spec.js index b79a5e5868..47ad47d429 100644 --- a/plugins/Transitions/tests/UI/Transitions_spec.js +++ b/plugins/Transitions/tests/UI/Transitions_spec.js @@ -11,8 +11,23 @@ describe("Transitions", function () { this.timeout(0); var generalParams = 'idSite=1&period=year&date=2012-08-09', - urlBase = 'module=CoreHome&action=index&' + generalParams - ; + urlBase = 'module=CoreHome&action=index&' + generalParams; + + + function selectValue(page, field, title) + { + page.execCallback(function () { + page.webpage.evaluate(function(field) { + $(field + ' input.select-dropdown').click() + }, field); + }); + page.wait(800); + page.execCallback(function () { + page.webpage.evaluate(function(field, title) { + $(field + ' .dropdown-content.active li:contains("' + title + '"):first').click() + }, field, title); + }); + }; it('should load the transitions popup correctly for the page titles report', function (done) { expect.screenshot('transitions_popup_titles').to.be.captureSelector('.ui-dialog', function (page) { @@ -31,4 +46,37 @@ describe("Transitions", function () { page.mouseMove('.Transitions_CurveTextRight'); }, done); }); + + it('should show no data message in selector', function (done) { + expect.screenshot('transitions_report_no_data_widget').to.be.captureSelector('body', function (page) { + page.load("?module=Widgetize&action=iframe&widget=1&moduleToWidgetize=Transitions&actionToWidgetize=getTransitions&idSite=1&period=day&date=today&disableLink=1&widget=1"); + }, done); + }); + + it('should show report in reporting ui with data', function (done) { + expect.screenshot('transitions_report_with_data_report').to.be.captureSelector('.pageWrap', function (page) { + page.load("?" + urlBase + "#?" + generalParams + "&category=General_Actions&subcategory=Transitions_Transitions"); + page.wait(1000); + }, done); + }); + + it('should show report in widget ui in selector', function (done) { + expect.screenshot('transitions_report_with_data_widget').to.be.captureSelector('body', function (page) { + page.load("?module=Widgetize&action=iframe&widget=1&moduleToWidgetize=Transitions&actionToWidgetize=getTransitions&"+generalParams+"&disableLink=1&widget=1"); + page.wait(1000); + }, done); + }); + + it('should be possible to switch report', function (done) { + expect.screenshot('transitions_report_switch_url').to.be.captureSelector('body', function (page) { + selectValue(page, '[name="actionName"]', 'category/meta'); + }, done); + }); + + it('should be possible to show page titles', function (done) { + expect.screenshot('transitions_report_switch_type_title').to.be.captureSelector('body', function (page) { + selectValue(page, '[name="actionType"]', 'Title'); + }, done); + }); + });
\ No newline at end of file diff --git a/plugins/Transitions/tests/UI/expected-screenshots/Transitions_transitions_report_no_data.png b/plugins/Transitions/tests/UI/expected-screenshots/Transitions_transitions_report_no_data.png new file mode 100644 index 0000000000..aac01f83ef --- /dev/null +++ b/plugins/Transitions/tests/UI/expected-screenshots/Transitions_transitions_report_no_data.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab022db73d4eaf512752eadb27d365776b344fa96c45dbcf20ef505efc7b9d6a +size 33377 diff --git a/plugins/Transitions/tests/UI/expected-screenshots/Transitions_transitions_report_no_data_widget.png b/plugins/Transitions/tests/UI/expected-screenshots/Transitions_transitions_report_no_data_widget.png new file mode 100644 index 0000000000..15b4e54a70 --- /dev/null +++ b/plugins/Transitions/tests/UI/expected-screenshots/Transitions_transitions_report_no_data_widget.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:976d6bf0bb11d7d4b60faf797e23fe78abd188b2d8956431b5f31c7363a0bb84 +size 26265 diff --git a/plugins/Transitions/tests/UI/expected-screenshots/Transitions_transitions_report_switch_type_title.png b/plugins/Transitions/tests/UI/expected-screenshots/Transitions_transitions_report_switch_type_title.png new file mode 100644 index 0000000000..eb1fd2914f --- /dev/null +++ b/plugins/Transitions/tests/UI/expected-screenshots/Transitions_transitions_report_switch_type_title.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf28366b7ba8fa3e97fc3fffe0980b3bb6e797465bacf88937f1334de623301c +size 135466 diff --git a/plugins/Transitions/tests/UI/expected-screenshots/Transitions_transitions_report_switch_url.png b/plugins/Transitions/tests/UI/expected-screenshots/Transitions_transitions_report_switch_url.png new file mode 100644 index 0000000000..6988ecfbc9 --- /dev/null +++ b/plugins/Transitions/tests/UI/expected-screenshots/Transitions_transitions_report_switch_url.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48e58ecff0cbcb06568c2f7e61c2fff3afb1001455c2c859f6dd2471fc6cc960 +size 97853 diff --git a/plugins/Transitions/tests/UI/expected-screenshots/Transitions_transitions_report_with_data_report.png b/plugins/Transitions/tests/UI/expected-screenshots/Transitions_transitions_report_with_data_report.png new file mode 100644 index 0000000000..5938af1cac --- /dev/null +++ b/plugins/Transitions/tests/UI/expected-screenshots/Transitions_transitions_report_with_data_report.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6b573e75aa94dca586b082d29f9237df0b78d0a6da9543210c800c498179490 +size 155679 diff --git a/plugins/Transitions/tests/UI/expected-screenshots/Transitions_transitions_report_with_data_widget.png b/plugins/Transitions/tests/UI/expected-screenshots/Transitions_transitions_report_with_data_widget.png new file mode 100644 index 0000000000..d9c4fe2d03 --- /dev/null +++ b/plugins/Transitions/tests/UI/expected-screenshots/Transitions_transitions_report_with_data_widget.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e86fe7b1000f086744347d8023e76f967d5b1e3835721f7ee398dab18adc7568 +size 151398 |