From d26f304da8d0a0f995abafc11501676dad6be846 Mon Sep 17 00:00:00 2001 From: Zoltan Flamis Date: Mon, 29 Mar 2021 16:42:17 +1300 Subject: Improve no data tracked yet screen (#17367) * wip * wip * wip * wip * wip * tabs and basic structure * wip * wip * tagmanager tab * fix send email link * use element, add comment * use widget loader * test wip * site type guesser class * add sharepoint guess * catch http request exception * update ui test images * cache site types and gtm * cache DI * fill untranslated text Co-authored-by: diosmosis --- .../content-block/content-block.directive.js | 3 +- .../widget-loader/widgetloader.directive.js | 3 +- plugins/SitesManager/Controller.php | 67 +++++++++++++- plugins/SitesManager/GtmSiteTypeGuesser.php | 68 ++++++++++++++ plugins/SitesManager/SitesManager.php | 21 +++++ plugins/SitesManager/lang/en.json | 14 ++- plugins/SitesManager/stylesheets/SitesManager.less | 4 + .../templates/_siteWithoutDataTabs.twig | 87 ++++++++++++++++++ .../SitesManager/templates/siteWithoutData.twig | 89 +++--------------- .../tests/Unit/GuessSiteTypeAndGtmTest.php | 102 +++++++++++++++++++++ .../EmptySite_emptySiteDashboard.png | 4 +- .../expected-screenshots/OneClickUpdate_login.png | 4 +- 12 files changed, 377 insertions(+), 89 deletions(-) create mode 100644 plugins/SitesManager/GtmSiteTypeGuesser.php create mode 100644 plugins/SitesManager/templates/_siteWithoutDataTabs.twig create mode 100644 plugins/SitesManager/tests/Unit/GuessSiteTypeAndGtmTest.php diff --git a/plugins/CoreHome/angularjs/content-block/content-block.directive.js b/plugins/CoreHome/angularjs/content-block/content-block.directive.js index 2746f58ab5..d803bb98c5 100644 --- a/plugins/CoreHome/angularjs/content-block/content-block.directive.js +++ b/plugins/CoreHome/angularjs/content-block/content-block.directive.js @@ -82,9 +82,8 @@ element.css('marginTop', '0'); } } - }; } }; } -})(); \ No newline at end of file +})(); diff --git a/plugins/CoreHome/angularjs/widget-loader/widgetloader.directive.js b/plugins/CoreHome/angularjs/widget-loader/widgetloader.directive.js index be6de1bf47..b1c0c3a11d 100644 --- a/plugins/CoreHome/angularjs/widget-loader/widgetloader.directive.js +++ b/plugins/CoreHome/angularjs/widget-loader/widgetloader.directive.js @@ -27,7 +27,8 @@ transclude: true, scope: { piwikWidgetLoader: '=', - widgetName: '@' + widgetName: '@', + loadingMessage: '@' }, templateUrl: 'plugins/CoreHome/angularjs/widget-loader/widgetloader.directive.html?cb=' + piwik.cacheBuster, compile: function (element, attrs) { diff --git a/plugins/SitesManager/Controller.php b/plugins/SitesManager/Controller.php index 5888aaf60e..79cf29882b 100644 --- a/plugins/SitesManager/Controller.php +++ b/plugins/SitesManager/Controller.php @@ -22,12 +22,24 @@ use Piwik\Site; use Piwik\Tracker\TrackerCodeGenerator; use Piwik\Url; use Piwik\View; +use Piwik\Http; +use Piwik\Plugins\SitesManager\GtmSiteTypeGuesser; +use Matomo\Cache\Lazy; /** * */ class Controller extends \Piwik\Plugin\ControllerAdmin { + /** @var Lazy */ + private $cache; + + public function __construct(Lazy $cache) { + $this->cache = $cache; + + parent::__construct(); + } + /** * Main view showing listing of websites and settings */ @@ -38,7 +50,7 @@ class Controller extends \Piwik\Plugin\ControllerAdmin return $this->renderTemplate('index'); } - + public function globalSettings() { Piwik::checkUserHasSuperUserAccess(); @@ -146,6 +158,47 @@ class Controller extends \Piwik\Plugin\ControllerAdmin 'idSite' => $this->idSite ), $viewType = 'basic'); + return $this->renderTemplateAs('siteWithoutData', array( + 'siteName' => $this->site->getName(), + 'idSite' => $this->idSite, + 'piwikUrl' => $piwikUrl, + 'emailBody' => $emailContent, + ), $viewType = 'basic'); + } + + public function siteWithoutDataTabs() { + $typeCacheId = 'guessedtype_' . md5($this->site->getMainUrl()); + $gtmCacheId = 'guessedgtm_' . md5($this->site->getMainUrl()); + + $siteType = $this->cache->fetch($typeCacheId); + $gtmUsed = $this->cache->fetch($gtmCacheId); + + if (!$siteType) { + try { + $response = Http::sendHttpRequest($this->site->getMainUrl(), 5, null, null, 0, false, false, true); + } catch (Exception $e) { + $response = false; + } + + $guesser = new GtmSiteTypeGuesser(); + $siteType = $guesser->guessSiteTypeFromResponse($response); + $gtmUsed = $guesser->guessGtmFromResponse($response); + + $this->cache->save($typeCacheId, $siteType, 60 * 60 * 24); + $this->cache->save($gtmCacheId, $gtmUsed, 60 * 60 * 24); + } + + $instructionUrl = SitesManager::getInstructionUrlBySiteType($siteType); + + $piwikUrl = Url::getCurrentUrlWithoutFileName(); + $jsTag = Request::processRequest('SitesManager.getJavascriptTag', array('idSite' => $this->idSite, 'piwikUrl' => $piwikUrl)); + + $showMatomoLinks = true; + /** + * @ignore + */ + Piwik::postEvent('SitesManager.showMatomoLinksInTrackingCodeEmail', array(&$showMatomoLinks)); + $googleAnalyticsImporterMessage = ''; if (Manager::getInstance()->isPluginLoaded('GoogleAnalyticsImporter')) { $googleAnalyticsImporterMessage = '

' . Piwik::translate('CoreAdminHome_ImportFromGoogleAnalytics') . '

' @@ -158,14 +211,22 @@ class Controller extends \Piwik\Plugin\ControllerAdmin Piwik::postEvent('SitesManager.siteWithoutData.customizeImporterMessage', [&$googleAnalyticsImporterMessage]); } - return $this->renderTemplateAs('siteWithoutData', array( + $tagManagerActive = false; + if (Manager::getInstance()->isPluginActivated('TagManager')) { + $tagManagerActive = true; + } + + return $this->renderTemplateAs('_siteWithoutDataTabs', array( 'siteName' => $this->site->getName(), 'idSite' => $this->idSite, 'jsTag' => $jsTag, 'piwikUrl' => $piwikUrl, - 'emailBody' => $emailContent, 'showMatomoLinks' => $showMatomoLinks, + 'siteType' => $siteType, + 'instructionUrl' => $instructionUrl, + 'gtmUsed' => $gtmUsed, 'googleAnalyticsImporterMessage' => $googleAnalyticsImporterMessage, + 'tagManagerActive' => $tagManagerActive, ), $viewType = 'basic'); } } diff --git a/plugins/SitesManager/GtmSiteTypeGuesser.php b/plugins/SitesManager/GtmSiteTypeGuesser.php new file mode 100644 index 0000000000..d79313c275 --- /dev/null +++ b/plugins/SitesManager/GtmSiteTypeGuesser.php @@ -0,0 +1,68 @@ +'; + if (strpos($response['data'], $needle) !== false) { + return SitesManager::SITE_TYPE_SQUARESPACE; + } + + $needle = 'X-Wix-Published-Version'; + if (strpos($response['data'], $needle) !== false) { + return SitesManager::SITE_TYPE_WIX; + } + + // https://github.com/joomla/joomla-cms/blob/staging/libraries/src/Application/WebApplication.php#L516 + // Joomla was the outcome of a fork of Mambo on 17 August 2005 - https://en.wikipedia.org/wiki/Joomla + if (isset($response['headers']['expires']) && $response['headers']['expires'] === 'Wed, 17 Aug 2005 00:00:00 GMT') { + return SitesManager::SITE_TYPE_JOOMLA; + } + + $needle = 'Shopify.theme'; + if (strpos($response['data'], $needle) !== false) { + return SitesManager::SITE_TYPE_SHOPIFY; + } + + $needle = 'content="Microsoft SharePoint'; + if (strpos($response['data'], $needle) !== false) { + return SitesManager::SITE_TYPE_SHAREPOINT; + } + + return SitesManager::SITE_TYPE_UNKNOWN; + } + + public function guessGtmFromResponse($response) + { + if ($response === false) { + return false; + } + + $needle = 'gtm.start'; + if (strpos($response['data'], $needle) !== false) { + return true; + } + + return false; + } +} diff --git a/plugins/SitesManager/SitesManager.php b/plugins/SitesManager/SitesManager.php index 8a40bc4a98..3c0fa2a8c6 100644 --- a/plugins/SitesManager/SitesManager.php +++ b/plugins/SitesManager/SitesManager.php @@ -32,6 +32,13 @@ class SitesManager extends \Piwik\Plugin const KEEP_URL_FRAGMENT_USE_DEFAULT = 0; const KEEP_URL_FRAGMENT_YES = 1; const KEEP_URL_FRAGMENT_NO = 2; + const SITE_TYPE_UNKNOWN = 'unknown'; + const SITE_TYPE_WORDPRESS = 'wordpress'; + const SITE_TYPE_SQUARESPACE = 'squarespace'; + const SITE_TYPE_WIX = 'wix'; + const SITE_TYPE_SHAREPOINT = 'sharepoint'; + const SITE_TYPE_JOOMLA = 'joomla'; + const SITE_TYPE_SHOPIFY = 'shopify'; /** * @see \Piwik\Plugin::registerEvents @@ -351,6 +358,20 @@ class SitesManager extends \Piwik\Plugin return $hosts; } + public static function getInstructionUrlBySiteType($siteType) + { + $map = [ + self::SITE_TYPE_JOOMLA => 'https://matomo.org/faq/new-to-piwik/how-do-i-install-the-matomo-analytics-tracking-code-on-joomla', + self::SITE_TYPE_SHAREPOINT => 'https://matomo.org/faq/how-to-install/faq_19424', + self::SITE_TYPE_SHOPIFY => 'https://matomo.org/faq/new-to-piwik/how-do-i-install-the-matomo-tracking-code-on-my-shopify-store', + self::SITE_TYPE_SQUARESPACE => 'https://matomo.org/faq/new-to-piwik/how-do-i-integrate-matomo-with-squarespace-website', + self::SITE_TYPE_WIX => 'https://matomo.org/faq/new-to-piwik/how-do-i-install-the-matomo-analytics-tracking-code-on-wix', + self::SITE_TYPE_WORDPRESS => 'https://matomo.org/faq/new-to-piwik/how-do-i-install-the-matomo-tracking-code-on-wordpress', + ]; + + return $map[$siteType] ? $map[$siteType] : false; + } + public function getClientSideTranslationKeys(&$translationKeys) { $translationKeys[] = "General_Save"; diff --git a/plugins/SitesManager/lang/en.json b/plugins/SitesManager/lang/en.json index 08b7131082..fc4ea83428 100644 --- a/plugins/SitesManager/lang/en.json +++ b/plugins/SitesManager/lang/en.json @@ -76,10 +76,19 @@ "Sites": "Websites", "SiteSearchUse": "You can use Matomo to track and report what visitors are searching in your website's internal search engine.", "SiteWithoutDataTitle": "No data has been recorded yet, get set up below", - "SiteWithoutDataDescription": "No analytics data has been tracked for this website yet.", + "SiteWithoutDataDescription": "Only one last step to track your web traffic with Matomo and gain valuable insights. You need to add some extra code to your website or mobile app if you haven't done already. Check your option below or %1$ssend all the instructions to a team mate%2$s.", "SiteWithoutDataSetupTracking": "Please set up the %1$stracking code%2$s below into your website or mobile app if you haven't done already.", "SiteWithoutDataMessageDisappears": "This message will disappear as soon as some data was tracked for this website.", "SiteWithoutDataIgnoreMessage": "Don't show this message for the next hour", + "SiteWithoutDataChoosePreferredWay": "Choose your preferred way of getting set up", + "SiteWithoutDataOtherWays": "Other ways", + "SiteWithoutDataOtherIntegrations": "Other integrations", + "SiteWithoutDataGoogleTagManager": "Google Tag Manager", + "SiteWithoutDataMatomoTagManager": "Matomo Tag Manager", + "SiteWithoutDataMatomoTagManagerNotActive": "Don't know what a Tag Manager is? Check out our %1$sTag Manager guide%2$s. If you are embedding multiple resources from 3rd party websites into your website, then tracking your website using the Tag Manager may be a better choice for you compared to using the regular JavaScript tracking.", + "SiteWithoutDataGoogleTagManagerDescription": "You can use Matomo with Google Tag Manager. To setup Matomo Tracking in Google Tag Manager, follow the instructions from this %1$sguide%2$s.", + "SiteWithoutDataDetectedSite": "We've detected you're using a %1$s site. Simple follow the instructions from this %2$sguide%3$s.", + "SiteWithoutDataDetectedGtm": "We've also detected you're using a Google Tag Manager. If you prefer to set up Matomo using GTM please follow this %2$sguide%3$s.", "SuperUserAccessCan": "A user with Super User access can also %1$s specify global settings%2$s for new websites.", "Timezone": "Time zone", "TrackingSiteSearch": "Tracking Internal Site Search", @@ -103,6 +112,7 @@ "EmailInstructionsSiteDetailsHeading": "Your Site Details", "EmailInstructionsSiteDetails": "You will need these details to use the API or SDKs to track Matomo visits.", "EmailInstructionsYourSiteId": "Your site ID: %1$s", - "EmailInstructionsYourTrackingUrl": "Your tracking URL: %1$s" + "EmailInstructionsYourTrackingUrl": "Your tracking URL: %1$s", + "DetectingYourSite": "Detecting your site" } } diff --git a/plugins/SitesManager/stylesheets/SitesManager.less b/plugins/SitesManager/stylesheets/SitesManager.less index 898f801755..3fcff25546 100644 --- a/plugins/SitesManager/stylesheets/SitesManager.less +++ b/plugins/SitesManager/stylesheets/SitesManager.less @@ -121,6 +121,10 @@ td.editable-site-field:hover { h3 { font-weight: bold; } + + p { + padding-bottom: 0.25rem; + } } #js-visitor-cv-extra th { diff --git a/plugins/SitesManager/templates/_siteWithoutDataTabs.twig b/plugins/SitesManager/templates/_siteWithoutDataTabs.twig new file mode 100644 index 0000000000..6e50deb89e --- /dev/null +++ b/plugins/SitesManager/templates/_siteWithoutDataTabs.twig @@ -0,0 +1,87 @@ + + +
+ + +
+

{{ 'SitesManager_Integrations'|translate }}

+ {% if siteType != constant('Piwik\\Plugins\\SitesManager\\SitesManager::SITE_TYPE_UNKNOWN') and instructionUrl %} +

{{ 'SitesManager_SiteWithoutDataDetectedSite'|translate(siteType|capitalize, '','')|raw }}

+ + {% if gtmUsed %} +

{{ 'SitesManager_SiteWithoutDataDetectedGtm'|translate(siteType|capitalize, '','')|raw }}

+ {% endif %} + +

{{ 'SitesManager_SiteWithoutDataOtherIntegrations'|translate }}: {{ 'CoreAdminHome_JSTrackingIntro3a'|translate('','')|raw }}

+ {% else %} +

{{ 'SitesManager_InstallationGuidesIntro'|translate }} + +

+ WordPress + | Squarespace + | Wix + | SharePoint + | Joomla + | Shopify + | Google Tag Manager +

+ +

{{ 'CoreAdminHome_JSTrackingIntro3a'|translate('','')|raw }}

+

{{ 'CoreAdminHome_JSTrackingIntro3b'|translate|raw }}

+
+

{{ 'SitesManager_ExtraInformationNeeded'|translate }}

+

Matomo URL: {{ piwikUrl }}

+

{{ 'SitesManager_EmailInstructionsYourSiteId'|translate('' ~ idSite ~ '')|raw }}

+ {% endif %} +
+ +
+

{{ 'CoreAdminHome_TrackingCode'|translate}}

+ +

{{ 'CoreAdminHome_JSTracking_CodeNoteBeforeClosingHead'|translate("</head>")|raw }}

+ +
{{ jsTag|raw }}
+ +

{{ 'CoreAdminHome_JSTrackingIntro5'|translate('','')|raw }}

+ +

{{ 'CoreAdminHome_JSTracking_EndNote'|translate('','')|raw }}

+
+ +
+ {% if tagManagerActive %} + {{ postEvent('Template.endTrackingCodePage') }} + {% else %} +

{{ 'SitesManager_SiteWithoutDataMatomoTagManager'|translate }}

+

{{ 'SitesManager_SiteWithoutDataMatomoTagManagerNotActive'|translate('', '')|raw }}

+ {% endif %} +
+ +
+

{{ 'SitesManager_LogAnalytics'|translate }}

+

{{ 'SitesManager_LogAnalyticsDescription'|translate('', '')|raw }}

+ +

{{ 'SitesManager_MobileAppsAndSDKs'|translate }}

+

{{ 'SitesManager_MobileAppsAndSDKsDescription'|translate('','')|raw }}

+ +

{{ 'CoreAdminHome_HttpTrackingApi'|translate }}

+

{{ 'CoreAdminHome_HttpTrackingApiDescription'|translate('','')|raw }}

+ +

{{ 'SitesManager_SiteWithoutDataGoogleTagManager'|translate }}

+

{{ 'SitesManager_SiteWithoutDataGoogleTagManagerDescription'|translate('','')|raw }}

+ + {% if googleAnalyticsImporterMessage is defined %} + {{ googleAnalyticsImporterMessage|raw }} + {% endif %} +
+
diff --git a/plugins/SitesManager/templates/siteWithoutData.twig b/plugins/SitesManager/templates/siteWithoutData.twig index 4f35259eec..f5da6d405f 100644 --- a/plugins/SitesManager/templates/siteWithoutData.twig +++ b/plugins/SitesManager/templates/siteWithoutData.twig @@ -27,92 +27,27 @@
-

- {{ 'SitesManager_SiteWithoutDataDescription'|translate }} {{ 'Installation_JSTracking_Intro'|translate }} - {{ 'SitesManager_SiteWithoutDataSetupTracking'|translate('', "")|raw }} -
-
- {{ 'SitesManager_SiteWithoutDataMessageDisappears'|translate }} - -

- -
- {% if showMatomoLinks %} -

{{ 'SitesManager_InstallationGuides'|translate }}

-

{{ 'SitesManager_InstallationGuidesIntro'|translate }} - - WordPress - | Squarespace - | Wix - | SharePoint - | Joomla - | Shopify - | Google Tag Manager -
-
- {{ 'SitesManager_ExtraInformationNeeded'|translate }} -
- Matomo URL: {{ piwikUrl }} -
- {{ 'SitesManager_EmailInstructionsYourSiteId'|translate('' ~ idSite ~ '')|raw }} -
-

- {% endif %} - -

{{ 'SitesManager_Integrations'|translate }}

- -

{{ 'CoreAdminHome_JSTrackingIntro3a'|translate('','')|raw }} {{ 'CoreAdminHome_JSTrackingIntro3b'|translate|raw }}

- -
-
- -

{{ 'General_JsTrackingTag'|translate }}

+

{{ 'SitesManager_SiteWithoutDataDescription'|translate('', '')|raw }}

+

{{ 'SitesManager_SiteWithoutDataMessageDisappears'|translate }}

-

{{ 'CoreAdminHome_JSTracking_CodeNoteBeforeClosingHead'|translate("</head>")|raw }}

-
- - {{ 'SitesManager_EmailInstructionsButton'|translate }} - -
+

{{ 'SitesManager_SiteWithoutDataChoosePreferredWay'|translate }}

-
{{ jsTag|raw }}
+
-

{{ 'CoreAdminHome_JSTrackingIntro5'|translate('','')|raw }}

+
-


{{ 'CoreAdminHome_JSTracking_EndNote'|translate('','')|raw }} -
-
- {{ 'SitesManager_CustomizeJavaScriptTracker'|translate }}

- -

{{ 'SitesManager_LogAnalytics'|translate }}

- -

{{ 'SitesManager_LogAnalyticsDescription'|translate('', '')|raw }}

- -

{{ 'SitesManager_MobileAppsAndSDKs'|translate }}

- -

{{ 'SitesManager_MobileAppsAndSDKsDescription'|translate('','')|raw }}

- -

{{ 'CoreAdminHome_HttpTrackingApi'|translate }}

-

{{ 'CoreAdminHome_HttpTrackingApiDescription'|translate('','')|raw }}

- - {% if googleAnalyticsImporterMessage is defined %} - {{ googleAnalyticsImporterMessage|raw }} - {% endif %} - - {{ postEvent('Template.endTrackingHelpPage') }} - -
+ {{ 'SitesManager_EmailInstructionsButton'|translate }} {{ postEvent('Template.siteWithoutData.afterIntro') }}

{{ 'SitesManager_SiteWithoutDataIgnoreMessage'|translate }} - + class="btn ignoreSitesWithoutData" + > + {{ 'SitesManager_SiteWithoutDataIgnoreMessage'|translate }} +
{{ postEvent('Template.siteWithoutData.afterTrackingHelp') }} diff --git a/plugins/SitesManager/tests/Unit/GuessSiteTypeAndGtmTest.php b/plugins/SitesManager/tests/Unit/GuessSiteTypeAndGtmTest.php new file mode 100644 index 0000000000..66045cc909 --- /dev/null +++ b/plugins/SitesManager/tests/Unit/GuessSiteTypeAndGtmTest.php @@ -0,0 +1,102 @@ +guesser = new GtmSiteTypeGuesser(); + } + + public function test_site_type_unknown_if_response_false() + { + $this->assertEquals(SitesManager::SITE_TYPE_UNKNOWN, $this->guesser->guessSiteTypeFromResponse(false)); + } + + public function test_gtm_is_false_if_response_false() + { + $this->assertFalse($this->guesser->guessGtmFromResponse(false)); + } + + public function test_gtm_is_true() + { + $response = [ + 'status' => 200, + 'headers' => [], + 'data' => 'it contains gtm.start somewhere' + ]; + + $this->assertTrue($this->guesser->guessGtmFromResponse($response)); + } + + /** + * @dataProvider responseProvider + */ + public function test_site_types_by_response($expected, $response) + { + $this->assertEquals($expected, $this->guesser->guessSiteTypeFromResponse($response)); + } + + public function responseProvider() + { + return [ + [SitesManager::SITE_TYPE_UNKNOWN, [ + 'status' => 200, + 'headers' => [], + 'data' => 'nothing special' + ]], + [SitesManager::SITE_TYPE_SHOPIFY, [ + 'status' => 200, + 'headers' => [], + 'data' => 'contains Shopify.theme text' + ]], + [SitesManager::SITE_TYPE_WORDPRESS, [ + 'status' => 200, + 'headers' => [], + 'data' => 'contains /wp-content text' + ]], + [SitesManager::SITE_TYPE_WIX, [ + 'status' => 200, + 'headers' => [], + 'data' => 'contains X-Wix-Published-Version text' + ]], + [SitesManager::SITE_TYPE_SQUARESPACE, [ + 'status' => 200, + 'headers' => [], + 'data' => 'contains text' + ]], + [SitesManager::SITE_TYPE_SHAREPOINT, [ + 'status' => 200, + 'headers' => [], + 'data' => 'contains content="Microsoft SharePoint text' + ]], + [SitesManager::SITE_TYPE_JOOMLA, [ + 'status' => 200, + 'headers' => ['expires' => 'Wed, 17 Aug 2005 00:00:00 GMT'], + 'data' => 'nothing special' + ]], + ]; + } +} diff --git a/tests/UI/expected-screenshots/EmptySite_emptySiteDashboard.png b/tests/UI/expected-screenshots/EmptySite_emptySiteDashboard.png index 112f1df6d8..7021f9b796 100644 --- a/tests/UI/expected-screenshots/EmptySite_emptySiteDashboard.png +++ b/tests/UI/expected-screenshots/EmptySite_emptySiteDashboard.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d54beb1e50be208a31319ab18e02b797ca6162bd0a0c753067767aa99914620 -size 304247 +oid sha256:40435d9f6f44a8c87fb7a0c0315ee770c9610f8762b52784134130ac8805cc26 +size 154492 diff --git a/tests/UI/expected-screenshots/OneClickUpdate_login.png b/tests/UI/expected-screenshots/OneClickUpdate_login.png index 5ee7509836..58f72315e7 100644 --- a/tests/UI/expected-screenshots/OneClickUpdate_login.png +++ b/tests/UI/expected-screenshots/OneClickUpdate_login.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb42d679123227c6938808ad76539744b8df74c9e384d0b42aa52318d991ae78 -size 271816 +oid sha256:6d116ad0e8509086043d3166a891b7c92b79ed03ffcab362531e8460856e5998 +size 87530 -- cgit v1.2.3