From 57ee42cea6d9c8d8450a7d3827c7df31c51e54d2 Mon Sep 17 00:00:00 2001
From: Benjamin Kott <benjamin.kott@wfp2.com>
Date: Thu, 14 Apr 2016 17:05:26 +0200
Subject: [PATCH] [TASK] Streamline about modules and about

Releases: master
Resolves: #75619
Change-Id: I36e2bdba2baf931726797cbe89a0f10e0519eaba
Reviewed-on: https://review.typo3.org/47668
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Benni Mack <benni@typo3.org>
Tested-by: Benni Mack <benni@typo3.org>
---
 Build/Gruntfile.js                            |   1 +
 .../Public/Less/Component/module.less         |   7 ++
 .../Public/Less/Component/panel.less          |  34 ++++++
 Build/bower.json                              |   5 +-
 .../Classes/Controller/ModulesController.php  |   1 +
 .../Resources/Private/Layouts/Default.html    |   1 -
 .../about/Resources/Private/Less/styles.less  |  70 ------------
 .../Resources/Private/Partials/About.html     |  29 +++--
 .../Resources/Private/Partials/CoreTeam.html  |  22 ++--
 .../Resources/Private/Partials/Credits.html   |  28 ++---
 .../Resources/Private/Partials/Donation.html  |  36 +++---
 .../Private/Partials/Extensions.html          |  56 ++++-----
 .../Private/Partials/ExternalLibraries.html   |  27 ++---
 .../Resources/Private/Partials/Logo.html      |   7 +-
 .../Private/Templates/About/Index.html        |   2 +-
 .../Private/Templates/Modules/Index.html      | 108 +++++++-----------
 .../about/Resources/Public/Css/styles.css     |  53 ---------
 .../Resources/Public/Images/donate_teaser.png | Bin 2170 -> 0 bytes
 .../Public/JavaScript/EqualHeight.js          |  23 ++++
 .../sysext/core/Classes/Page/PageRenderer.php |   1 +
 .../Contrib/jquery.matchHeight-min.js         |  12 ++
 .../Resources/Public/Css/InstallTool.css      |  28 +++++
 .../t3skin/Resources/Public/Css/backend.css   |  28 +++++
 23 files changed, 286 insertions(+), 293 deletions(-)
 delete mode 100644 typo3/sysext/about/Resources/Private/Less/styles.less
 delete mode 100644 typo3/sysext/about/Resources/Public/Css/styles.css
 delete mode 100644 typo3/sysext/about/Resources/Public/Images/donate_teaser.png
 create mode 100644 typo3/sysext/backend/Resources/Public/JavaScript/EqualHeight.js
 create mode 100644 typo3/sysext/core/Resources/Public/JavaScript/Contrib/jquery.matchHeight-min.js

diff --git a/Build/Gruntfile.js b/Build/Gruntfile.js
index 12d737dc8311..50d20c39e557 100644
--- a/Build/Gruntfile.js
+++ b/Build/Gruntfile.js
@@ -144,6 +144,7 @@ module.exports = function(grunt) {
 				},
 				files: {
 					'nprogress.js': 'nprogress/nprogress.js',
+					'jquery.matchHeight-min.js': 'matchHeight/jquery.matchHeight-min.js',
 					'jquery.dataTables.js': 'datatables/media/js/jquery.dataTables.min.js',
 					'require.js': 'requirejs/require.js',
 					'moment.js': 'moment/moment.js',
diff --git a/Build/Resources/Public/Less/Component/module.less b/Build/Resources/Public/Less/Component/module.less
index 1bc7e04f8b3d..ce64d250794a 100644
--- a/Build/Resources/Public/Less/Component/module.less
+++ b/Build/Resources/Public/Less/Component/module.less
@@ -124,6 +124,13 @@
 	> .callout:first-child {
 		margin-top: 0;
 	}
+	> .container {
+		padding-left: 0;
+		padding-right: 0;
+	}
+	.container-small {
+		max-width: 768px;
+	}
 }
 .module-docheader + .module-body {
 	padding-top: @module-docheader-height + @module-body-padding-vertical;
diff --git a/Build/Resources/Public/Less/Component/panel.less b/Build/Resources/Public/Less/Component/panel.less
index 9145c4adb1d8..3e4f34064cdc 100644
--- a/Build/Resources/Public/Less/Component/panel.less
+++ b/Build/Resources/Public/Less/Component/panel.less
@@ -40,6 +40,17 @@
 @panel-active-border:        #444;
 @panel-active-heading-bg:    #666;
 
+//
+// Panel
+//
+.panel {
+	display: block;
+	&:hover,
+	&:focus {
+		text-decoration: none;
+	}
+}
+
 //
 // Heading
 //
@@ -76,10 +87,33 @@
 // Body
 //
 .panel-body {
+	> *:first-child {
+		margin-top: 0;
+	}
 	> *:last-child {
 		margin-bottom: 0;
 	}
 }
+// @TODO workaround to make links visible
+.panel-body-highlightlinks {
+	> p > a {
+		text-decoration: underline;
+	}
+}
+
+//
+// Table
+//
+.panel-table {
+	th:first-child,
+	td:first-child {
+		padding-left: @panel-body-padding;
+	}
+	th:last-child,
+	td:last-child {
+		padding-right: @panel-body-padding;
+	}
+}
 
 //
 // Additional Variations
diff --git a/Build/bower.json b/Build/bower.json
index fe67ebfbf224..2cb60e8cc5be 100644
--- a/Build/bower.json
+++ b/Build/bower.json
@@ -36,12 +36,13 @@
     "nprogress": "0.2.0",
     "datatables": "1.10.11",
     "autosize": "3.0.15",
-	"cropper": "2.3.0",
+    "cropper": "2.3.0",
     "imagesloaded": "4.1.0",
     "taboverride": "4.0.3",
     "seiyria-bootstrap-slider": "6.1.2",
     "devbridge-autocomplete": "1.2.24",
     "region-flags": "*",
-    "wmdbsystems-typo3-icons": "0.0.10"
+    "wmdbsystems-typo3-icons": "0.0.10",
+    "matchHeight": "matchheight#^0.7.0"
   }
 }
diff --git a/typo3/sysext/about/Classes/Controller/ModulesController.php b/typo3/sysext/about/Classes/Controller/ModulesController.php
index 6ca229564dc6..f82e98827029 100644
--- a/typo3/sysext/about/Classes/Controller/ModulesController.php
+++ b/typo3/sysext/about/Classes/Controller/ModulesController.php
@@ -63,6 +63,7 @@ class ModulesController extends ActionController
         parent::initializeView($view);
         // Disable Path
         $view->getModuleTemplate()->getDocHeaderComponent()->setMetaInformation([]);
+        $view->getModuleTemplate()->getPageRenderer()->loadRequireJsModule('TYPO3/CMS/Backend/EqualHeight');
     }
 
     /**
diff --git a/typo3/sysext/about/Resources/Private/Layouts/Default.html b/typo3/sysext/about/Resources/Private/Layouts/Default.html
index 15f21e6e09b5..24f730cfebcc 100644
--- a/typo3/sysext/about/Resources/Private/Layouts/Default.html
+++ b/typo3/sysext/about/Resources/Private/Layouts/Default.html
@@ -1,2 +1 @@
-<f:be.pageRenderer includeCssFiles="{0: '{f:uri.resource(path:\'Css/styles.css\')}'}" />
 <f:render section="Content" />
diff --git a/typo3/sysext/about/Resources/Private/Less/styles.less b/typo3/sysext/about/Resources/Private/Less/styles.less
deleted file mode 100644
index 13b6ef3cdad6..000000000000
--- a/typo3/sysext/about/Resources/Private/Less/styles.less
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-/* - - - - - - - - - - - - - - - - - - - - -
-Help > About
-- - - - - - - - - - - - - - - - - - - - - */
-
-#typo3-mod-help-about-index-php-outer {
-	padding: 15px;
-	margin: 0 auto;
-	max-width: 600px;
-
-	> div {
-		margin: 10px auto 20px;
-		padding: 1em;
-		border: 1px solid #adadad;
-
-		h2 {
-			margin-top: 0;
-		}
-	}
-
-	#donation-description {
-		background-image: url("../Images/donate_teaser.png");
-		background-repeat: no-repeat;
-		padding-left: 60px;
-		margin: 10px 0;
-	}
-
-	a {
-		color: black;
-		text-decoration: underline;
-	}
-}
-
-
-/* - - - - - - - - - - - - - - - - - - - - -
-Help > About modules
-- - - - - - - - - - - - - - - - - - - - - */
-
-.typo3-aboutmodules-inner-docbody {
-
-	a {
-		text-decoration: underline;
-	}
-
-	.end-text {
-		padding-top: 3em;
-	}
-
-	h2 {
-		margin-bottom: 1em;
-	}
-
-	.submodule {
-		padding-bottom: 3em;
-	}
-}
-
-
diff --git a/typo3/sysext/about/Resources/Private/Partials/About.html b/typo3/sysext/about/Resources/Private/Partials/About.html
index 6b38380a5cad..919ff95e7967 100644
--- a/typo3/sysext/about/Resources/Private/Partials/About.html
+++ b/typo3/sysext/about/Resources/Private/Partials/About.html
@@ -1,16 +1,13 @@
-<div>
-	<h1>
-		<f:translate key="LLL:EXT:lang/locallang_mod_help_about.xlf:welcome" />
-	</h1>
-	<p>
-		<f:translate
-			key="LLL:EXT:lang/locallang_mod_help_about.xlf:cms_description"
-			arguments="{
-				0: '{TYPO3Version}',
-				1: '&copy; {TYPO3CopyrightYear}',
-				2: 'Kasper Sk&aring;rh&oslash;j'
-			}"
-			htmlEscape="0"
-		/>
-	</p>
-</div>
\ No newline at end of file
+<p>
+	<f:translate
+		key="LLL:EXT:lang/locallang_mod_help_about.xlf:cms_description"
+		arguments="{
+			0: '{TYPO3Version}',
+			1: '&copy; {TYPO3CopyrightYear}',
+			2: 'Kasper Sk&aring;rh&oslash;j'
+		}"
+		htmlEscape="0"
+	/>
+</p>
+<br>
+<br>
diff --git a/typo3/sysext/about/Resources/Private/Partials/CoreTeam.html b/typo3/sysext/about/Resources/Private/Partials/CoreTeam.html
index 370d71e9dc78..5802a9e19df9 100644
--- a/typo3/sysext/about/Resources/Private/Partials/CoreTeam.html
+++ b/typo3/sysext/about/Resources/Private/Partials/CoreTeam.html
@@ -1,11 +1,13 @@
-<div>
-	<h2>
-		<f:translate key="LLL:EXT:lang/locallang_mod_help_about.xlf:coredevs" />
-	</h2>
-	<p>
-		<f:translate
-			key="LLL:EXT:lang/locallang_mod_help_about.xlf:coredevs_detail"
-			htmlEscape="0"
-		/>
-	</p>
+<div class="panel panel-default">
+	<div class="panel-body panel-body-highlightlinks">
+		<h2 class="h4">
+			<f:translate key="LLL:EXT:lang/locallang_mod_help_about.xlf:coredevs" />
+		</h2>
+		<p>
+			<f:translate
+				key="LLL:EXT:lang/locallang_mod_help_about.xlf:coredevs_detail"
+				htmlEscape="0"
+			/>
+		</p>
+	</div>
 </div>
diff --git a/typo3/sysext/about/Resources/Private/Partials/Credits.html b/typo3/sysext/about/Resources/Private/Partials/Credits.html
index b3eca2d3729d..ead989d5ee69 100644
--- a/typo3/sysext/about/Resources/Private/Partials/Credits.html
+++ b/typo3/sysext/about/Resources/Private/Partials/Credits.html
@@ -1,14 +1,16 @@
-<div>
-	<h2>
-		<f:translate
-			key="LLL:EXT:lang/locallang_mod_help_about.xlf:community_credits"
-			htmlEscape="0"
-		/>
-	</h2>
-	<p>
-		<f:translate
-			key="LLL:EXT:lang/locallang_mod_help_about.xlf:information_detail"
-			htmlEscape="0"
-		/>
-	</p>
+<div class="panel panel-default">
+	<div class="panel-body panel-body-highlightlinks">
+		<h2 class="h4">
+			<f:translate
+				key="LLL:EXT:lang/locallang_mod_help_about.xlf:community_credits"
+				htmlEscape="0"
+			/>
+		</h2>
+		<p>
+			<f:translate
+				key="LLL:EXT:lang/locallang_mod_help_about.xlf:information_detail"
+				htmlEscape="0"
+			/>
+		</p>
+	</div>
 </div>
diff --git a/typo3/sysext/about/Resources/Private/Partials/Donation.html b/typo3/sysext/about/Resources/Private/Partials/Donation.html
index f65b66d1341d..475abaf2a350 100644
--- a/typo3/sysext/about/Resources/Private/Partials/Donation.html
+++ b/typo3/sysext/about/Resources/Private/Partials/Donation.html
@@ -1,20 +1,16 @@
-<div>
-	<h2>
-		<f:translate key="LLL:EXT:lang/locallang_mod_help_about.xlf:donation_header" />
-	</h2>
-
-	<p id="donation-description">
-		<f:translate
-			key="LLL:EXT:lang/locallang_mod_help_about.xlf:donation_message"
-			htmlEscape="0"
-		/>
-	</p>
-
-	<p class="text-right">
-		<button
-			class="btn btn-large"
-			onclick="window.open('{TYPO3UrlDonate}');"
-		><f:translate key="LLL:EXT:lang/locallang_mod_help_about.xlf:donation_button" /></button>
-	</p>
-
-</div>
\ No newline at end of file
+<div class="panel panel-default">
+	<div class="panel-body panel-body-highlightlinks">
+		<h2 class="h4">
+			<f:translate key="LLL:EXT:lang/locallang_mod_help_about.xlf:donation_header" />
+		</h2>
+		<p>
+			<f:translate
+				key="LLL:EXT:lang/locallang_mod_help_about.xlf:donation_message"
+				htmlEscape="0"
+			/>
+		</p>
+		<a href="{TYPO3UrlDonate}" class="btn btn-default" title="{f:translate(key:'LLL:EXT:lang/locallang_mod_help_about.xlf:donation_button')}" target="_blank">
+			<f:translate key="LLL:EXT:lang/locallang_mod_help_about.xlf:donation_button" />
+		</a>
+	</div>
+</div>
diff --git a/typo3/sysext/about/Resources/Private/Partials/Extensions.html b/typo3/sysext/about/Resources/Private/Partials/Extensions.html
index fadcf317f7b4..21dee19c1973 100644
--- a/typo3/sysext/about/Resources/Private/Partials/Extensions.html
+++ b/typo3/sysext/about/Resources/Private/Partials/Extensions.html
@@ -1,32 +1,36 @@
 <f:if condition="{loadedExtensions}">
-	<div>
-		<h2>
-			<f:translate key="LLL:EXT:lang/locallang_mod_help_about.xlf:extension_authors" />
-		</h2>
-		<p>
-			<f:translate key="LLL:EXT:lang/locallang_mod_help_about.xlf:extension_list_info" />
-		</p>
-		<br/>
-		<table border="0" cellspacing="2" cellpadding="1">
-			<tr>
-				<th><f:translate key="LLL:EXT:lang/locallang_mod_help_about.xlf:extension" /></th>
-				<th><f:translate key="LLL:EXT:lang/locallang_mod_help_about.xlf:extension_author" /></th>
-			</tr>
-
-			<f:for each="{loadedExtensions}" as="loadedExtension">
+	<div class="panel panel-default">
+		<div class="panel-body panel-body-highlightlinks">
+			<h2 class="h3">
+				<f:translate key="LLL:EXT:lang/locallang_mod_help_about.xlf:extension_authors" />
+			</h2>
+			<p>
+				<f:translate key="LLL:EXT:lang/locallang_mod_help_about.xlf:extension_list_info" />
+			</p>
+		</div>
+		<table class="table panel-table">
+			<thead>
 				<tr>
-					<td width="280">
-						{loadedExtension.title} ({loadedExtension.key})
-					</td>
-					<td>
-						<f:link.email
-							email="{loadedExtension.authorEmail}?subject={f:format.urlencode(value:'Thanks for your {loadedExtension.title} extension')}"
-						>
-							{loadedExtension.author}
-						</f:link.email>
-					</td>
+					<th width="35%"><f:translate key="LLL:EXT:lang/locallang_mod_help_about.xlf:extension" /></th>
+					<th><f:translate key="LLL:EXT:lang/locallang_mod_help_about.xlf:extension_author" /></th>
 				</tr>
-			</f:for>
+			</thead>
+			<tbody>
+				<f:for each="{loadedExtensions}" as="loadedExtension">
+					<tr>
+						<td>
+							{loadedExtension.title} ({loadedExtension.key})
+						</td>
+						<td>
+							<f:link.email
+								email="{loadedExtension.authorEmail}?subject={f:format.urlencode(value:'Thanks for your {loadedExtension.title} extension')}"
+							>
+								{loadedExtension.author}
+							</f:link.email>
+						</td>
+					</tr>
+				</f:for>
+			</tbody>
 		</table>
 	</div>
 </f:if>
diff --git a/typo3/sysext/about/Resources/Private/Partials/ExternalLibraries.html b/typo3/sysext/about/Resources/Private/Partials/ExternalLibraries.html
index 355d8db727b3..59de7bf745c4 100644
--- a/typo3/sysext/about/Resources/Private/Partials/ExternalLibraries.html
+++ b/typo3/sysext/about/Resources/Private/Partials/ExternalLibraries.html
@@ -1,17 +1,18 @@
-<div>
-	<h2>
-		<f:translate key="LLL:EXT:lang/locallang_mod_help_about.xlf:external_libraries" />
-	</h2>
-	<p>
-		<f:translate
-			key="LLL:EXT:lang/locallang_mod_help_about.xlf:external_thanks"
-			htmlEscape="0"
-		/>
-	</p>
-	<br />
-	<table border="0" cellspacing="2" cellpadding="1">
+<div class="panel panel-default">
+	<div class="panel-body panel-body-highlightlinks">
+		<h2 class="h3">
+			<f:translate key="LLL:EXT:lang/locallang_mod_help_about.xlf:external_libraries" />
+		</h2>
+		<p>
+			<f:translate
+				key="LLL:EXT:lang/locallang_mod_help_about.xlf:external_thanks"
+				htmlEscape="0"
+			/>
+		</p>
+	</div>
+	<table class="table panel-table">
 		<tr>
-			<td width="280">Audio player Plugin</td>
+			<td width="35%">Audio player Plugin</td>
 			<td><a href="http://www.1pixelout.net/code/audio-player-wordpress-plugin/" target="_blank">www.1pixelout.net</a></td>
 		</tr>
 		<tr>
diff --git a/typo3/sysext/about/Resources/Private/Partials/Logo.html b/typo3/sysext/about/Resources/Private/Partials/Logo.html
index 45fc2c46db21..fb99937bb6df 100644
--- a/typo3/sysext/about/Resources/Private/Partials/Logo.html
+++ b/typo3/sysext/about/Resources/Private/Partials/Logo.html
@@ -1,3 +1,8 @@
 <img src="{f:uri.resource(path: 'Images/typo3-transparent@2x.png', extensionName: 'backend')}" width="150"
 	alt="{f:translate(key:'LLL:EXT:lang/locallang_mod_help_about.xlf:typo3_logo')}" />
-<br><br>
+<br>
+<br>
+<h1>
+	TYPO3 CMS {TYPO3Version}<br>
+	<f:translate key="LLL:EXT:lang/locallang_alt_intro.xlf:introtext" />
+</h1>
diff --git a/typo3/sysext/about/Resources/Private/Templates/About/Index.html b/typo3/sysext/about/Resources/Private/Templates/About/Index.html
index 231e8c301106..fa438b49ca6b 100644
--- a/typo3/sysext/about/Resources/Private/Templates/About/Index.html
+++ b/typo3/sysext/about/Resources/Private/Templates/About/Index.html
@@ -1,7 +1,7 @@
 <f:layout name="Default" />
 
 <f:section name="Content">
-	<div id="typo3-mod-help-about-index-php-outer">
+	<div class="container container-small">
 		<f:render partial="Logo" arguments="{_all}" />
 		<f:render partial="About" arguments="{_all}" />
 		<f:render partial="Donation" arguments="{_all}" />
diff --git a/typo3/sysext/about/Resources/Private/Templates/Modules/Index.html b/typo3/sysext/about/Resources/Private/Templates/Modules/Index.html
index 8725142a8bac..5bbdd19636c9 100644
--- a/typo3/sysext/about/Resources/Private/Templates/Modules/Index.html
+++ b/typo3/sysext/about/Resources/Private/Templates/Modules/Index.html
@@ -1,90 +1,64 @@
 {namespace core = TYPO3\CMS\Core\ViewHelpers}
-
 <f:layout name="Default" />
-
 <f:section name="Content">
-	<div class="typo3-aboutmodules-inner-docbody">
-		<h1>TYPO3 CMS {TYPO3Version}<br />
-			<f:translate key="LLL:EXT:lang/locallang_alt_intro.xlf:introtext" />
-		</h1>
 
-		<p class="lead">
+	<div class="container container-small">
+		<f:render partial="Logo" arguments="{_all}" />
+		<p>
 			<f:translate key="LLL:EXT:lang/locallang_alt_intro.xlf:introtext2" />
 		</p>
-
 		<f:if condition="{warningMessages}">
 			<f:be.infobox title="{warningTitle}" state="2">{warningMessages -> f:format.raw()}</f:be.infobox>
 		</f:if>
-
 		<f:for each="{modules}" as="mainModule">
 			<f:if condition="{mainModule.subModules}">
 				<f:if condition="{mainModule.label}">
 					<h2>{f:translate(key: mainModule.label)}</h2>
 				</f:if>
-				<div class="container-fuid">
-					<div class="row">
-						<f:for each="{mainModule.subModules}" as="subModule" iteration="subModuleIterator">
-							<div class="col-xs-12 col-sm-6">
-								<div class="submodule media clearfix">
-									<a
-										href="#"
-										onclick="top.goToModule('{mainModule.name}_{subModule.name}'); return false;"
-										title="{f:if(condition: subModule.shortDescription, then: '{f:translate(key: subModule.shortDescription)}')}"
-										class="pull-left"
-									>
-										<span class="typo3-app-icon media-object" title="{f:if(condition: subModule.label, then: '{f:translate(key: subModule.label)}')}">
-											<span>
-												<span>
-													<core:icon identifier="{subModule.iconIdentifier}" size="default" />
-												</span>
+				<div class="row">
+					<f:for each="{mainModule.subModules}" as="subModule" iteration="subModuleIterator">
+						<div class="col-xs-12 col-sm-6">
+							<a
+								href="#"
+								onclick="top.goToModule('{mainModule.name}_{subModule.name}'); return false;"
+								title="{f:if(condition: subModule.shortDescription, then: '{f:translate(key: subModule.shortDescription)}')}"
+								class="panel panel-default t3js-equalheight"
+							>
+								<div class="panel-body">
+									<div class="media">
+										<div class="media-left">
+											<span class="media-object" title="{f:if(condition: subModule.label, then: '{f:translate(key: subModule.label)}')}">
+												<core:icon identifier="{subModule.iconIdentifier}" size="default" />
 											</span>
-										</span>
-									</a>
-
-									<div class="media-body">
-										<f:if condition="{subModule.label}">
-											<strong>
-												<a
-													href="#"
-													onclick="top.goToModule('{mainModule.name}_{subModule.name}'); return false;"
-													title="{f:if(condition: subModule.shortDescription, then: '{f:translate(key: subModule.shortDescription)}')}"
-												>{f:translate(key: subModule.label)}</a>
-											</strong><br>
-										</f:if>
-
-										<f:if condition="{subModule.shortDescription}">
-											<small class="text-muted"><f:translate key="{subModule.shortDescription}" /></small><br>
-										</f:if>
-
-										<f:if condition="{subModule.longDescription}">
-											{f:translate(key: subModule.longDescription) -> f:format.raw()}
-										</f:if>
+										</div>
+										<div class="media-body">
+											<f:if condition="{subModule.label}">
+												<h3 class="h4 media-heading">
+													{f:translate(key: subModule.label)}
+													<f:if condition="{subModule.shortDescription}">
+														<br><small class="text-muted"><f:translate key="{subModule.shortDescription}" /></small><br>
+													</f:if>
+												</h3>
+											</f:if>
+											<f:if condition="{subModule.longDescription}">
+												{f:translate(key: subModule.longDescription) -> f:format.raw()}
+											</f:if>
+										</div>
 									</div>
 								</div>
-							</div>
-
-							<f:if condition="{subModuleIterator.isEven}">
-								<f:if condition="{subModuleIterator.isLast} == 0">
-									</div><div class="row">
-								</f:if>
+							</a>
+						</div>
+						<f:if condition="{subModuleIterator.isEven}">
+							<f:if condition="{subModuleIterator.isLast} == 0">
+								</div><div class="row">
 							</f:if>
-						</f:for>
-					</div>
+						</f:if>
+					</f:for>
 				</div>
 			</f:if>
 		</f:for>
-
-		<p class="end-text text-info">
-			<em>
-				(<f:translate key="LLL:EXT:lang/locallang_alt_intro.xlf:endText" />)
-			</em>
-		</p>
-
-		<p>
-			<small>
-				{copyRightNotice -> f:format.raw()}
-			</small>
-		</p>
-
+		<p><em class="text-muted"><f:translate key="LLL:EXT:lang/locallang_alt_intro.xlf:endText" /></em></p>
+		<p>{copyRightNotice -> f:format.raw()}</p>
 	</div>
+
 </f:section>
diff --git a/typo3/sysext/about/Resources/Public/Css/styles.css b/typo3/sysext/about/Resources/Public/Css/styles.css
deleted file mode 100644
index fc677b3a87d0..000000000000
--- a/typo3/sysext/about/Resources/Public/Css/styles.css
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-/* - - - - - - - - - - - - - - - - - - - - -
-Help > About
-- - - - - - - - - - - - - - - - - - - - - */
-#typo3-mod-help-about-index-php-outer {
-  padding: 15px;
-  margin: 0 auto;
-  max-width: 600px;
-}
-#typo3-mod-help-about-index-php-outer > div {
-  margin: 10px auto 20px;
-  padding: 1em;
-  border: 1px solid #adadad;
-}
-#typo3-mod-help-about-index-php-outer > div h2 {
-  margin-top: 0;
-}
-#typo3-mod-help-about-index-php-outer #donation-description {
-  background-image: url("../Images/donate_teaser.png");
-  background-repeat: no-repeat;
-  padding-left: 60px;
-  margin: 10px 0;
-}
-#typo3-mod-help-about-index-php-outer a {
-  color: black;
-  text-decoration: underline;
-}
-/* - - - - - - - - - - - - - - - - - - - - -
-Help > About modules
-- - - - - - - - - - - - - - - - - - - - - */
-.typo3-aboutmodules-inner-docbody a {
-	text-decoration: underline;
-}
-.typo3-aboutmodules-inner-docbody .end-text {
-	padding-top: 3em;
-}
-.typo3-aboutmodules-inner-docbody h2 {
-	margin-bottom: 1em;
-}
-.typo3-aboutmodules-inner-docbody .submodule {
-	padding-bottom: 3em;
-}
diff --git a/typo3/sysext/about/Resources/Public/Images/donate_teaser.png b/typo3/sysext/about/Resources/Public/Images/donate_teaser.png
deleted file mode 100644
index e528d5becf446c143f544e7c1a88f2f4b040cf12..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2170
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

diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/EqualHeight.js b/typo3/sysext/backend/Resources/Public/JavaScript/EqualHeight.js
new file mode 100644
index 000000000000..039747e2e967
--- /dev/null
+++ b/typo3/sysext/backend/Resources/Public/JavaScript/EqualHeight.js
@@ -0,0 +1,23 @@
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+/**
+ * Module: TYPO3/CMS/Backend/EqualHeight
+ * matchHeight makes the height of all selected elements exactly equal.
+ */
+define(['jquery', 'matchheight'], function($) {
+	'use strict';
+
+	$('.t3js-equalheight').matchHeight();
+
+});
diff --git a/typo3/sysext/core/Classes/Page/PageRenderer.php b/typo3/sysext/core/Classes/Page/PageRenderer.php
index ada7c1cd1dd5..2f0373c68e30 100644
--- a/typo3/sysext/core/Classes/Page/PageRenderer.php
+++ b/typo3/sysext/core/Classes/Page/PageRenderer.php
@@ -1550,6 +1550,7 @@ class PageRenderer implements \TYPO3\CMS\Core\SingletonInterface
             $this->requireJsConfig['paths'] = array(
                 'jquery-ui' => $corePath . 'jquery-ui',
                 'datatables' => $corePath . 'jquery.dataTables',
+                'matchheight' => $corePath . 'jquery.matchHeight-min',
                 'nprogress' => $corePath . 'nprogress',
                 'moment' => $corePath . 'moment',
                 'cropper' => $corePath . 'cropper.min',
diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/jquery.matchHeight-min.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/jquery.matchHeight-min.js
new file mode 100644
index 000000000000..9b18871eb57e
--- /dev/null
+++ b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/jquery.matchHeight-min.js
@@ -0,0 +1,12 @@
+/*
+* jquery-match-height master by @liabru
+* http://brm.io/jquery-match-height/
+* License MIT
+*/
+!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):"undefined"!=typeof module&&module.exports?module.exports=t(require("jquery")):t(jQuery)}(function(t){var e=-1,o=-1,a=function(t){return parseFloat(t)||0},i=function(e){var o=1,i=t(e),n=null,r=[];return i.each(function(){var e=t(this),i=e.offset().top-a(e.css("margin-top")),s=r.length>0?r[r.length-1]:null;null===s?r.push(e):Math.floor(Math.abs(n-i))<=o?r[r.length-1]=s.add(e):r.push(e),n=i}),r},n=function(e){var o={
+byRow:!0,property:"height",target:null,remove:!1};return"object"==typeof e?t.extend(o,e):("boolean"==typeof e?o.byRow=e:"remove"===e&&(o.remove=!0),o)},r=t.fn.matchHeight=function(e){var o=n(e);if(o.remove){var a=this;return this.css(o.property,""),t.each(r._groups,function(t,e){e.elements=e.elements.not(a)}),this}return this.length<=1&&!o.target?this:(r._groups.push({elements:this,options:o}),r._apply(this,o),this)};r.version="master",r._groups=[],r._throttle=80,r._maintainScroll=!1,r._beforeUpdate=null,
+r._afterUpdate=null,r._rows=i,r._parse=a,r._parseOptions=n,r._apply=function(e,o){var s=n(o),h=t(e),l=[h],c=t(window).scrollTop(),p=t("html").outerHeight(!0),d=h.parents().filter(":hidden");return d.each(function(){var e=t(this);e.data("style-cache",e.attr("style"))}),d.css("display","block"),s.byRow&&!s.target&&(h.each(function(){var e=t(this),o=e.css("display");"inline-block"!==o&&"flex"!==o&&"inline-flex"!==o&&(o="block"),e.data("style-cache",e.attr("style")),e.css({display:o,"padding-top":"0",
+"padding-bottom":"0","margin-top":"0","margin-bottom":"0","border-top-width":"0","border-bottom-width":"0",height:"100px",overflow:"hidden"})}),l=i(h),h.each(function(){var e=t(this);e.attr("style",e.data("style-cache")||"")})),t.each(l,function(e,o){var i=t(o),n=0;if(s.target)n=s.target.outerHeight(!1);else{if(s.byRow&&i.length<=1)return void i.css(s.property,"");i.each(function(){var e=t(this),o=e.attr("style"),a=e.css("display");"inline-block"!==a&&"flex"!==a&&"inline-flex"!==a&&(a="block");var i={
+display:a};i[s.property]="",e.css(i),e.outerHeight(!1)>n&&(n=e.outerHeight(!1)),o?e.attr("style",o):e.css("display","")})}i.each(function(){var e=t(this),o=0;s.target&&e.is(s.target)||("border-box"!==e.css("box-sizing")&&(o+=a(e.css("border-top-width"))+a(e.css("border-bottom-width")),o+=a(e.css("padding-top"))+a(e.css("padding-bottom"))),e.css(s.property,n-o+"px"))})}),d.each(function(){var e=t(this);e.attr("style",e.data("style-cache")||null)}),r._maintainScroll&&t(window).scrollTop(c/p*t("html").outerHeight(!0)),
+this},r._applyDataApi=function(){var e={};t("[data-match-height], [data-mh]").each(function(){var o=t(this),a=o.attr("data-mh")||o.attr("data-match-height");a in e?e[a]=e[a].add(o):e[a]=o}),t.each(e,function(){this.matchHeight(!0)})};var s=function(e){r._beforeUpdate&&r._beforeUpdate(e,r._groups),t.each(r._groups,function(){r._apply(this.elements,this.options)}),r._afterUpdate&&r._afterUpdate(e,r._groups)};r._update=function(a,i){if(i&&"resize"===i.type){var n=t(window).width();if(n===e)return;e=n;
+}a?-1===o&&(o=setTimeout(function(){s(i),o=-1},r._throttle)):s(i)},t(r._applyDataApi),t(window).bind("load",function(t){r._update(!1,t)}),t(window).bind("resize orientationchange",function(t){r._update(!0,t)})});
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Public/Css/InstallTool.css b/typo3/sysext/install/Resources/Public/Css/InstallTool.css
index 8306db1ee6f8..fe37ffecfd25 100644
--- a/typo3/sysext/install/Resources/Public/Css/InstallTool.css
+++ b/typo3/sysext/install/Resources/Public/Css/InstallTool.css
@@ -7519,9 +7519,23 @@ button.close {
 .module-body > .callout:first-child {
   margin-top: 0;
 }
+.module-body > .container {
+  padding-left: 0;
+  padding-right: 0;
+}
+.module-body .container-small {
+  max-width: 768px;
+}
 .module-docheader + .module-body {
   padding-top: 89px;
 }
+.panel {
+  display: block;
+}
+.panel:hover,
+.panel:focus {
+  text-decoration: none;
+}
 .panel-heading a,
 .panel-heading a:hover,
 .panel-heading a:focus a:active {
@@ -7542,9 +7556,23 @@ button.close {
   display: inline-block;
   vertical-align: middle;
 }
+.panel-body > *:first-child {
+  margin-top: 0;
+}
 .panel-body > *:last-child {
   margin-bottom: 0;
 }
+.panel-body-highlightlinks > p > a {
+  text-decoration: underline;
+}
+.panel-table th:first-child,
+.panel-table td:first-child {
+  padding-left: 15px;
+}
+.panel-table th:last-child,
+.panel-table td:last-child {
+  padding-right: 15px;
+}
 .panel-active {
   border-color: #444444;
 }
diff --git a/typo3/sysext/t3skin/Resources/Public/Css/backend.css b/typo3/sysext/t3skin/Resources/Public/Css/backend.css
index 87b11d4389bf..013dd399c206 100644
--- a/typo3/sysext/t3skin/Resources/Public/Css/backend.css
+++ b/typo3/sysext/t3skin/Resources/Public/Css/backend.css
@@ -7528,9 +7528,23 @@ button.close {
 .module-body > .callout:first-child {
   margin-top: 0;
 }
+.module-body > .container {
+  padding-left: 0;
+  padding-right: 0;
+}
+.module-body .container-small {
+  max-width: 768px;
+}
 .module-docheader + .module-body {
   padding-top: 89px;
 }
+.panel {
+  display: block;
+}
+.panel:hover,
+.panel:focus {
+  text-decoration: none;
+}
 .panel-heading a,
 .panel-heading a:hover,
 .panel-heading a:focus a:active {
@@ -7551,9 +7565,23 @@ button.close {
   display: inline-block;
   vertical-align: middle;
 }
+.panel-body > *:first-child {
+  margin-top: 0;
+}
 .panel-body > *:last-child {
   margin-bottom: 0;
 }
+.panel-body-highlightlinks > p > a {
+  text-decoration: underline;
+}
+.panel-table th:first-child,
+.panel-table td:first-child {
+  padding-left: 15px;
+}
+.panel-table th:last-child,
+.panel-table td:last-child {
+  padding-right: 15px;
+}
 .panel-active {
   border-color: #444444;
 }
-- 
GitLab